Re: [RFC PATCH v2 08/10] selftests: conditionally enable XDP support in udpgso_bench_rx
From: Willem de Bruijn <willemdebruijn.kernel@gmail.com>
Date: 2018-10-22 04:25:29
On Fri, Oct 19, 2018 at 10:31 AM Paolo Abeni [off-list ref] wrote:
quoted hunk ↗ jump to hunk
XDP support will be used by a later patch to test the GRO path in a net namespace, leveraging the veth XDP implementation. To avoid breaking existing setup, XDP support is conditionally enabled and build only if llc is locally available. Signed-off-by: Paolo Abeni <pabeni@redhat.com> ---diff --git a/tools/testing/selftests/net/Makefile b/tools/testing/selftests/net/Makefile index 256d82d5fa87..176459b7c4d6 100644 --- a/tools/testing/selftests/net/Makefile +++ b/tools/testing/selftests/net/Makefile@@ -16,8 +16,77 @@ TEST_GEN_PROGS = reuseport_bpf reuseport_bpf_cpu reuseport_bpf_numa TEST_GEN_PROGS += reuseport_dualstack reuseaddr_conflict tls KSFT_KHDR_INSTALL := 1 + +# Allows pointing LLC/CLANG to a LLVM backend with bpf support, redefine on cmdline: +# make samples/bpf/ LLC=~/git/llvm/build/bin/llc CLANG=~/git/llvm/build/bin/clang +LLC ?= llc +CLANG ?= clang +LLVM_OBJCOPY ?= llvm-objcopy +BTF_PAHOLE ?= pahole +HAS_LLC := $(shell which $(LLC) 2>/dev/null) + +# conditional enable testes requiring llc +ifneq (, $(HAS_LLC)) +TEST_GEN_FILES += xdp_dummy.o +endif + include ../lib.mk +ifneq (, $(HAS_LLC)) + +# Detect that we're cross compiling and use the cross compiler +ifdef CROSS_COMPILE +CLANG_ARCH_ARGS = -target $(ARCH) +endif + +PROBE := $(shell $(LLC) -march=bpf -mcpu=probe -filetype=null /dev/null 2>&1) + +# Let newer LLVM versions transparently probe the kernel for availability +# of full BPF instruction set. +ifeq ($(PROBE),) + CPU ?= probe +else + CPU ?= generic +endif + +SRC_PATH := $(abspath ../../../..) +LIB_PATH := $(SRC_PATH)/tools/lib +XDP_CFLAGS := -D SUPPORT_XDP=1 -I$(LIB_PATH) +LIBBPF = $(LIB_PATH)/bpf/libbpf.a +BTF_LLC_PROBE := $(shell $(LLC) -march=bpf -mattr=help 2>&1 | grep dwarfris) +BTF_PAHOLE_PROBE := $(shell $(BTF_PAHOLE) --help 2>&1 | grep BTF) +BTF_OBJCOPY_PROBE := $(shell $(LLVM_OBJCOPY) --help 2>&1 | grep -i 'usage.*llvm') +CLANG_SYS_INCLUDES := $(shell $(CLANG) -v -E - </dev/null 2>&1 \ + | sed -n '/<...> search starts here:/,/End of search list./{ s| \(/.*\)|-idirafter \1|p }') +CLANG_FLAGS = -I. -I$(SRC_PATH)/include -I../bpf/ \ + $(CLANG_SYS_INCLUDES) -Wno-compare-distinct-pointer-types + +ifneq ($(and $(BTF_LLC_PROBE),$(BTF_PAHOLE_PROBE),$(BTF_OBJCOPY_PROBE)),) + CLANG_CFLAGS += -g + LLC_FLAGS += -mattr=dwarfris + DWARF2BTF = y +endif + +$(LIBBPF): FORCE +# Fix up variables inherited from Kbuild that tools/ build system won't like + $(MAKE) -C $(dir $@) RM='rm -rf' LDFLAGS= srctree=$(SRC_PATH) O= $(nodir $@) +
This is a lot of XDP specific code. Not for this patchset, per se, but would be nice if we can reuse the logic in selftests/bpf for all this.
quoted hunk ↗ jump to hunk
--- a/tools/testing/selftests/net/udpgso_bench_rx.c@@ -227,6 +234,13 @@ static void parse_opts(int argc, char **argv) cfg_verify = true; cfg_read_all = true; break; +#ifdef SUPPORT_XDP + case 'x': + cfg_xdp_iface = if_nametoindex(optarg); + if (!cfg_xdp_iface) + error(1, errno, "unknown interface %s", optarg); + break; +#endif
nit: needs to be added to getopt string in this patch.