On Fri, Feb 23, 2024 at 12:34:40PM -0800, Namhyung Kim wrote: > 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? That fixes it, I'll submit a formal patch - Arnaldo > 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