* [BUG] perf tools: Build failure in v6.16-rc1 @ 2025-06-10 18:34 Namhyung Kim 2025-06-11 9:25 ` Sebastian Andrzej Siewior 0 siblings, 1 reply; 8+ messages in thread From: Namhyung Kim @ 2025-06-10 18:34 UTC (permalink / raw) To: linux-kernel, linux-perf-users; +Cc: acme, Sebastian Andrzej Siewior Hello, I've updated the perf-tools-next to v6.16-rc1 and found a build error like below on alpine linux 3.18. In file included from bench/futex.c:6: /usr/include/sys/prctl.h:88:8: error: redefinition of 'struct prctl_mm_map' 88 | struct prctl_mm_map { | ^~~~~~~~~~~~ In file included from bench/futex.c:5: /linux/tools/include/uapi/linux/prctl.h:134:8: note: originally defined here 134 | struct prctl_mm_map { | ^~~~~~~~~~~~ make[4]: *** [/linux/tools/build/Makefile.build:86: /build/bench/futex.o] Error 1 git bisect says it's the first commit introduced the failure. commit 60035a3981a7f9d965df81a48a07b94e52ccd54f Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Date: Wed Apr 16 18:29:19 2025 +0200 tools/perf: Allow to select the number of hash buckets Add the -b/ --buckets argument to specify the number of hash buckets for the private futex hash. This is directly passed to prctl(PR_FUTEX_HASH, PR_FUTEX_HASH_SET_SLOTS, buckets, immutable) and must return without an error if specified. The `immutable' is 0 by default and can be set to 1 via the -I/ --immutable argument. The size of the private hash is verified with PR_FUTEX_HASH_GET_SLOTS. If PR_FUTEX_HASH_GET_SLOTS failed then it is assumed that an older kernel was used without the support and that the global hash is used. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Link: https://lore.kernel.org/r/20250416162921.513656-20-bigeasy@linutronix.de Thanks, Namhyung ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [BUG] perf tools: Build failure in v6.16-rc1 2025-06-10 18:34 [BUG] perf tools: Build failure in v6.16-rc1 Namhyung Kim @ 2025-06-11 9:25 ` Sebastian Andrzej Siewior 2025-06-11 13:14 ` Arnaldo Carvalho de Melo 0 siblings, 1 reply; 8+ messages in thread From: Sebastian Andrzej Siewior @ 2025-06-11 9:25 UTC (permalink / raw) To: Namhyung Kim; +Cc: linux-kernel, linux-perf-users, acme On 2025-06-10 11:34:44 [-0700], Namhyung Kim wrote: > Hello, Hi, > I've updated the perf-tools-next to v6.16-rc1 and found a build error > like below on alpine linux 3.18. > > In file included from bench/futex.c:6: > /usr/include/sys/prctl.h:88:8: error: redefinition of 'struct prctl_mm_map' > 88 | struct prctl_mm_map { > | ^~~~~~~~~~~~ > In file included from bench/futex.c:5: > /linux/tools/include/uapi/linux/prctl.h:134:8: note: originally defined here > 134 | struct prctl_mm_map { > | ^~~~~~~~~~~~ > make[4]: *** [/linux/tools/build/Makefile.build:86: /build/bench/futex.o] Error 1 > > git bisect says it's the first commit introduced the failure. Hmm. So your /usr/include/sys/prctl.h and /linux/tools/include/uapi/linux/prctl.h both provide struct prctl_mm_map but their include guard must be different. My /usr/include/sys/prctl.h is provided by glibc and contains the prctl() declaration. It includes also linux/prctl.h. The tools/include/uapi/linux/prctl.h is the same as /usr/include/linux/prctl.h. The /usr/include/sys/prctl.h on alpine linux is different. This is probably coming from musl. It contains the PR_* definition and the prctl() declaration. So it clashes here because now the one struct is available twice. The man page for prctl(2) says: | #include <linux/prctl.h> /* Definition of PR_* constants */ | #include <sys/prctl.h> so musl doesn't follow this. To align with the other builds, I guess the following help: diff --git a/tools/perf/bench/futex.c b/tools/perf/bench/futex.c index 26382e4d8d4ce..540261f299b1d 100644 --- a/tools/perf/bench/futex.c +++ b/tools/perf/bench/futex.c @@ -2,7 +2,6 @@ #include <err.h> #include <stdio.h> #include <stdlib.h> -#include <linux/prctl.h> #include <sys/prctl.h> #include "futex.h" Sebastian ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [BUG] perf tools: Build failure in v6.16-rc1 2025-06-11 9:25 ` Sebastian Andrzej Siewior @ 2025-06-11 13:14 ` Arnaldo Carvalho de Melo 2025-06-11 14:55 ` Arnaldo Carvalho de Melo 0 siblings, 1 reply; 8+ messages in thread From: Arnaldo Carvalho de Melo @ 2025-06-11 13:14 UTC (permalink / raw) To: Sebastian Andrzej Siewior; +Cc: Namhyung Kim, linux-kernel, linux-perf-users On Wed, Jun 11, 2025 at 11:25:42AM +0200, Sebastian Andrzej Siewior wrote: > On 2025-06-10 11:34:44 [-0700], Namhyung Kim wrote: > > Hello, > Hi, > > > I've updated the perf-tools-next to v6.16-rc1 and found a build error > > like below on alpine linux 3.18. > > > > In file included from bench/futex.c:6: > > /usr/include/sys/prctl.h:88:8: error: redefinition of 'struct prctl_mm_map' > > 88 | struct prctl_mm_map { > > | ^~~~~~~~~~~~ > > In file included from bench/futex.c:5: > > /linux/tools/include/uapi/linux/prctl.h:134:8: note: originally defined here > > 134 | struct prctl_mm_map { > > | ^~~~~~~~~~~~ > > make[4]: *** [/linux/tools/build/Makefile.build:86: /build/bench/futex.o] Error 1 > > > > git bisect says it's the first commit introduced the failure. > > Hmm. So your /usr/include/sys/prctl.h and > /linux/tools/include/uapi/linux/prctl.h both provide struct > prctl_mm_map but their include guard must be different. > > My /usr/include/sys/prctl.h is provided by glibc and contains the > prctl() declaration. It includes also linux/prctl.h. > The tools/include/uapi/linux/prctl.h is the same as > /usr/include/linux/prctl.h. > > The /usr/include/sys/prctl.h on alpine linux is different. This is > probably coming from musl. It contains the PR_* definition and the > prctl() declaration. So it clashes here because now the one struct is > available twice. > > The man page for prctl(2) says: > | #include <linux/prctl.h> /* Definition of PR_* constants */ > | #include <sys/prctl.h> > > so musl doesn't follow this. > > To align with the other builds, I guess the following help: So I noticed this as well in perf-tools/perf-tools, I'm trying with your patch applied, lets see... - Arnaldo > diff --git a/tools/perf/bench/futex.c b/tools/perf/bench/futex.c > index 26382e4d8d4ce..540261f299b1d 100644 > --- a/tools/perf/bench/futex.c > +++ b/tools/perf/bench/futex.c > @@ -2,7 +2,6 @@ > #include <err.h> > #include <stdio.h> > #include <stdlib.h> > -#include <linux/prctl.h> > #include <sys/prctl.h> > > #include "futex.h" > > Sebastian ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [BUG] perf tools: Build failure in v6.16-rc1 2025-06-11 13:14 ` Arnaldo Carvalho de Melo @ 2025-06-11 14:55 ` Arnaldo Carvalho de Melo 2025-06-11 15:06 ` Sebastian Andrzej Siewior 0 siblings, 1 reply; 8+ messages in thread From: Arnaldo Carvalho de Melo @ 2025-06-11 14:55 UTC (permalink / raw) To: Sebastian Andrzej Siewior; +Cc: Namhyung Kim, linux-kernel, linux-perf-users On Wed, Jun 11, 2025 at 10:14:32AM -0300, Arnaldo Carvalho de Melo wrote: > On Wed, Jun 11, 2025 at 11:25:42AM +0200, Sebastian Andrzej Siewior wrote: > > On 2025-06-10 11:34:44 [-0700], Namhyung Kim wrote: > > > Hello, > > Hi, > > > > > I've updated the perf-tools-next to v6.16-rc1 and found a build error > > > like below on alpine linux 3.18. > > > > > > In file included from bench/futex.c:6: > > > /usr/include/sys/prctl.h:88:8: error: redefinition of 'struct prctl_mm_map' > > > 88 | struct prctl_mm_map { > > > | ^~~~~~~~~~~~ > > > In file included from bench/futex.c:5: > > > /linux/tools/include/uapi/linux/prctl.h:134:8: note: originally defined here > > > 134 | struct prctl_mm_map { > > > | ^~~~~~~~~~~~ > > > make[4]: *** [/linux/tools/build/Makefile.build:86: /build/bench/futex.o] Error 1 > > > > > > git bisect says it's the first commit introduced the failure. > > > > Hmm. So your /usr/include/sys/prctl.h and > > /linux/tools/include/uapi/linux/prctl.h both provide struct > > prctl_mm_map but their include guard must be different. > > > > My /usr/include/sys/prctl.h is provided by glibc and contains the > > prctl() declaration. It includes also linux/prctl.h. > > The tools/include/uapi/linux/prctl.h is the same as > > /usr/include/linux/prctl.h. > > > > The /usr/include/sys/prctl.h on alpine linux is different. This is > > probably coming from musl. It contains the PR_* definition and the > > prctl() declaration. So it clashes here because now the one struct is > > available twice. > > > > The man page for prctl(2) says: > > | #include <linux/prctl.h> /* Definition of PR_* constants */ > > | #include <sys/prctl.h> > > > > so musl doesn't follow this. > > > > To align with the other builds, I guess the following help: > > So I noticed this as well in perf-tools/perf-tools, I'm trying with your > patch applied, lets see... Can I keep this as below? With it: toolsbuilder@five:~$ time dm from alpine:3.16 5 130.36 alpine:3.16 : Ok gcc (Alpine 11.2.1_git20220219) 11.2.1 20220219 , Alpine clang version 13.0.1 flex 2.6.4 6 100.65 alpine:3.17 : Ok gcc (Alpine 12.2.1_git20220924-r4) 12.2.1 20220924 , Alpine clang version 15.0.7 flex 2.6.4 7 90.44 alpine:3.18 : Ok gcc (Alpine 12.2.1_git20220924-r10) 12.2.1 20220924 , Alpine clang version 16.0.6 flex 2.6.4 8 106.18 alpine:3.19 : Ok gcc (Alpine 13.2.1_git20231014) 13.2.1 20231014 , Alpine clang version 17.0.5 flex 2.6.4 9 108.16 alpine:3.20 : Ok gcc (Alpine 13.2.1_git20240309) 13.2.1 20240309 , Alpine clang version 17.0.6 flex 2.6.4 10 111.19 alpine:3.22 : Ok gcc (Alpine 14.2.0) 14.2.0 , Alpine clang version 20.1.6 flex 2.6.4 11 109.28 alpine:edge : Ok gcc (Alpine 14.2.0) 14.2.0 , Alpine clang version 19.1.4 flex 2.6.4 12 92.62 amazonlinux:2023 : Ok gcc (GCC) 11.5.0 20240719 (Red Hat 11.5.0-5) , clang version 15.0.7 (AWS 15.0.7-3.amzn2023.0.4) flex 2.6.4 13 98.43 amazonlinux:devel : Ok gcc (GCC) 11.3.1 20221121 (Red Hat 11.3.1-4) , clang version 15.0.6 (Amazon Linux 15.0.6-3.amzn2023.0.2) flex 2.6.4 14 17.24 archlinux:base : FAIL gcc version 14.2.1 20240805 (GCC) <command-line>: error: "_FORTIFY_SOURCE" redefined [-Werror] <command-line>: note: this is the location of the previous definition cc1: all warnings being treated as errors error: command '/usr/sbin/gcc' failed with exit code 1 15 97.65 centos:stream : Ok gcc (GCC) 8.5.0 20210514 (Red Hat 8.5.0-21) , clang version 17.0.6 (Red Hat 17.0.6-1.module_el8+767+9fa966b8) flex 2.6.1 The archlinux one is unrelated. More are building now. - Arnaldo commit 8386dc356158fc50c55831c96b1248e01d112ebc Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Date: Wed Jun 11 11:25:42 2025 +0200 perf bench futex: Fix prctl include in musl libc Namhyung Kim reported: I've updated the perf-tools-next to v6.16-rc1 and found a build error like below on alpine linux 3.18. In file included from bench/futex.c:6: /usr/include/sys/prctl.h:88:8: error: redefinition of 'struct prctl_mm_map' 88 | struct prctl_mm_map { | ^~~~~~~~~~~~ In file included from bench/futex.c:5: /linux/tools/include/uapi/linux/prctl.h:134:8: note: originally defined here 134 | struct prctl_mm_map { | ^~~~~~~~~~~~ make[4]: *** [/linux/tools/build/Makefile.build:86: /build/bench/futex.o] Error 1 git bisect says it's the first commit introduced the failure. So your /usr/include/sys/prctl.h and /linux/tools/include/uapi/linux/prctl.h both provide struct prctl_mm_map but their include guard must be different. My /usr/include/sys/prctl.h is provided by glibc and contains the prctl() declaration. It includes also linux/prctl.h. The tools/include/uapi/linux/prctl.h is the same as /usr/include/linux/prctl.h. The /usr/include/sys/prctl.h on alpine linux is different. This is probably coming from musl. It contains the PR_* definition and the prctl() declaration. So it clashes here because now the one struct is available twice. The man page for prctl(2) says: | #include <linux/prctl.h> /* Definition of PR_* constants */ | #include <sys/prctl.h> so musl doesn't follow this. So align with the other builds. Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Reported-by: Namhyung Kim <namhyung@kernel.org> Link: https://lore.kernel.org/r/20250611092542.F4ooE2FL@linutronix.de [ Remove one more in tools/perf/bench/futex-hash.c and conditionally define PR_FUTEX_HASH and friends ] Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> diff --git a/tools/perf/bench/futex-hash.c b/tools/perf/bench/futex-hash.c index fdf133c9520f73a4..d2d6d7f3ea331c84 100644 --- a/tools/perf/bench/futex-hash.c +++ b/tools/perf/bench/futex-hash.c @@ -18,7 +18,6 @@ #include <stdlib.h> #include <linux/compiler.h> #include <linux/kernel.h> -#include <linux/prctl.h> #include <linux/zalloc.h> #include <sys/time.h> #include <sys/mman.h> diff --git a/tools/perf/bench/futex.c b/tools/perf/bench/futex.c index 26382e4d8d4ce2ff..4c4fee107e5912d5 100644 --- a/tools/perf/bench/futex.c +++ b/tools/perf/bench/futex.c @@ -2,11 +2,18 @@ #include <err.h> #include <stdio.h> #include <stdlib.h> -#include <linux/prctl.h> #include <sys/prctl.h> #include "futex.h" +#ifndef PR_FUTEX_HASH +#define PR_FUTEX_HASH 78 +# define PR_FUTEX_HASH_SET_SLOTS 1 +# define FH_FLAG_IMMUTABLE (1ULL << 0) +# define PR_FUTEX_HASH_GET_SLOTS 2 +# define PR_FUTEX_HASH_GET_IMMUTABLE 3 +#endif // PR_FUTEX_HASH + void futex_set_nbuckets_param(struct bench_futex_parameters *params) { unsigned long flags; ^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [BUG] perf tools: Build failure in v6.16-rc1 2025-06-11 14:55 ` Arnaldo Carvalho de Melo @ 2025-06-11 15:06 ` Sebastian Andrzej Siewior 2025-06-11 19:01 ` Arnaldo Carvalho de Melo 0 siblings, 1 reply; 8+ messages in thread From: Sebastian Andrzej Siewior @ 2025-06-11 15:06 UTC (permalink / raw) To: Arnaldo Carvalho de Melo; +Cc: Namhyung Kim, linux-kernel, linux-perf-users On 2025-06-11 11:55:23 [-0300], Arnaldo Carvalho de Melo wrote: > commit 8386dc356158fc50c55831c96b1248e01d112ebc > Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de> > Date: Wed Jun 11 11:25:42 2025 +0200 > > perf bench futex: Fix prctl include in musl libc > > Namhyung Kim reported: > > I've updated the perf-tools-next to v6.16-rc1 and found a build error > like below on alpine linux 3.18. > > In file included from bench/futex.c:6: > /usr/include/sys/prctl.h:88:8: error: redefinition of 'struct prctl_mm_map' > 88 | struct prctl_mm_map { > | ^~~~~~~~~~~~ > In file included from bench/futex.c:5: > /linux/tools/include/uapi/linux/prctl.h:134:8: note: originally defined here > 134 | struct prctl_mm_map { > | ^~~~~~~~~~~~ > make[4]: *** [/linux/tools/build/Makefile.build:86: /build/bench/futex.o] Error 1 > > git bisect says it's the first commit introduced the failure. > > So your /usr/include/sys/prctl.h and > /linux/tools/include/uapi/linux/prctl.h both provide struct prctl_mm_map > but their include guard must be different. > > My /usr/include/sys/prctl.h is provided by glibc and contains the > prctl() declaration. It includes also linux/prctl.h. The > tools/include/uapi/linux/prctl.h is the same as > /usr/include/linux/prctl.h. > > The /usr/include/sys/prctl.h on alpine linux is different. This is > probably coming from musl. It contains the PR_* definition and the > prctl() declaration. So it clashes here because now the one struct is > available twice. > > The man page for prctl(2) says: > > | #include <linux/prctl.h> /* Definition of PR_* constants */ > | #include <sys/prctl.h> > > so musl doesn't follow this. > > So align with the other builds. > > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> > Reported-by: Namhyung Kim <namhyung@kernel.org> > Link: https://lore.kernel.org/r/20250611092542.F4ooE2FL@linutronix.de s/Link/Closes/ > [ Remove one more in tools/perf/bench/futex-hash.c and conditionally define PR_FUTEX_HASH and friends ] > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> > > diff --git a/tools/perf/bench/futex-hash.c b/tools/perf/bench/futex-hash.c > index fdf133c9520f73a4..d2d6d7f3ea331c84 100644 > --- a/tools/perf/bench/futex-hash.c > +++ b/tools/perf/bench/futex-hash.c > @@ -18,7 +18,6 @@ > #include <stdlib.h> > #include <linux/compiler.h> > #include <linux/kernel.h> > -#include <linux/prctl.h> > #include <linux/zalloc.h> > #include <sys/time.h> > #include <sys/mman.h> > diff --git a/tools/perf/bench/futex.c b/tools/perf/bench/futex.c > index 26382e4d8d4ce2ff..4c4fee107e5912d5 100644 > --- a/tools/perf/bench/futex.c > +++ b/tools/perf/bench/futex.c > @@ -2,11 +2,18 @@ > #include <err.h> > #include <stdio.h> > #include <stdlib.h> > -#include <linux/prctl.h> > #include <sys/prctl.h> > This is what I had locally and was waiting for confirmation. > #include "futex.h" > > +#ifndef PR_FUTEX_HASH > +#define PR_FUTEX_HASH 78 > +# define PR_FUTEX_HASH_SET_SLOTS 1 > +# define FH_FLAG_IMMUTABLE (1ULL << 0) > +# define PR_FUTEX_HASH_GET_SLOTS 2 > +# define PR_FUTEX_HASH_GET_IMMUTABLE 3 > +#endif // PR_FUTEX_HASH Is this needed? Aren't these defines coming from that local copy? > void futex_set_nbuckets_param(struct bench_futex_parameters *params) > { > unsigned long flags; Sebastian ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [BUG] perf tools: Build failure in v6.16-rc1 2025-06-11 15:06 ` Sebastian Andrzej Siewior @ 2025-06-11 19:01 ` Arnaldo Carvalho de Melo 2025-06-11 21:50 ` Namhyung Kim 2025-06-12 6:25 ` Sebastian Andrzej Siewior 0 siblings, 2 replies; 8+ messages in thread From: Arnaldo Carvalho de Melo @ 2025-06-11 19:01 UTC (permalink / raw) To: Sebastian Andrzej Siewior; +Cc: Namhyung Kim, linux-kernel, linux-perf-users On Wed, Jun 11, 2025 at 05:06:15PM +0200, Sebastian Andrzej Siewior wrote: > On 2025-06-11 11:55:23 [-0300], Arnaldo Carvalho de Melo wrote: > > commit 8386dc356158fc50c55831c96b1248e01d112ebc > > Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de> > > Date: Wed Jun 11 11:25:42 2025 +0200 > > > > perf bench futex: Fix prctl include in musl libc > > > > Namhyung Kim reported: > > > > I've updated the perf-tools-next to v6.16-rc1 and found a build error > > like below on alpine linux 3.18. > > > > In file included from bench/futex.c:6: > > /usr/include/sys/prctl.h:88:8: error: redefinition of 'struct prctl_mm_map' > > 88 | struct prctl_mm_map { > > | ^~~~~~~~~~~~ > > In file included from bench/futex.c:5: > > /linux/tools/include/uapi/linux/prctl.h:134:8: note: originally defined here > > 134 | struct prctl_mm_map { > > | ^~~~~~~~~~~~ > > make[4]: *** [/linux/tools/build/Makefile.build:86: /build/bench/futex.o] Error 1 > > > > git bisect says it's the first commit introduced the failure. > > > > So your /usr/include/sys/prctl.h and > > /linux/tools/include/uapi/linux/prctl.h both provide struct prctl_mm_map > > but their include guard must be different. > > > > My /usr/include/sys/prctl.h is provided by glibc and contains the > > prctl() declaration. It includes also linux/prctl.h. The > > tools/include/uapi/linux/prctl.h is the same as > > /usr/include/linux/prctl.h. > > > > The /usr/include/sys/prctl.h on alpine linux is different. This is > > probably coming from musl. It contains the PR_* definition and the > > prctl() declaration. So it clashes here because now the one struct is > > available twice. > > > > The man page for prctl(2) says: > > > > | #include <linux/prctl.h> /* Definition of PR_* constants */ > > | #include <sys/prctl.h> > > > > so musl doesn't follow this. > > > > So align with the other builds. > > > > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> > > Reported-by: Namhyung Kim <namhyung@kernel.org> > > Link: https://lore.kernel.org/r/20250611092542.F4ooE2FL@linutronix.de > s/Link/Closes/ ok > > [ Remove one more in tools/perf/bench/futex-hash.c and conditionally define PR_FUTEX_HASH and friends ] > > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> > > > > diff --git a/tools/perf/bench/futex-hash.c b/tools/perf/bench/futex-hash.c > > index fdf133c9520f73a4..d2d6d7f3ea331c84 100644 > > --- a/tools/perf/bench/futex-hash.c > > +++ b/tools/perf/bench/futex-hash.c > > @@ -18,7 +18,6 @@ > > #include <stdlib.h> > > #include <linux/compiler.h> > > #include <linux/kernel.h> > > -#include <linux/prctl.h> > > #include <linux/zalloc.h> > > #include <sys/time.h> > > #include <sys/mman.h> > > diff --git a/tools/perf/bench/futex.c b/tools/perf/bench/futex.c > > index 26382e4d8d4ce2ff..4c4fee107e5912d5 100644 > > --- a/tools/perf/bench/futex.c > > +++ b/tools/perf/bench/futex.c > > @@ -2,11 +2,18 @@ > > #include <err.h> > > #include <stdio.h> > > #include <stdlib.h> > > -#include <linux/prctl.h> > > #include <sys/prctl.h> > > > This is what I had locally and was waiting for confirmation. > > > #include "futex.h" > > > > +#ifndef PR_FUTEX_HASH > > +#define PR_FUTEX_HASH 78 > > +# define PR_FUTEX_HASH_SET_SLOTS 1 > > +# define FH_FLAG_IMMUTABLE (1ULL << 0) > > +# define PR_FUTEX_HASH_GET_SLOTS 2 > > +# define PR_FUTEX_HASH_GET_IMMUTABLE 3 > > +#endif // PR_FUTEX_HASH > > Is this needed? Aren't these defines coming from that local copy? So, these are, as you say, in the copied linux/prctl.h, but in musl libc we have: /tmp/perf-6.16.0-rc1 $ grep 'struct prctl_mm_map {' /usr/include/linux/prctl.h struct prctl_mm_map { /tmp/perf-6.16.0-rc1 $ grep 'struct prctl_mm_map {' /usr/include/sys/prctl.h struct prctl_mm_map { /tmp/perf-6.16.0-rc1 $ And sys/prctl.h doesn't include linux/prctl.h, if we do it, we get multiple definitions for 'struct prctl_mm_map'. While in fedora (probably in all the others, haven't checked, but no failure on them from my last container set build tests): ⬢ [acme@toolbx perf-tools]$ grep 'struct prctl_mm_map {' /usr/include/linux/prctl.h struct prctl_mm_map { ⬢ [acme@toolbx perf-tools]$ grep 'struct prctl_mm_map {' /usr/include/sys/prctl.h ⬢ [acme@toolbx perf-tools]$ furthermore fedora's sys/prctl.h includes linux/prctl.h, while musl libc doesn't. I thought this would be something fixed in newer alpine versions, but no: toolsbuilder@five:~$ grep FAIL dm.log.old/summary 5 19.53 alpine:3.16 : FAIL gcc version 11.2.1 20220219 (Alpine 11.2.1_git20220219) 6 20.83 alpine:3.17 : FAIL gcc version 12.2.1 20220924 (Alpine 12.2.1_git20220924-r4) 7 13.94 alpine:3.18 : FAIL gcc version 12.2.1 20220924 (Alpine 12.2.1_git20220924-r10) 8 16.60 alpine:3.19 : FAIL gcc version 13.2.1 20231014 (Alpine 13.2.1_git20231014) 9 15.72 alpine:3.20 : FAIL gcc version 13.2.1 20240309 (Alpine 13.2.1_git20240309) 10 16.38 alpine:3.22 : FAIL gcc version 14.2.0 (Alpine 14.2.0) 11 15.09 alpine:edge : FAIL gcc version 14.2.0 (Alpine 14.2.0) toolsbuilder@five:~$ So the easiest way out of this seems to be not to explicitely include linux/prctl.h and define the new stuff conditionally, as I did, right? - Arnaldo > > void futex_set_nbuckets_param(struct bench_futex_parameters *params) > > { > > unsigned long flags; > > Sebastian ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [BUG] perf tools: Build failure in v6.16-rc1 2025-06-11 19:01 ` Arnaldo Carvalho de Melo @ 2025-06-11 21:50 ` Namhyung Kim 2025-06-12 6:25 ` Sebastian Andrzej Siewior 1 sibling, 0 replies; 8+ messages in thread From: Namhyung Kim @ 2025-06-11 21:50 UTC (permalink / raw) To: Arnaldo Carvalho de Melo Cc: Sebastian Andrzej Siewior, linux-kernel, linux-perf-users On Wed, Jun 11, 2025 at 04:01:00PM -0300, Arnaldo Carvalho de Melo wrote: > On Wed, Jun 11, 2025 at 05:06:15PM +0200, Sebastian Andrzej Siewior wrote: > > On 2025-06-11 11:55:23 [-0300], Arnaldo Carvalho de Melo wrote: > > > commit 8386dc356158fc50c55831c96b1248e01d112ebc > > > Author: Sebastian Andrzej Siewior <bigeasy@linutronix.de> > > > Date: Wed Jun 11 11:25:42 2025 +0200 > > > > > > perf bench futex: Fix prctl include in musl libc > > > > > > Namhyung Kim reported: > > > > > > I've updated the perf-tools-next to v6.16-rc1 and found a build error > > > like below on alpine linux 3.18. > > > > > > In file included from bench/futex.c:6: > > > /usr/include/sys/prctl.h:88:8: error: redefinition of 'struct prctl_mm_map' > > > 88 | struct prctl_mm_map { > > > | ^~~~~~~~~~~~ > > > In file included from bench/futex.c:5: > > > /linux/tools/include/uapi/linux/prctl.h:134:8: note: originally defined here > > > 134 | struct prctl_mm_map { > > > | ^~~~~~~~~~~~ > > > make[4]: *** [/linux/tools/build/Makefile.build:86: /build/bench/futex.o] Error 1 > > > > > > git bisect says it's the first commit introduced the failure. > > > > > > So your /usr/include/sys/prctl.h and > > > /linux/tools/include/uapi/linux/prctl.h both provide struct prctl_mm_map > > > but their include guard must be different. > > > > > > My /usr/include/sys/prctl.h is provided by glibc and contains the > > > prctl() declaration. It includes also linux/prctl.h. The > > > tools/include/uapi/linux/prctl.h is the same as > > > /usr/include/linux/prctl.h. > > > > > > The /usr/include/sys/prctl.h on alpine linux is different. This is > > > probably coming from musl. It contains the PR_* definition and the > > > prctl() declaration. So it clashes here because now the one struct is > > > available twice. > > > > > > The man page for prctl(2) says: > > > > > > | #include <linux/prctl.h> /* Definition of PR_* constants */ > > > | #include <sys/prctl.h> > > > > > > so musl doesn't follow this. > > > > > > So align with the other builds. > > > > > > Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de> > > > Reported-by: Namhyung Kim <namhyung@kernel.org> > > > Link: https://lore.kernel.org/r/20250611092542.F4ooE2FL@linutronix.de > > > s/Link/Closes/ > > ok > > > > [ Remove one more in tools/perf/bench/futex-hash.c and conditionally define PR_FUTEX_HASH and friends ] > > > Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> > > > > > > diff --git a/tools/perf/bench/futex-hash.c b/tools/perf/bench/futex-hash.c > > > index fdf133c9520f73a4..d2d6d7f3ea331c84 100644 > > > --- a/tools/perf/bench/futex-hash.c > > > +++ b/tools/perf/bench/futex-hash.c > > > @@ -18,7 +18,6 @@ > > > #include <stdlib.h> > > > #include <linux/compiler.h> > > > #include <linux/kernel.h> > > > -#include <linux/prctl.h> > > > #include <linux/zalloc.h> > > > #include <sys/time.h> > > > #include <sys/mman.h> > > > diff --git a/tools/perf/bench/futex.c b/tools/perf/bench/futex.c > > > index 26382e4d8d4ce2ff..4c4fee107e5912d5 100644 > > > --- a/tools/perf/bench/futex.c > > > +++ b/tools/perf/bench/futex.c > > > @@ -2,11 +2,18 @@ > > > #include <err.h> > > > #include <stdio.h> > > > #include <stdlib.h> > > > -#include <linux/prctl.h> > > > #include <sys/prctl.h> > > > > > This is what I had locally and was waiting for confirmation. > > > > > #include "futex.h" > > > > > > +#ifndef PR_FUTEX_HASH > > > +#define PR_FUTEX_HASH 78 > > > +# define PR_FUTEX_HASH_SET_SLOTS 1 > > > +# define FH_FLAG_IMMUTABLE (1ULL << 0) > > > +# define PR_FUTEX_HASH_GET_SLOTS 2 > > > +# define PR_FUTEX_HASH_GET_IMMUTABLE 3 > > > +#endif // PR_FUTEX_HASH > > > > Is this needed? Aren't these defines coming from that local copy? > > So, these are, as you say, in the copied linux/prctl.h, but in musl libc > we have: > > /tmp/perf-6.16.0-rc1 $ grep 'struct prctl_mm_map {' /usr/include/linux/prctl.h > struct prctl_mm_map { > /tmp/perf-6.16.0-rc1 $ grep 'struct prctl_mm_map {' /usr/include/sys/prctl.h > struct prctl_mm_map { > /tmp/perf-6.16.0-rc1 $ > > And sys/prctl.h doesn't include linux/prctl.h, if we do it, we get > multiple definitions for 'struct prctl_mm_map'. > > While in fedora (probably in all the others, haven't checked, but no > failure on them from my last container set build tests): > > ⬢ [acme@toolbx perf-tools]$ grep 'struct prctl_mm_map {' /usr/include/linux/prctl.h > struct prctl_mm_map { > ⬢ [acme@toolbx perf-tools]$ grep 'struct prctl_mm_map {' /usr/include/sys/prctl.h > ⬢ [acme@toolbx perf-tools]$ > > furthermore fedora's sys/prctl.h includes linux/prctl.h, while musl libc > doesn't. > > I thought this would be something fixed in newer alpine versions, but > no: > > toolsbuilder@five:~$ grep FAIL dm.log.old/summary > 5 19.53 alpine:3.16 : FAIL gcc version 11.2.1 20220219 (Alpine 11.2.1_git20220219) > 6 20.83 alpine:3.17 : FAIL gcc version 12.2.1 20220924 (Alpine 12.2.1_git20220924-r4) > 7 13.94 alpine:3.18 : FAIL gcc version 12.2.1 20220924 (Alpine 12.2.1_git20220924-r10) > 8 16.60 alpine:3.19 : FAIL gcc version 13.2.1 20231014 (Alpine 13.2.1_git20231014) > 9 15.72 alpine:3.20 : FAIL gcc version 13.2.1 20240309 (Alpine 13.2.1_git20240309) > 10 16.38 alpine:3.22 : FAIL gcc version 14.2.0 (Alpine 14.2.0) > 11 15.09 alpine:edge : FAIL gcc version 14.2.0 (Alpine 14.2.0) > toolsbuilder@five:~$ > > So the easiest way out of this seems to be not to explicitely include > linux/prctl.h and define the new stuff conditionally, as I did, right? Yep, it fixes my build too. Without the defines, I see bench/futex.c: In function 'futex_set_nbuckets_param': bench/futex.c:25:45: error: 'FH_FLAG_IMMUTABLE' undeclared (first use in this function) 25 | flags = params->buckets_immutable ? FH_FLAG_IMMUTABLE : 0; | ^~~~~~~~~~~~~~~~~ bench/futex.c:25:45: note: each undeclared identifier is reported only once for each function it appears in bench/futex.c:26:21: error: 'PR_FUTEX_HASH' undeclared (first use in this function) 26 | ret = prctl(PR_FUTEX_HASH, PR_FUTEX_HASH_SET_SLOTS, params->nbuckets, flags); | ^~~~~~~~~~~~~ CC /build/ui/browsers/annotate-data.o bench/futex.c:26:36: error: 'PR_FUTEX_HASH_SET_SLOTS' undeclared (first use in this function) 26 | ret = prctl(PR_FUTEX_HASH, PR_FUTEX_HASH_SET_SLOTS, params->nbuckets, flags); | ^~~~~~~~~~~~~~~~~~~~~~~ bench/futex.c: In function 'futex_print_nbuckets': bench/futex.c:39:21: error: 'PR_FUTEX_HASH' undeclared (first use in this function) 39 | ret = prctl(PR_FUTEX_HASH, PR_FUTEX_HASH_GET_SLOTS); | ^~~~~~~~~~~~~ bench/futex.c:39:36: error: 'PR_FUTEX_HASH_GET_SLOTS' undeclared (first use in this function) 39 | ret = prctl(PR_FUTEX_HASH, PR_FUTEX_HASH_GET_SLOTS); | ^~~~~~~~~~~~~~~~~~~~~~~ bench/futex.c:53:52: error: 'PR_FUTEX_HASH_GET_IMMUTABLE' undeclared (first use in this function) 53 | ret = prctl(PR_FUTEX_HASH, PR_FUTEX_HASH_GET_IMMUTABLE); | ^~~~~~~~~~~~~~~~~~~~~~~~~~~ make[4]: *** [/linux/tools/build/Makefile.build:86: /build/bench/futex.o] Error 1 Tested-by: Namhyung Kim <namhyung@kernel.org> Thanks, Namhyung > > - Arnaldo > > > > void futex_set_nbuckets_param(struct bench_futex_parameters *params) > > > { > > > unsigned long flags; > > > > Sebastian ^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [BUG] perf tools: Build failure in v6.16-rc1 2025-06-11 19:01 ` Arnaldo Carvalho de Melo 2025-06-11 21:50 ` Namhyung Kim @ 2025-06-12 6:25 ` Sebastian Andrzej Siewior 1 sibling, 0 replies; 8+ messages in thread From: Sebastian Andrzej Siewior @ 2025-06-12 6:25 UTC (permalink / raw) To: Arnaldo Carvalho de Melo; +Cc: Namhyung Kim, linux-kernel, linux-perf-users On 2025-06-11 16:01:00 [-0300], Arnaldo Carvalho de Melo wrote: > > Is this needed? Aren't these defines coming from that local copy? > > So, these are, as you say, in the copied linux/prctl.h, but in musl libc > we have: right, I briefly forgot about musl. All good. … > I thought this would be something fixed in newer alpine versions, but > no: > > toolsbuilder@five:~$ grep FAIL dm.log.old/summary > 5 19.53 alpine:3.16 : FAIL gcc version 11.2.1 20220219 (Alpine 11.2.1_git20220219) > 6 20.83 alpine:3.17 : FAIL gcc version 12.2.1 20220924 (Alpine 12.2.1_git20220924-r4) > 7 13.94 alpine:3.18 : FAIL gcc version 12.2.1 20220924 (Alpine 12.2.1_git20220924-r10) > 8 16.60 alpine:3.19 : FAIL gcc version 13.2.1 20231014 (Alpine 13.2.1_git20231014) > 9 15.72 alpine:3.20 : FAIL gcc version 13.2.1 20240309 (Alpine 13.2.1_git20240309) > 10 16.38 alpine:3.22 : FAIL gcc version 14.2.0 (Alpine 14.2.0) > 11 15.09 alpine:edge : FAIL gcc version 14.2.0 (Alpine 14.2.0) > toolsbuilder@five:~$ > > So the easiest way out of this seems to be not to explicitely include > linux/prctl.h and define the new stuff conditionally, as I did, right? Let me drop an email to alpine and check with them. > - Arnaldo Sebastian ^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2025-06-12 6:25 UTC | newest] Thread overview: 8+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2025-06-10 18:34 [BUG] perf tools: Build failure in v6.16-rc1 Namhyung Kim 2025-06-11 9:25 ` Sebastian Andrzej Siewior 2025-06-11 13:14 ` Arnaldo Carvalho de Melo 2025-06-11 14:55 ` Arnaldo Carvalho de Melo 2025-06-11 15:06 ` Sebastian Andrzej Siewior 2025-06-11 19:01 ` Arnaldo Carvalho de Melo 2025-06-11 21:50 ` Namhyung Kim 2025-06-12 6:25 ` Sebastian Andrzej Siewior
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).