]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: stmmac: do not clear TBS enable bit on link up/down
authorEsben Haabendal <esben@geanix.com>
Fri, 26 Jan 2024 09:10:41 +0000 (10:10 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 23 Feb 2024 08:51:38 +0000 (09:51 +0100)
commit 4896bb7c0b31a0a3379b290ea7729900c59e0c69 upstream.

With the dma conf being reallocated on each call to stmmac_open(), any
information in there is lost, unless we specifically handle it.

The STMMAC_TBS_EN bit is set when adding an etf qdisc, and the etf qdisc
therefore would stop working when link was set down and then back up.

Fixes: ba39b344e924 ("net: ethernet: stmicro: stmmac: generate stmmac dma conf before open")
Cc: stable@vger.kernel.org
Signed-off-by: Esben Haabendal <esben@geanix.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/stmicro/stmmac/stmmac_main.c

index d094c3c1e2ee76f8fb1f3fcc8b6d5ce215dba6d0..2ad3a83ae7e2b9b585403c1de47b287bb0be5f19 100644 (file)
@@ -3869,6 +3869,9 @@ static int __stmmac_open(struct net_device *dev,
        priv->rx_copybreak = STMMAC_RX_COPYBREAK;
 
        buf_sz = dma_conf->dma_buf_sz;
+       for (int i = 0; i < MTL_MAX_TX_QUEUES; i++)
+               if (priv->dma_conf.tx_queue[i].tbs & STMMAC_TBS_EN)
+                       dma_conf->tx_queue[i].tbs = priv->dma_conf.tx_queue[i].tbs;
        memcpy(&priv->dma_conf, dma_conf, sizeof(*dma_conf));
 
        stmmac_reset_queues_param(priv);