]> www.infradead.org Git - users/dwmw2/linux.git/commit
net: Optimize xdp_do_flush() with bpf_net_context infos.
authorSebastian Andrzej Siewior <bigeasy@linutronix.de>
Fri, 28 Jun 2024 10:18:55 +0000 (12:18 +0200)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 2 Jul 2024 13:26:57 +0000 (15:26 +0200)
commitd839a73179ae91c07f5f2f97ccb9c69b2b7c3306
tree78ca317c579749b037de74a2a509e97b4cfbac89
parent2896624be30b049601ec3ef9b08df184d0c70495
net: Optimize xdp_do_flush() with bpf_net_context infos.

Every NIC driver utilizing XDP should invoke xdp_do_flush() after
processing all packages. With the introduction of the bpf_net_context
logic the flush lists (for dev, CPU-map and xsk) are lazy initialized
only if used. However xdp_do_flush() tries to flush all three of them so
all three lists are always initialized and the likely empty lists are
"iterated".
Without the usage of XDP but with CONFIG_DEBUG_NET the lists are also
initialized due to xdp_do_check_flushed().

Jakub suggest to utilize the hints in bpf_net_context and avoid invoking
the flush function. This will also avoiding initializing the lists which
are otherwise unused.

Introduce bpf_net_ctx_get_all_used_flush_lists() to return the
individual list if not-empty. Use the logic in xdp_do_flush() and
xdp_do_check_flushed(). Remove the not needed .*_check_flush().

Suggested-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
Reviewed-by: Jakub Kicinski <kuba@kernel.org>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
include/linux/bpf.h
include/linux/filter.h
include/net/xdp_sock.h
kernel/bpf/cpumap.c
kernel/bpf/devmap.c
net/core/filter.c
net/xdp/xsk.c