summaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/arc
diff options
context:
space:
mode:
authorAlexander Kochetkov <al.kochet@gmail.com>2016-02-09 16:20:39 +0100
committerDavid S. Miller <davem@davemloft.net>2016-02-16 21:26:30 +0100
commit99f93a156a2aa9ac1e44f7cb1a197425e6d9879a (patch)
tree0203edb151bb461fc9f720007be517ab30b7a020 /drivers/net/ethernet/arc
parentnet: arc_emac: fix koops caused by sk_buff free (diff)
downloadlinux-99f93a156a2aa9ac1e44f7cb1a197425e6d9879a.tar.xz
linux-99f93a156a2aa9ac1e44f7cb1a197425e6d9879a.zip
net: arc_emac: reset txbd_curr and txbd_dirty pointers to zero
EMAC reset internal tx ring pointer to zero at statup. txbd_curr and txbd_dirty can be different from zero. That cause ethernet transfer hang (no packets transmitted). In order to reproduce, run on device: ifconfig eth0 down ifconfig eth0 up Signed-off-by: Alexander Kochetkov <al.kochet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/ethernet/arc')
-rw-r--r--drivers/net/ethernet/arc/emac_main.c3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/net/ethernet/arc/emac_main.c b/drivers/net/ethernet/arc/emac_main.c
index 63a63e31d59d..4f6e5be184df 100644
--- a/drivers/net/ethernet/arc/emac_main.c
+++ b/drivers/net/ethernet/arc/emac_main.c
@@ -447,6 +447,9 @@ static int arc_emac_open(struct net_device *ndev)
*last_rx_bd = (*last_rx_bd + 1) % RX_BD_NUM;
}
+ priv->txbd_curr = 0;
+ priv->txbd_dirty = 0;
+
/* Clean Tx BD's */
memset(priv->txbd, 0, TX_RING_SZ);