net: fec: use netif_tx_disable() rather than netif_stop_queue()
authorRussell King <rmk+kernel@arm.linux.org.uk>
Mon, 7 Jul 2014 23:22:49 +0000 (00:22 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 8 Jul 2014 04:21:21 +0000 (21:21 -0700)
We use netif_stop_queue() in several places where we want to ensure that
the start_xmit function is not running.  netif_stop_queue() is not
sufficient to achieve that - it merely sets a flag to indicate that the
transmit queue(s) should not be run.

netif_tx_disable() gives this guarantee, since it takes the transmit
queue lock while marking the queue stopped.  This will wait for the
transmit function to complete before returning.

Acked-by: Fugang Duan <B38611@freescale.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/freescale/fec_main.c

index 4e695b7420304717a528ef51dba6d6b3a567a5b6..cb9ced7386075a81150345532e5a66e7e4666cbe 100644 (file)
@@ -834,7 +834,7 @@ fec_restart(struct net_device *ndev, int duplex)
        if (netif_running(ndev)) {
                netif_device_detach(ndev);
                napi_disable(&fep->napi);
-               netif_stop_queue(ndev);
+               netif_tx_disable(ndev);
                netif_tx_lock_bh(ndev);
        }
 
@@ -2181,7 +2181,7 @@ fec_enet_close(struct net_device *ndev)
        /* Don't know what to do yet. */
        napi_disable(&fep->napi);
        fep->opened = 0;
-       netif_stop_queue(ndev);
+       netif_tx_disable(ndev);
        fec_stop(ndev);
 
        if (fep->phy_dev) {