@@ -940,7 +940,7 @@ static int e1000_init_hw_struct(struct e1000_adapter *adapter,
940
940
static int e1000_probe (struct pci_dev * pdev , const struct pci_device_id * ent )
941
941
{
942
942
struct net_device * netdev ;
943
- struct e1000_adapter * adapter ;
943
+ struct e1000_adapter * adapter = NULL ;
944
944
struct e1000_hw * hw ;
945
945
946
946
static int cards_found = 0 ;
@@ -950,6 +950,7 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
950
950
u16 tmp = 0 ;
951
951
u16 eeprom_apme_mask = E1000_EEPROM_APME ;
952
952
int bars , need_ioport ;
953
+ bool disable_dev = false;
953
954
954
955
/* do not allocate ioport bars when not needed */
955
956
need_ioport = e1000_is_need_ioport (pdev );
@@ -1250,11 +1251,13 @@ static int e1000_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
1250
1251
iounmap (hw -> ce4100_gbe_mdio_base_virt );
1251
1252
iounmap (hw -> hw_addr );
1252
1253
err_ioremap :
1254
+ disable_dev = !test_and_set_bit (__E1000_DISABLED , & adapter -> flags );
1253
1255
free_netdev (netdev );
1254
1256
err_alloc_etherdev :
1255
1257
pci_release_selected_regions (pdev , bars );
1256
1258
err_pci_reg :
1257
- pci_disable_device (pdev );
1259
+ if (!adapter || disable_dev )
1260
+ pci_disable_device (pdev );
1258
1261
return err ;
1259
1262
}
1260
1263
@@ -1272,6 +1275,7 @@ static void e1000_remove(struct pci_dev *pdev)
1272
1275
struct net_device * netdev = pci_get_drvdata (pdev );
1273
1276
struct e1000_adapter * adapter = netdev_priv (netdev );
1274
1277
struct e1000_hw * hw = & adapter -> hw ;
1278
+ bool disable_dev ;
1275
1279
1276
1280
e1000_down_and_stop (adapter );
1277
1281
e1000_release_manageability (adapter );
@@ -1290,9 +1294,11 @@ static void e1000_remove(struct pci_dev *pdev)
1290
1294
iounmap (hw -> flash_address );
1291
1295
pci_release_selected_regions (pdev , adapter -> bars );
1292
1296
1297
+ disable_dev = !test_and_set_bit (__E1000_DISABLED , & adapter -> flags );
1293
1298
free_netdev (netdev );
1294
1299
1295
- pci_disable_device (pdev );
1300
+ if (disable_dev )
1301
+ pci_disable_device (pdev );
1296
1302
}
1297
1303
1298
1304
/**
@@ -5137,7 +5143,8 @@ static int __e1000_shutdown(struct pci_dev *pdev, bool *enable_wake)
5137
5143
if (netif_running (netdev ))
5138
5144
e1000_free_irq (adapter );
5139
5145
5140
- pci_disable_device (pdev );
5146
+ if (!test_and_set_bit (__E1000_DISABLED , & adapter -> flags ))
5147
+ pci_disable_device (pdev );
5141
5148
5142
5149
return 0 ;
5143
5150
}
@@ -5181,6 +5188,10 @@ static int e1000_resume(struct pci_dev *pdev)
5181
5188
pr_err ("Cannot enable PCI device from suspend\n" );
5182
5189
return err ;
5183
5190
}
5191
+
5192
+ /* flush memory to make sure state is correct */
5193
+ smp_mb__before_atomic ();
5194
+ clear_bit (__E1000_DISABLED , & adapter -> flags );
5184
5195
pci_set_master (pdev );
5185
5196
5186
5197
pci_enable_wake (pdev , PCI_D3hot , 0 );
@@ -5255,7 +5266,9 @@ static pci_ers_result_t e1000_io_error_detected(struct pci_dev *pdev,
5255
5266
5256
5267
if (netif_running (netdev ))
5257
5268
e1000_down (adapter );
5258
- pci_disable_device (pdev );
5269
+
5270
+ if (!test_and_set_bit (__E1000_DISABLED , & adapter -> flags ))
5271
+ pci_disable_device (pdev );
5259
5272
5260
5273
/* Request a slot slot reset. */
5261
5274
return PCI_ERS_RESULT_NEED_RESET ;
@@ -5283,6 +5296,10 @@ static pci_ers_result_t e1000_io_slot_reset(struct pci_dev *pdev)
5283
5296
pr_err ("Cannot re-enable PCI device after reset.\n" );
5284
5297
return PCI_ERS_RESULT_DISCONNECT ;
5285
5298
}
5299
+
5300
+ /* flush memory to make sure state is correct */
5301
+ smp_mb__before_atomic ();
5302
+ clear_bit (__E1000_DISABLED , & adapter -> flags );
5286
5303
pci_set_master (pdev );
5287
5304
5288
5305
pci_enable_wake (pdev , PCI_D3hot , 0 );
0 commit comments