All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH bpf] xsk: fix l2fwd for copy mode + busy poll combo
@ 2022-04-06 15:58 Maciej Fijalkowski
  2022-04-07 21:10 ` patchwork-bot+netdevbpf
  0 siblings, 1 reply; 2+ messages in thread
From: Maciej Fijalkowski @ 2022-04-06 15:58 UTC (permalink / raw)
  To: bpf, ast, daniel
  Cc: netdev, magnus.karlsson, bjorn, brouer, alexandr.lobakin,
	Maciej Fijalkowski

While checking AF_XDP copy mode combined with busy poll, strange
results were observed. rxdrop and txonly scenarios worked fine, but
l2fwd broke immediately.

After a deeper look, it turned out that for l2fwd, Tx side was exiting
early due to xsk_no_wakeup() returning true and in the end
xsk_generic_xmit() was never called. Note that AF_XDP Tx in copy mode is
syscall steered, so the current behavior is broken.

Txonly scenario only worked due to the fact that
sk_mark_napi_id_once_xdp() was never called - since Rx side is not in
the picture for this case and mentioned function is called in
xsk_rcv_check(), sk::sk_napi_id was never set, which in turn meant that
xsk_no_wakeup() was returning false (see the sk->sk_napi_id >=
MIN_NAPI_ID check in there).

To fix this, prefer busy poll in xsk_sendmsg() only when zero copy is
enabled on a given AF_XDP socket. By doing so, busy poll in copy mode
would not exit early on Tx side and eventually xsk_generic_xmit() will
be called.

Fixes: a0731952d9cd ("xsk: Add busy-poll support for {recv,send}msg()")
Signed-off-by: Maciej Fijalkowski <maciej.fijalkowski@intel.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 2c34caee0fd1..7d3a00cb24ec 100644
--- a/net/xdp/xsk.c
+++ b/net/xdp/xsk.c
@@ -639,7 +639,7 @@ static int __xsk_sendmsg(struct socket *sock, struct msghdr *m, size_t total_len
 	if (sk_can_busy_loop(sk))
 		sk_busy_loop(sk, 1); /* only support non-blocking sockets */
 
-	if (xsk_no_wakeup(sk))
+	if (xs->zc && xsk_no_wakeup(sk))
 		return 0;
 
 	pool = xs->pool;
-- 
2.27.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH bpf] xsk: fix l2fwd for copy mode + busy poll combo
  2022-04-06 15:58 [PATCH bpf] xsk: fix l2fwd for copy mode + busy poll combo Maciej Fijalkowski
@ 2022-04-07 21:10 ` patchwork-bot+netdevbpf
  0 siblings, 0 replies; 2+ messages in thread
From: patchwork-bot+netdevbpf @ 2022-04-07 21:10 UTC (permalink / raw)
  To: Maciej Fijalkowski
  Cc: bpf, ast, daniel, netdev, magnus.karlsson, bjorn, brouer,
	alexandr.lobakin

Hello:

This patch was applied to bpf/bpf.git (master)
by Daniel Borkmann <daniel@iogearbox.net>:

On Wed,  6 Apr 2022 17:58:04 +0200 you wrote:
> While checking AF_XDP copy mode combined with busy poll, strange
> results were observed. rxdrop and txonly scenarios worked fine, but
> l2fwd broke immediately.
> 
> After a deeper look, it turned out that for l2fwd, Tx side was exiting
> early due to xsk_no_wakeup() returning true and in the end
> xsk_generic_xmit() was never called. Note that AF_XDP Tx in copy mode is
> syscall steered, so the current behavior is broken.
> 
> [...]

Here is the summary with links:
  - [bpf] xsk: fix l2fwd for copy mode + busy poll combo
    https://git.kernel.org/bpf/bpf/c/8de8b71b787f

You are awesome, thank you!
-- 
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html



^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2022-04-07 21:10 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-04-06 15:58 [PATCH bpf] xsk: fix l2fwd for copy mode + busy poll combo Maciej Fijalkowski
2022-04-07 21:10 ` patchwork-bot+netdevbpf

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.