linux/drivers/net/ethernet/netronome/nfp
Daniel Borkmann 366cbf2f46 bpf, xdp: drop rcu_read_lock from bpf_prog_run_xdp and move to caller
After 326fe02d1e ("net/mlx4_en: protect ring->xdp_prog with rcu_read_lock"),
the rcu_read_lock() in bpf_prog_run_xdp() is superfluous, since callers
need to hold rcu_read_lock() already to make sure BPF program doesn't
get released in the background.

Thus, drop it from bpf_prog_run_xdp(), as it can otherwise be misleading.
Still keeping the bpf_prog_run_xdp() is useful as it allows for grepping
in XDP supported drivers and to keep the typecheck on the context intact.
For mlx4, this means we don't have a double rcu_read_lock() anymore. nfp can
just make use of bpf_prog_run_xdp(), too. For qede, just move rcu_read_lock()
out of the helper. When the driver gets atomic replace support, this will
move to call-sites eventually.

mlx5 needs actual fixing as it has the same issue as described already in
326fe02d1e ("net/mlx4_en: protect ring->xdp_prog with rcu_read_lock"),
that is, we're under RCU bh at this time, BPF programs are released via
call_rcu(), and call_rcu() != call_rcu_bh(), so we need to properly mark
read side as programs can get xchg()'ed in mlx5e_xdp_set() without queue
reset.

Fixes: 86994156c7 ("net/mlx5e: XDP fast RX drop bpf programs support")
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
Acked-by: Alexei Starovoitov <ast@kernel.org>
Acked-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2016-12-02 11:06:24 -05:00
..
Makefile nfp: bpf: add hardware bpf offload 2016-09-21 19:50:03 -04:00
nfp_asm.h nfp: add BPF to NFP code translator 2016-09-21 19:50:02 -04:00
nfp_bpf_jit.c nfp: add support for offload of XDP programs 2016-11-04 14:56:16 -04:00
nfp_bpf_verifier.c nfp: add support for offload of XDP programs 2016-11-04 14:56:16 -04:00
nfp_bpf.h nfp: add support for offload of XDP programs 2016-11-04 14:56:16 -04:00
nfp_net_common.c bpf, xdp: drop rcu_read_lock from bpf_prog_run_xdp and move to caller 2016-12-02 11:06:24 -05:00
nfp_net_ctrl.h nfp: remove support for nfp3200 2016-11-01 11:04:58 -04:00
nfp_net_debugfs.c nfp: add XDP support in the driver 2016-11-04 14:56:16 -04:00
nfp_net_ethtool.c nfp: add XDP support in the driver 2016-11-04 14:56:16 -04:00
nfp_net_offload.c nfp: add support for offload of XDP programs 2016-11-04 14:56:16 -04:00
nfp_net.h nfp: add support for offload of XDP programs 2016-11-04 14:56:16 -04:00
nfp_netvf_main.c nfp: remove support for nfp3200 2016-11-01 11:04:58 -04:00