]> git.baikalelectronics.ru Git - kernel.git/commit
nfp: bpf: don't stop offload if replace failed
authorJakub Kicinski <jakub.kicinski@netronome.com>
Fri, 22 Jun 2018 18:56:56 +0000 (11:56 -0700)
committerDaniel Borkmann <daniel@iogearbox.net>
Mon, 25 Jun 2018 09:33:55 +0000 (11:33 +0200)
commit93ea4c232e2b7cd8b6fe08c45fbcb40809634785
tree477052299666d0e8e2f5063d17d7c80e445a50ea
parentdff8c988e5d1879c7a9f9a32c9cf808f0f4aaf94
nfp: bpf: don't stop offload if replace failed

Stopping offload completely if replace of program failed dates
back to days of transparent offload.  Back then we wanted to
silently fall back to the in-driver processing.  Today we mark
programs for offload when they are loaded into the kernel, so
the transparent offload is no longer a reality.

Flags check in the driver will only allow replace of a driver
program with another driver program or an offload program with
another offload program.

When driver program is replaced stopping offload is a no-op,
because driver program isn't offloaded.  When replacing
offloaded program if the offload fails the entire operation
will fail all the way back to user space and we should continue
using the old program.  IOW when replacing a driver program
stopping offload is unnecessary and when replacing offloaded
program - it's a bug, old program should continue to run.

In practice this bug would mean that if offload operation was to
fail (either due to FW communication error, kernel OOM or new
program being offloaded but for a different netdev) driver
would continue reporting that previous XDP program is offloaded
but in fact no program will be loaded in hardware.  The failure
is fairly unlikely (found by inspection, when working on the code)
but it's unpleasant.

Backport note: even though the bug was introduced in commit
f8810d4e0572 ("nfp: bpf: add support for XDP_FLAGS_HW_MODE"),
this fix depends on commit 1a967f01de37 ("net: xdp: don't allow
device-bound programs in driver mode"), so this fix is sufficient
only in v4.15 or newer.  Kernels v4.13.x and v4.14.x do need to
stop offload if it was transparent/opportunistic, i.e. if
XDP_FLAGS_HW_MODE was not set on running program.

Fixes: f8810d4e0572 ("nfp: bpf: add support for XDP_FLAGS_HW_MODE")
Signed-off-by: Jakub Kicinski <jakub.kicinski@netronome.com>
Reviewed-by: Quentin Monnet <quentin.monnet@netronome.com>
Acked-by: Song Liu <songliubraving@fb.com>
Signed-off-by: Daniel Borkmann <daniel@iogearbox.net>
drivers/net/ethernet/netronome/nfp/bpf/main.c