@@ -6478,6 +6478,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
6478
6478
struct port_info * pi ;
6479
6479
bool highdma = false;
6480
6480
struct adapter * adapter = NULL ;
6481
+ void __iomem * regs ;
6481
6482
6482
6483
printk_once (KERN_INFO "%s - version %s\n" , DRV_DESC , DRV_VERSION );
6483
6484
@@ -6494,19 +6495,35 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
6494
6495
goto out_release_regions ;
6495
6496
}
6496
6497
6498
+ regs = pci_ioremap_bar (pdev , 0 );
6499
+ if (!regs ) {
6500
+ dev_err (& pdev -> dev , "cannot map device registers\n" );
6501
+ err = - ENOMEM ;
6502
+ goto out_disable_device ;
6503
+ }
6504
+
6505
+ /* We control everything through one PF */
6506
+ func = SOURCEPF_GET (readl (regs + PL_WHOAMI ));
6507
+ if (func != ent -> driver_data ) {
6508
+ iounmap (regs );
6509
+ pci_disable_device (pdev );
6510
+ pci_save_state (pdev ); /* to restore SR-IOV later */
6511
+ goto sriov ;
6512
+ }
6513
+
6497
6514
if (!pci_set_dma_mask (pdev , DMA_BIT_MASK (64 ))) {
6498
6515
highdma = true;
6499
6516
err = pci_set_consistent_dma_mask (pdev , DMA_BIT_MASK (64 ));
6500
6517
if (err ) {
6501
6518
dev_err (& pdev -> dev , "unable to obtain 64-bit DMA for "
6502
6519
"coherent allocations\n" );
6503
- goto out_disable_device ;
6520
+ goto out_unmap_bar0 ;
6504
6521
}
6505
6522
} else {
6506
6523
err = pci_set_dma_mask (pdev , DMA_BIT_MASK (32 ));
6507
6524
if (err ) {
6508
6525
dev_err (& pdev -> dev , "no usable DMA configuration\n" );
6509
- goto out_disable_device ;
6526
+ goto out_unmap_bar0 ;
6510
6527
}
6511
6528
}
6512
6529
@@ -6518,7 +6535,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
6518
6535
adapter = kzalloc (sizeof (* adapter ), GFP_KERNEL );
6519
6536
if (!adapter ) {
6520
6537
err = - ENOMEM ;
6521
- goto out_disable_device ;
6538
+ goto out_unmap_bar0 ;
6522
6539
}
6523
6540
6524
6541
adapter -> workq = create_singlethread_workqueue ("cxgb4" );
@@ -6530,20 +6547,7 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
6530
6547
/* PCI device has been enabled */
6531
6548
adapter -> flags |= DEV_ENABLED ;
6532
6549
6533
- adapter -> regs = pci_ioremap_bar (pdev , 0 );
6534
- if (!adapter -> regs ) {
6535
- dev_err (& pdev -> dev , "cannot map device registers\n" );
6536
- err = - ENOMEM ;
6537
- goto out_free_adapter ;
6538
- }
6539
-
6540
- /* We control everything through one PF */
6541
- func = SOURCEPF_GET (readl (adapter -> regs + PL_WHOAMI ));
6542
- if (func != ent -> driver_data ) {
6543
- pci_save_state (pdev ); /* to restore SR-IOV later */
6544
- goto sriov ;
6545
- }
6546
-
6550
+ adapter -> regs = regs ;
6547
6551
adapter -> pdev = pdev ;
6548
6552
adapter -> pdev_dev = & pdev -> dev ;
6549
6553
adapter -> mbox = func ;
@@ -6560,7 +6564,8 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
6560
6564
6561
6565
err = t4_prep_adapter (adapter );
6562
6566
if (err )
6563
- goto out_unmap_bar0 ;
6567
+ goto out_free_adapter ;
6568
+
6564
6569
6565
6570
if (!is_t4 (adapter -> params .chip )) {
6566
6571
s_qpp = QUEUESPERPAGEPF1 * adapter -> fn ;
@@ -6577,14 +6582,14 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
6577
6582
dev_err (& pdev -> dev ,
6578
6583
"Incorrect number of egress queues per page\n" );
6579
6584
err = - EINVAL ;
6580
- goto out_unmap_bar0 ;
6585
+ goto out_free_adapter ;
6581
6586
}
6582
6587
adapter -> bar2 = ioremap_wc (pci_resource_start (pdev , 2 ),
6583
6588
pci_resource_len (pdev , 2 ));
6584
6589
if (!adapter -> bar2 ) {
6585
6590
dev_err (& pdev -> dev , "cannot map device bar2 region\n" );
6586
6591
err = - ENOMEM ;
6587
- goto out_unmap_bar0 ;
6592
+ goto out_free_adapter ;
6588
6593
}
6589
6594
}
6590
6595
@@ -6722,13 +6727,13 @@ static int init_one(struct pci_dev *pdev, const struct pci_device_id *ent)
6722
6727
out_unmap_bar :
6723
6728
if (!is_t4 (adapter -> params .chip ))
6724
6729
iounmap (adapter -> bar2 );
6725
- out_unmap_bar0 :
6726
- iounmap (adapter -> regs );
6727
6730
out_free_adapter :
6728
6731
if (adapter -> workq )
6729
6732
destroy_workqueue (adapter -> workq );
6730
6733
6731
6734
kfree (adapter );
6735
+ out_unmap_bar0 :
6736
+ iounmap (regs );
6732
6737
out_disable_device :
6733
6738
pci_disable_pcie_error_reporting (pdev );
6734
6739
pci_disable_device (pdev );
0 commit comments