[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250329061548.1357925-1-wangliang74@huawei.com>
Date: Sat, 29 Mar 2025 14:15:48 +0800
From: Wang Liang <wangliang74@...wei.com>
To: <bjorn@...nel.org>, <magnus.karlsson@...el.com>,
<maciej.fijalkowski@...el.com>, <jonathan.lemon@...il.com>,
<davem@...emloft.net>, <edumazet@...gle.com>, <kuba@...nel.org>,
<pabeni@...hat.com>, <horms@...nel.org>, <ast@...nel.org>,
<daniel@...earbox.net>, <hawk@...nel.org>, <john.fastabend@...il.com>
CC: <yuehaibing@...wei.com>, <zhangchangzhong@...wei.com>,
<wangliang74@...wei.com>, <netdev@...r.kernel.org>, <bpf@...r.kernel.org>,
<linux-kernel@...r.kernel.org>
Subject: [PATCH net] xsk: correct tx_ring_empty_descs count statistics
The tx_ring_empty_descs count may be incorrect, when set the XDP_TX_RING
option but do not reserve tx ring. Because xsk_poll() try to wakeup the
driver by calling xsk_generic_xmit() for non-zero-copy mode. So the
tx_ring_empty_descs count increases once the xsk_poll()is called:
xsk_poll
xsk_generic_xmit
__xsk_generic_xmit
xskq_cons_peek_desc
xskq_cons_read_desc
q->queue_empty_descs++;
To avoid this count error, add check for tx descs before send msg in poll.
Fixes: df551058f7a3 ("xsk: Fix crash in poll when device does not support ndo_xsk_wakeup")
Signed-off-by: Wang Liang <wangliang74@...wei.com>
---
net/xdp/xsk.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/net/xdp/xsk.c b/net/xdp/xsk.c
index 89d2bef96469..fb01e6736677 100644
--- a/net/xdp/xsk.c
+++ b/net/xdp/xsk.c
@@ -989,7 +989,7 @@ static __poll_t xsk_poll(struct file *file, struct socket *sock,
if (pool->cached_need_wakeup) {
if (xs->zc)
xsk_wakeup(xs, pool->cached_need_wakeup);
- else if (xs->tx)
+ else if (xs->tx && xskq_has_descs(xs->tx))
/* Poll needs to drive Tx also in copy mode */
xsk_generic_xmit(sk);
}
--
2.34.1
Powered by blists - more mailing lists