]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
net: ll_temac: Avoid ndo_start_xmit returning NETDEV_TX_BUSY
authorEsben Haabendal <esben@geanix.com>
Fri, 18 Jun 2021 10:52:38 +0000 (12:52 +0200)
committerSasha Levin <sashal@kernel.org>
Wed, 30 Jun 2021 12:49:38 +0000 (08:49 -0400)
[ Upstream commit f6396341194234e9b01cd7538bc2c6ac4501ab14 ]

As documented in Documentation/networking/driver.rst, the ndo_start_xmit
method must not return NETDEV_TX_BUSY under any normal circumstances, and
as recommended, we simply stop the tx queue in advance, when there is a
risk that the next xmit would cause a NETDEV_TX_BUSY return.

Signed-off-by: Esben Haabendal <esben@geanix.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/net/ethernet/xilinx/ll_temac_main.c

index ed6a88cf3281c0364c5352d93a5076b5451b2075..98a1c712b62a77aa2c14082239a907f2c6ead931 100644 (file)
@@ -735,6 +735,11 @@ temac_start_xmit(struct sk_buff *skb, struct net_device *ndev)
        /* Kick off the transfer */
        lp->dma_out(lp, TX_TAILDESC_PTR, tail_p); /* DMA start */
 
+       if (temac_check_tx_bd_space(lp, MAX_SKB_FRAGS + 1)) {
+               netdev_info(ndev, "%s -> netif_stop_queue\n", __func__);
+               netif_stop_queue(ndev);
+       }
+
        return NETDEV_TX_OK;
 }