aboutsummaryrefslogtreecommitdiff
path: root/drivers/net/ethernet/freescale
diff options
context:
space:
mode:
authorGravatar Wei Fang <wei.fang@nxp.com> 2023-07-21 16:35:59 +0800
committerGravatar Jakub Kicinski <kuba@kernel.org> 2023-07-24 16:45:29 -0700
commitbb7a0156365dffe2fcd63e2051145fbe4f8908b4 (patch)
treef4f270238001bea8ed578e2369fe8ea51c0283a2 /drivers/net/ethernet/freescale
parentipv6 addrconf: fix bug where deleting a mngtmpaddr can create a new temporary... (diff)
downloadlinux-bb7a0156365dffe2fcd63e2051145fbe4f8908b4.tar.gz
linux-bb7a0156365dffe2fcd63e2051145fbe4f8908b4.tar.bz2
linux-bb7a0156365dffe2fcd63e2051145fbe4f8908b4.zip
net: fec: avoid tx queue timeout when XDP is enabled
According to the implementation of XDP of FEC driver, the XDP path shares the transmit queues with the kernel network stack, so it is possible to lead to a tx timeout event when XDP uses the tx queue pretty much exclusively. And this event will cause the reset of the FEC hardware. To avoid timeout in this case, we use the txq_trans_cond_update() interface to update txq->trans_start to jiffies so that watchdog won't generate a transmit timeout warning. Fixes: 6d6b39f180b8 ("net: fec: add initial XDP support") Signed-off-by: Wei Fang <wei.fang@nxp.com> Link: https://lore.kernel.org/r/20230721083559.2857312-1-wei.fang@nxp.com Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Diffstat (limited to 'drivers/net/ethernet/freescale')
-rw-r--r--drivers/net/ethernet/freescale/fec_main.c2
1 files changed, 2 insertions, 0 deletions
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index ec9e4bdb0c06..073d61619336 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -3916,6 +3916,8 @@ static int fec_enet_xdp_xmit(struct net_device *dev,
__netif_tx_lock(nq, cpu);
+ /* Avoid tx timeout as XDP shares the queue with kernel stack */
+ txq_trans_cond_update(nq);
for (i = 0; i < num_frames; i++) {
if (fec_enet_txq_xmit_frame(fep, txq, frames[i]) < 0)
break;