bnx2x: avoid TX timeout when stopping device
authorStanislaw Gruszka <sgruszka@redhat.com>
Tue, 18 May 2010 00:35:38 +0000 (17:35 -0700)
committerDavid S. Miller <davem@davemloft.net>
Tue, 18 May 2010 00:35:38 +0000 (17:35 -0700)
When stop device call netif_carrier_off() just after disabling TX queue to
avoid possibility of netdev watchdog warning and ->ndo_tx_timeout() invocation.

Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Acked-by: Eilon Greenstein <eilong@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/bnx2x_main.c

index 2bc35c7..57ff5b3 100644 (file)
@@ -8499,6 +8499,7 @@ static int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode)
 
        /* Disable HW interrupts, NAPI and Tx */
        bnx2x_netif_stop(bp, 1);
+       netif_carrier_off(bp->dev);
 
        del_timer_sync(&bp->timer);
        SHMEM_WR(bp, func_mb[BP_FUNC(bp)].drv_pulse_mb,
@@ -8524,8 +8525,6 @@ static int bnx2x_nic_unload(struct bnx2x *bp, int unload_mode)
 
        bp->state = BNX2X_STATE_CLOSED;
 
-       netif_carrier_off(bp->dev);
-
        /* The last driver must disable a "close the gate" if there is no
         * parity attention or "process kill" pending.
         */
@@ -13431,6 +13430,7 @@ static int bnx2x_eeh_nic_unload(struct bnx2x *bp)
        bp->rx_mode = BNX2X_RX_MODE_NONE;
 
        bnx2x_netif_stop(bp, 0);
+       netif_carrier_off(bp->dev);
 
        del_timer_sync(&bp->timer);
        bp->stats_state = STATS_STATE_DISABLED;
@@ -13457,8 +13457,6 @@ static int bnx2x_eeh_nic_unload(struct bnx2x *bp)
 
        bp->state = BNX2X_STATE_CLOSED;
 
-       netif_carrier_off(bp->dev);
-
        return 0;
 }