diff options
author | Peter Dunning <pdunning@solarflare.com> | 2017-02-17 18:50:43 +0300 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2017-02-17 23:29:40 +0300 |
commit | 9c568fd8844ec3986eb19b0b5d97536243d10d46 (patch) | |
tree | c5080f2edd3d4c029e5e38ede183e135ef81787a /drivers/net/ethernet/sfc/efx.h | |
parent | 105eac6c35a168b8b6d8e594830a1da5585b260d (diff) | |
download | linux-9c568fd8844ec3986eb19b0b5d97536243d10d46.tar.xz |
sfc: do not device_attach if a reset is pending
efx_start_all can return without initialising queues as a reset is pending.
This means that when netif_device_attach is called, the kernel can start
sending traffic without having an initialised TX queue to send to.
This patch avoids this by not calling netif_device_attach if there is a
pending reset.
Fixes: e283546c0465 ("sfc:On MCDI timeout, issue an FLR (and mark MCDI to fail-fast)")
Signed-off-by: Edward Cree <ecree@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/sfc/efx.h')
-rw-r--r-- | drivers/net/ethernet/sfc/efx.h | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/ethernet/sfc/efx.h b/drivers/net/ethernet/sfc/efx.h index 342ae16e1f2d..ee14662415c5 100644 --- a/drivers/net/ethernet/sfc/efx.h +++ b/drivers/net/ethernet/sfc/efx.h @@ -276,6 +276,12 @@ static inline void efx_device_detach_sync(struct efx_nic *efx) netif_tx_unlock_bh(dev); } +static inline void efx_device_attach_if_not_resetting(struct efx_nic *efx) +{ + if ((efx->state != STATE_DISABLED) && !efx->reset_pending) + netif_device_attach(efx->net_dev); +} + static inline bool efx_rwsem_assert_write_locked(struct rw_semaphore *sem) { if (WARN_ON(down_read_trylock(sem))) { |