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? Ian, ideas? - Arnaldo