net: fec: quiesce packet processing when taking link down in fec_enet_adjust_link()
authorRussell King <rmk+kernel@arm.linux.org.uk>
Tue, 8 Jul 2014 11:40:38 +0000 (12:40 +0100)
committerDavid S. Miller <davem@davemloft.net>
Wed, 9 Jul 2014 03:02:59 +0000 (20:02 -0700)
When the link goes down, the adjust_link method will be called, but
there is no synchronisation to ensure that we won't be processing some
last remaining packets via the NAPI handlers while performing a reset of
the device.

Add the necessary synchronisation to ensure that packet processing
is complete before we stop and reset the FEC.

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 124d3c5f80464fa40ca45b26fdf5e418a8168f02..0186fec1f7f9de1011b446b2b3ce43ecb284d451 100644 (file)
@@ -1530,7 +1530,11 @@ static void fec_enet_adjust_link(struct net_device *ndev)
                }
        } else {
                if (fep->link) {
+                       napi_disable(&fep->napi);
+                       netif_tx_lock_bh(ndev);
                        fec_stop(ndev);
+                       netif_tx_unlock_bh(ndev);
+                       napi_enable(&fep->napi);
                        fep->link = phy_dev->link;
                        status_change = 1;
                }