diff options
Diffstat (limited to 'drivers/net/sfc')
-rw-r--r-- | drivers/net/sfc/efx.c | 13 |
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/net/sfc/efx.c b/drivers/net/sfc/efx.c index ce1c7d3cd12e..8f832bf1e4d2 100644 --- a/drivers/net/sfc/efx.c +++ b/drivers/net/sfc/efx.c | |||
@@ -2112,8 +2112,6 @@ static int __devinit efx_pci_probe(struct pci_dev *pci_dev, | |||
2112 | * we're in STATE_INIT. */ | 2112 | * we're in STATE_INIT. */ |
2113 | for (i = 0; i < 5; i++) { | 2113 | for (i = 0; i < 5; i++) { |
2114 | rc = efx_pci_probe_main(efx); | 2114 | rc = efx_pci_probe_main(efx); |
2115 | if (rc == 0) | ||
2116 | break; | ||
2117 | 2115 | ||
2118 | /* Serialise against efx_reset(). No more resets will be | 2116 | /* Serialise against efx_reset(). No more resets will be |
2119 | * scheduled since efx_stop_all() has been called, and we | 2117 | * scheduled since efx_stop_all() has been called, and we |
@@ -2121,6 +2119,17 @@ static int __devinit efx_pci_probe(struct pci_dev *pci_dev, | |||
2121 | * the rtnetlink or driverlink layers. */ | 2119 | * the rtnetlink or driverlink layers. */ |
2122 | cancel_work_sync(&efx->reset_work); | 2120 | cancel_work_sync(&efx->reset_work); |
2123 | 2121 | ||
2122 | if (rc == 0) { | ||
2123 | if (efx->reset_pending != RESET_TYPE_NONE) { | ||
2124 | /* If there was a scheduled reset during | ||
2125 | * probe, the NIC is probably hosed anyway */ | ||
2126 | efx_pci_remove_main(efx); | ||
2127 | rc = -EIO; | ||
2128 | } else { | ||
2129 | break; | ||
2130 | } | ||
2131 | } | ||
2132 | |||
2124 | /* Retry if a recoverably reset event has been scheduled */ | 2133 | /* Retry if a recoverably reset event has been scheduled */ |
2125 | if ((efx->reset_pending != RESET_TYPE_INVISIBLE) && | 2134 | if ((efx->reset_pending != RESET_TYPE_INVISIBLE) && |
2126 | (efx->reset_pending != RESET_TYPE_ALL)) | 2135 | (efx->reset_pending != RESET_TYPE_ALL)) |