aboutsummaryrefslogtreecommitdiffstats
path: root/net/bpf/test_run.c
diff options
context:
space:
mode:
authorMaciej Fijalkowski <maciej.fijalkowski@intel.com>2022-04-06 17:58:04 +0200
committerDaniel Borkmann <daniel@iogearbox.net>2022-04-07 23:09:08 +0200
commit8de8b71b787f38983d414d2dba169a3bfefa668a (patch)
tree3cbe894a066543b30f97213283d8402616d3b23c /net/bpf/test_run.c
parentdrivers: net: slip: fix NPD bug in sl_tx_timeout() (diff)
downloadlinux-dev-8de8b71b787f38983d414d2dba169a3bfefa668a.tar.xz
linux-dev-8de8b71b787f38983d414d2dba169a3bfefa668a.zip
xsk: Fix l2fwd for copy mode + busy poll combo
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> Signed-off-by: Daniel Borkmann <daniel@iogearbox.net> Link: https://lore.kernel.org/bpf/20220406155804.434493-1-maciej.fijalkowski@intel.com
Diffstat (limited to 'net/bpf/test_run.c')
0 files changed, 0 insertions, 0 deletions