netxen:fix napi intr enable check
o netif_running() check for enabling interrupt at end of napi poll is not enough to cover firmwar recovery. Instead test __NX_DEV_UP bit. o Avoid re-entry into to netxen_nic_down() with __NX_DEV_UP bit check. Acked-by: Dhananjay Phadke <dhananjay.phadke@qlogic.com> Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
committed by
David S. Miller
parent
6f7714196b
commit
f2251f668e
@@ -1011,8 +1011,10 @@ __netxen_nic_down(struct netxen_adapter *adapter, struct net_device *netdev)
|
|||||||
if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC)
|
if (adapter->is_up != NETXEN_ADAPTER_UP_MAGIC)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
clear_bit(__NX_DEV_UP, &adapter->state);
|
if (!test_and_clear_bit(__NX_DEV_UP, &adapter->state))
|
||||||
|
return;
|
||||||
|
|
||||||
|
smp_mb();
|
||||||
spin_lock(&adapter->tx_clean_lock);
|
spin_lock(&adapter->tx_clean_lock);
|
||||||
netif_carrier_off(netdev);
|
netif_carrier_off(netdev);
|
||||||
netif_tx_disable(netdev);
|
netif_tx_disable(netdev);
|
||||||
@@ -2053,7 +2055,7 @@ static int netxen_nic_poll(struct napi_struct *napi, int budget)
|
|||||||
|
|
||||||
if ((work_done < budget) && tx_complete) {
|
if ((work_done < budget) && tx_complete) {
|
||||||
napi_complete(&sds_ring->napi);
|
napi_complete(&sds_ring->napi);
|
||||||
if (netif_running(adapter->netdev))
|
if (test_bit(__NX_DEV_UP, &adapter->state))
|
||||||
netxen_nic_enable_int(sds_ring);
|
netxen_nic_enable_int(sds_ring);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user