Hi Arnaldo, On Fri, Feb 23, 2024 at 12:11 PM Arnaldo Carvalho de Melo <acme@xxxxxxxxxx> wrote: > > On Fri, Feb 23, 2024 at 04:50:47PM -0300, Arnaldo Carvalho de Melo wrote: > > On Thu, Feb 22, 2024 at 10:06:56AM +1100, Stephen Rothwell wrote: > > > Hi all, > > > > > > After merging the perf tree, today's linux-next build (native perf) > > > failed like this: > > > > > > util/bpf_skel/augmented_raw_syscalls.bpf.c:329:15: error: invalid application of 'sizeof' to an incomplete type 'struct timespec64' > > > __u32 size = sizeof(struct timespec64); > > > ^ ~~~~~~~~~~~~~~~~~~~ > > > util/bpf_skel/augmented_raw_syscalls.bpf.c:329:29: note: forward declaration of 'struct timespec64' > > > __u32 size = sizeof(struct timespec64); > > > ^ > > > > > > Caused by commit > > > > > > 29d16de26df1 ("perf augmented_raw_syscalls.bpf: Move 'struct timespec64' to vmlinux.h") > > > > > > This is a ppc64 le build. > > > > > > I have used the perf tree from next-20240221 for today. > > > > Ok, finally I managed to secure a ppc64 machine to test this and > > sometimes I reproduce just like you reported, but sometimes I can't do > > it, didn't manage to isolate what is that makes it fail sometimes, make > > -C tools/perf clean, nuking the O= target directory, etc, when I > > reproduce it: > > So I think I see the problem, I now left the build directory with a > previous build from torvalds/master, then switched to the > perf-tools-branch and tried to build from there, without first removing > the old build, it fails: > > CLANG /tmp/build/perf-tools-next/util/bpf_skel/.tmp/augmented_raw_syscalls.bpf.o > util/bpf_skel/augmented_raw_syscalls.bpf.c:329:15: error: invalid application of 'sizeof' to an incomplete type 'struct timespec64' > 329 | __u32 size = sizeof(struct timespec64); > | ^ ~~~~~~~~~~~~~~~~~~~ > util/bpf_skel/augmented_raw_syscalls.bpf.c:329:29: note: forward declaration of 'struct timespec64' > 329 | __u32 size = sizeof(struct timespec64); > | ^ > 1 error generated. > make[2]: *** [Makefile.perf:1161: /tmp/build/perf-tools-next/util/bpf_skel/.tmp/augmented_raw_syscalls.bpf.o] Error 1 > make[1]: *** [Makefile.perf:264: sub-make] Error 2 > > > Because it will use what was installed before in the build dir: > > [acme@ibm-p9z-16-lp5 perf-tools-next]$ ls -la /tmp/build/perf-tools-next/util/bpf_skel/vmlinux.h > -rw-r--r--. 1 acme acme 4319 Feb 23 14:59 /tmp/build/perf-tools-next/util/bpf_skel/vmlinux.h > [acme@ibm-p9z-16-lp5 perf-tools-next]$ > > And that one doesn't have 'struct timespec64': > > [acme@ibm-p9z-16-lp5 perf-tools-next]$ grep timespec64 /tmp/build/perf-tools-next/util/bpf_skel/vmlinux.h > [acme@ibm-p9z-16-lp5 perf-tools-next]$ > > If I remove that directory contents: > > [acme@ibm-p9z-16-lp5 perf-tools-next]$ rm -rf /tmp/build/perf-tools-next/ > [acme@ibm-p9z-16-lp5 perf-tools-next]$ mkdir /tmp/build/perf-tools-next/ > [acme@ibm-p9z-16-lp5 perf-tools-next]$ > > And then try to build again: > > make -k O=/tmp/build/perf-tools-next/ -C tools/perf install-bin > > It works. > > I reproduced the problem on x86_64, so, on this transition period, the > problem happens, probably we need to robustify the installation of > tools/perf/util/bpf_skel/vmlinux/vmlinux.h in the O= target directory, > but if you just make sure the build directory is clean before trying to > build it, this time, it should work, wdyt? Can we add a dependency to the minimal vmlinux.h? Thanks, Namhyung ---8<--- diff --git a/tools/perf/Makefile.perf b/tools/perf/Makefile.perf index 3cecd51b2397..33621114135e 100644 --- a/tools/perf/Makefile.perf +++ b/tools/perf/Makefile.perf @@ -1147,7 +1147,7 @@ ifeq ($(VMLINUX_H),) endif endif -$(SKEL_OUT)/vmlinux.h: $(VMLINUX_BTF) $(BPFTOOL) +$(SKEL_OUT)/vmlinux.h: $(VMLINUX_BTF) $(BPFTOOL) $(VMLINUX_H) ifeq ($(VMLINUX_H),) $(QUIET_GEN)$(BPFTOOL) btf dump file $< format c > $@ else