|
@@ -7979,6 +7979,7 @@ static int ixgbe_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
|
|
|
int i, err, pci_using_dac, expected_gts;
|
|
|
unsigned int indices = MAX_TX_QUEUES;
|
|
|
u8 part_str[IXGBE_PBANUM_LENGTH];
|
|
|
+ bool disable_dev = false;
|
|
|
#ifdef IXGBE_FCOE
|
|
|
u16 device_caps;
|
|
|
#endif
|
|
@@ -8369,13 +8370,14 @@ err_sw_init:
|
|
|
iounmap(adapter->io_addr);
|
|
|
kfree(adapter->mac_table);
|
|
|
err_ioremap:
|
|
|
+ disable_dev = !test_and_set_bit(__IXGBE_DISABLED, &adapter->state);
|
|
|
free_netdev(netdev);
|
|
|
err_alloc_etherdev:
|
|
|
pci_release_selected_regions(pdev,
|
|
|
pci_select_bars(pdev, IORESOURCE_MEM));
|
|
|
err_pci_reg:
|
|
|
err_dma:
|
|
|
- if (!adapter || !test_and_set_bit(__IXGBE_DISABLED, &adapter->state))
|
|
|
+ if (!adapter || disable_dev)
|
|
|
pci_disable_device(pdev);
|
|
|
return err;
|
|
|
}
|
|
@@ -8393,6 +8395,7 @@ static void ixgbe_remove(struct pci_dev *pdev)
|
|
|
{
|
|
|
struct ixgbe_adapter *adapter = pci_get_drvdata(pdev);
|
|
|
struct net_device *netdev = adapter->netdev;
|
|
|
+ bool disable_dev;
|
|
|
|
|
|
ixgbe_dbg_adapter_exit(adapter);
|
|
|
|
|
@@ -8442,11 +8445,12 @@ static void ixgbe_remove(struct pci_dev *pdev)
|
|
|
e_dev_info("complete\n");
|
|
|
|
|
|
kfree(adapter->mac_table);
|
|
|
+ disable_dev = !test_and_set_bit(__IXGBE_DISABLED, &adapter->state);
|
|
|
free_netdev(netdev);
|
|
|
|
|
|
pci_disable_pcie_error_reporting(pdev);
|
|
|
|
|
|
- if (!test_and_set_bit(__IXGBE_DISABLED, &adapter->state))
|
|
|
+ if (disable_dev)
|
|
|
pci_disable_device(pdev);
|
|
|
}
|
|
|
|