Re: [PATCH v1] bpf: fix compilation of samples/bpf/

From: Alexei Starovoitov
Date: Sat Jul 07 2018 - 18:49:49 EST


On Sat, Jul 07, 2018 at 05:52:03PM +0300, Constantine Shulyupin wrote:
> Example of errors:
>
> samples/bpf/test_lru_dist.c:39:8: error: redefinition of âstruct list_headâ
> struct list_head {
> ^~~~~~~~~
> In file included from samples/bpf/test_lru_dist.c:9:0:
> ./tools/include/linux/types.h:69:8: note: originally defined here
>
> In file included from samples/bpf/sock_example.c:27:0:
> /usr/include/linux/ip.h:102:2: error: unknown type name â__sum16â
>
> samples/bpf/bpf_load.c: In function âload_and_attachâ:
> samples/bpf/bpf_load.c:90:15: error: âBPF_PROG_TYPE_RAW_TRACEPOINTâ undeclared (first use in this function); did you mean âBPF_PROG_TYPE_TRACEPOINTâ?
>
> samples/bpf/xdpsock_user.c:10:10: fatal error: linux/if_xdp.h: No such file or directory
>
> samples/bpf/task_fd_query_user.c: In function âtest_debug_fs_uprobeâ:
> samples/bpf/task_fd_query_user.c:270:31: error: âBPF_FD_TYPE_URETPROBEâ undeclared (first use in this function); did you mean âBPF_PROG_TYPE_KPROBEâ?
>
> samples/bpf/parse_varlen.c:111:8: error: redefinition of 'vlan_hdr'
> struct vlan_hdr {
> ^
> ./include/linux/if_vlan.h:38:8: note: previous definition is here
>
> Signed-off-by: Constantine Shulyupin <const@xxxxxxxxxxxxx>
> ---
> Makefile | 1 +
> samples/bpf/Makefile | 5 +++--
> samples/bpf/xdp_sample_pkts_user.c | 3 +++
> 3 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/Makefile b/Makefile
> index d15ac32afbaf..824006258319 100644
> --- a/Makefile
> +++ b/Makefile
> @@ -441,6 +441,7 @@ export KBUILD_AFLAGS AFLAGS_KERNEL AFLAGS_MODULE
> export KBUILD_AFLAGS_MODULE KBUILD_CFLAGS_MODULE KBUILD_LDFLAGS_MODULE
> export KBUILD_AFLAGS_KERNEL KBUILD_CFLAGS_KERNEL
> export KBUILD_ARFLAGS
> +export USERINCLUDE
>
> # When compiling out-of-tree modules, put MODVERDIR in the module
> # tree rather than in the kernel tree. The kernel tree might
> diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile
> index 9ea2f7b64869..991273c81459 100644
> --- a/samples/bpf/Makefile
> +++ b/samples/bpf/Makefile
> @@ -167,11 +167,12 @@ always += xdp_fwd_kern.o
> always += task_fd_query_kern.o
> always += xdp_sample_pkts_kern.o
>
> -HOSTCFLAGS += -I$(objtree)/usr/include
> +HOSTCFLAGS += -D__EXPORTED_HEADERS__ $(USERINCLUDE)

the goal of the patch is to avoid doing 'make headers_install' to build samples/bpf/ ?
The idea of the patch is interesting, but it breaks the build for me:
/w/net-next make samples/bpf/
make[1]: Entering directory `/data/users/ast/net-next/bld_x64'
Using .. as source for kernel
GEN ./Makefile
CALL ../scripts/checksyscalls.sh
DESCEND objtool
HOSTCC samples/bpf/test_lru_dist
In file included from ../include/uapi/linux/posix_types.h:5:0,
from ../include/uapi/linux/types.h:14,
from ../samples/bpf/test_lru_dist.c:9:
../include/uapi/linux/stddef.h:2:34: fatal error: linux/compiler_types.h: No such file or directory
#include <linux/compiler_types.h>
^
compilation terminated.

while I don't see any build issues without this patch in bpf tree.
Strangely current bpf-next tree fails with:
parse_varlen.c:111:8: error: redefinition of 'vlan_hdr'
but none of the other errors you mentioned.