On Thu, Dec 16, 2021 at 12:22 PM Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx> wrote: > > On 12/16/21 1:03 PM, Andrii Nakryiko wrote: > > On Thu, Dec 16, 2021 at 11:51 AM Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx> wrote: > >> > >> On 12/16/21 12:30 PM, Andrii Nakryiko wrote: > >>> On Thu, Dec 16, 2021 at 6:42 AM Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx> wrote: > >>>> > >>>> On 12/15/21 9:04 PM, Andrii Nakryiko wrote: > >>>>> On Tue, Dec 14, 2021 at 12:27 PM Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx> wrote: > >>>>>> > >>>>>> On 12/11/21 6:53 PM, Alexei Starovoitov wrote: > >>>>>>> On Fri, Dec 10, 2021 at 9:34 AM Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx> wrote: > >>>>>>>> > >>>>>>>> ARRAY_SIZE is defined in multiple test files. Remove the definitions > >>>>>>>> and include header file for the define instead. > >>>>>>>> > >>>>>>>> Remove ARRAY_SIZE define and add include bpf_util.h to bring in the > >>>>>>>> define. > >>>>>>>> > >>>>>>>> Signed-off-by: Shuah Khan <skhan@xxxxxxxxxxxxxxxxxxx> > >>>>>>>> --- > >>>>>>>> tools/testing/selftests/bpf/progs/netif_receive_skb.c | 5 +---- > >>>>>>>> tools/testing/selftests/bpf/progs/profiler.inc.h | 5 +---- > >>>>>>>> tools/testing/selftests/bpf/progs/test_sysctl_loop1.c | 5 +---- > >>>>>>>> tools/testing/selftests/bpf/progs/test_sysctl_loop2.c | 4 +--- > >>>>>>>> tools/testing/selftests/bpf/progs/test_sysctl_prog.c | 5 +---- > >>>>>>>> 5 files changed, 5 insertions(+), 19 deletions(-) > >>>>>>>> > >>>>>>>> diff --git a/tools/testing/selftests/bpf/progs/netif_receive_skb.c b/tools/testing/selftests/bpf/progs/netif_receive_skb.c > >>>>>>>> index 1d8918dfbd3f..7a5ebd330689 100644 > >>>>>>>> --- a/tools/testing/selftests/bpf/progs/netif_receive_skb.c > >>>>>>>> +++ b/tools/testing/selftests/bpf/progs/netif_receive_skb.c > >>>>>>>> @@ -5,6 +5,7 @@ > >>>>>>>> #include <bpf/bpf_helpers.h> > >>>>>>>> #include <bpf/bpf_tracing.h> > >>>>>>>> #include <bpf/bpf_core_read.h> > >>>>>>>> +#include <bpf/bpf_util.h> > >>>>>>> > >>>>>>> It doesn't look like you've built it. > >>>>>>> > >>>>>>> progs/test_sysctl_prog.c:11:10: fatal error: 'bpf/bpf_util.h' file not found > >>>>>>> #include <bpf/bpf_util.h> > >>>>>>> ^~~~~~~~~~~~~~~~ > >>>>>>> CLNG-BPF [test_maps] socket_cookie_prog.o > >>>>>>> progs/test_sysctl_loop2.c:11:10: fatal error: 'bpf/bpf_util.h' file not found > >>>>>>> #include <bpf/bpf_util.h> > >>>>>>> ^~~~~~~~~~~~~~~~ > >>>>>>> 1 error generated. > >>>>>>> In file included from progs/profiler2.c:6: > >>>>>>> progs/profiler.inc.h:7:10: fatal error: 'bpf/bpf_util.h' file not found > >>>>>>> #include <bpf/bpf_util.h> > >>>>>>> ^~~~~~~~~~~~~~~~ > >>>>>>> > >>>>>> > >>>>>> Sorry about that. I built it - I think something is wrong in my env. Build > >>>>>> fails complaining about not finding vmlinux - I overlooked that the failure > >>>>>> happened before it got to progs. > >>>>>> > >>>>>> Error: failed to load BTF from .../vmlinux: No such file or directory > >>>>> > >>>>> Please make sure that you build vmlinux before you build selftests, > >>>>> BPF selftests use vmlinux to generate vmlinux.h with all kernel types > >>>>> (among other things). So please also make sure that all the setting in > >>>>> selftests/bpf/config were used in your Kconfig. > >>>>> > >>>>>> > >>>> > >>>> The problem in my env. is that I don't have CONFIG_DEBUG_INFO_BTF in > >>>> my config and then don't have the dwarves and llvm-strip on my system. > >>>> Pains of upgrading. > >>>> > >>>> I am all set now. On the other hand the vmlinux.h is a mess. It has > >>>> no guards for defines and including stdio.h and this generated > >>>> vmlinux.h causes all sorts of problems. > >>> > >>> It does have > >>> > >>> #ifndef __VMLINUX_H__ > >>> #define __VMLINUX_H__ > >>> > >>> Are we talking about the same vmlinux.h here? > >>> > >> > >> Yes we are. The guard it has works when vmlinux.h is included > >> twice. It defines a lot of common defines which are the problem. > >> Unless you add guards around each one of them, including vmlinux.h > >> is problematic if you also include other standard includes. > >> > >> You can try to include bpf_util.h for example from one of the > >> test in progs to see the problem. > > > > bpf_util.h is a user-space header, it's not going to work from the BPF > > program side. If you look at any of progs/*.c (all of which are BPF > > program-side source code), not a single one is including bpf_util.h. > > > > Whether bpf_util.h can be included from progs isn't the main thing here. > progs/test*.c including vmlinux.h (most of them seem to) can,'t include > any standard .h files. > > "including vmlinux.h is problematic if a test also had to include other > standard includes." > > This makes this header file restrictive and works in one case and one > case only when no other standard headers aren't included. > It does work with other BPF-side headers that libbpf provides: bpf_tracing.h, bpf_core_read.h, etc. Yes, it doesn't work with other kernel or non-kernel headers. We are well aware of this limitation and are currently trying to convince the Clang community to let us fix that with a new attribute for Clang. But I'm not sure what we are discussing at this point. I think we established that bpf_util.h is a user-space header and can't be used from the BPF side. > thanks, > -- Shuah