stmmac: reset last TSO segment size after device open
authorLars Persson <lars.persson@axis.com>
Fri, 1 Dec 2017 10:12:44 +0000 (11:12 +0100)
committerDavid S. Miller <davem@davemloft.net>
Sun, 3 Dec 2017 14:47:42 +0000 (09:47 -0500)
The mss variable tracks the last max segment size sent to the TSO
engine. We do not update the hardware as long as we receive skb:s with
the same value in gso_size.

During a network device down/up cycle (mapped to stmmac_release() and
stmmac_open() callbacks) we issue a reset to the hardware and it
forgets the setting for mss. However we did not zero out our mss
variable so the next transmission of a gso packet happens with an
undefined hardware setting.

This triggers a hang in the TSO engine and eventuelly the netdev
watchdog will bark.

Fixes: f748be531d70 ("stmmac: support new GMAC4")
Signed-off-by: Lars Persson <larper@axis.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

index f63c2ddced3c9a1e90f4425b28be95d202379a71..d7250539d0bd0c61c92fc9460c9e1197bb57ac8f 100644 (file)
@@ -2588,6 +2588,7 @@ static int stmmac_open(struct net_device *dev)
 
        priv->dma_buf_sz = STMMAC_ALIGN(buf_sz);
        priv->rx_copybreak = STMMAC_RX_COPYBREAK;
+       priv->mss = 0;
 
        ret = alloc_dma_desc_resources(priv);
        if (ret < 0) {