* [PATCH] perf bench futex: Define SYS_futex on 32-bit arches with 64-bit time_t
@ 2026-09-02 9:32 Nylon Chen
2026-09-03 5:04 ` Ian Rogers
0 siblings, 1 reply; 2+ messages in thread
From: Nylon Chen @ 2026-09-02 9:32 UTC (permalink / raw)
To: Namhyung Kim, Arnaldo Carvalho de Melo
Cc: Ian Rogers, Jiri Olsa, Adrian Hunter, James Clark, Mark Rutland,
Alexander Shishkin, Peter Zijlstra, Ingo Molnar, Thomas Gleixner,
André Almeida, Davidlohr Bueso, Palmer Dabbelt,
Alexandre Ghiti, linux-perf-users, linux-riscv, linux-kernel,
Nylon Chen
The kernel does not provide sys_futex() on 32-bit architectures that lack
a 32-bit time representation, such as riscv32. Consequently glibc does not
define SYS_futex there, only SYS_futex_time64, and perf bench's futex
benchmarks fail to build:
bench/futex.h: In function 'futex_syscall':
bench/futex.h:77:18: error: 'SYS_futex' undeclared (first use in this function)
Define SYS_futex as SYS_futex_time64 when only the latter is available.
The guard and its comment are taken verbatim from
tools/testing/selftests/futex/include/futextest.h, where they were added by
commit 04850819c65c ("selftests/futex: Define SYS_futex on 32-bit
architectures with 64-bit time_t"), keeping the two futex userspace headers
in sync.
No timespec conversion helper is needed on top of this. glibc lays out
struct timespec on 32-bit architectures with 64-bit time_t as
{ int64 tv_sec; int32 tv_nsec; 32-bit pad }, which is compatible with
struct __kernel_timespec, and every futex_wait()/futex_lock_pi()/
futex_wait_requeue_pi() call site in perf bench passes a NULL timeout
anyway, so no timespec ever crosses the syscall boundary here.
Note that an earlier and more ambitious attempt at this was
commit c1ff12dac465 ("perf bench futex: Add support for 32-bit systems
with 64-bit time_t"), reverted by
commit ba4026b09d83 ("Revert "perf bench futex: Add support for 32-bit
systems with 64-bit time_t"") because it included linux/time_types.h,
which is unavailable on older distributions. This change deliberately
avoids that dependency and adds only the one guard needed to fix
compilation.
Signed-off-by: Nylon Chen <nylon.chen@sifive.com>
---
tools/perf/bench/futex.h | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/tools/perf/bench/futex.h b/tools/perf/bench/futex.h
index fcb72d682cf8..6df8837b365b 100644
--- a/tools/perf/bench/futex.h
+++ b/tools/perf/bench/futex.h
@@ -14,6 +14,17 @@
#include <sys/types.h>
#include <linux/futex.h>
+/*
+ * SYS_futex is expected from system C library, in glibc some 32-bit
+ * architectures (e.g. RV32) are using 64-bit time_t, therefore it doesn't have
+ * SYS_futex defined but just SYS_futex_time64. Define SYS_futex as
+ * SYS_futex_time64 in this situation to ensure the compilation and the
+ * compatibility.
+ */
+#if !defined(SYS_futex) && defined(SYS_futex_time64)
+#define SYS_futex SYS_futex_time64
+#endif
+
struct bench_futex_parameters {
bool silent;
bool fshared;
base-commit: 66498c75b4f8017f62d720d9b59675bdf3abce91
--
2.43.7
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply related [flat|nested] 2+ messages in thread* Re: [PATCH] perf bench futex: Define SYS_futex on 32-bit arches with 64-bit time_t
2026-09-02 9:32 [PATCH] perf bench futex: Define SYS_futex on 32-bit arches with 64-bit time_t Nylon Chen
@ 2026-09-03 5:04 ` Ian Rogers
0 siblings, 0 replies; 2+ messages in thread
From: Ian Rogers @ 2026-09-03 5:04 UTC (permalink / raw)
To: Nylon Chen
Cc: Namhyung Kim, Arnaldo Carvalho de Melo, Jiri Olsa, Adrian Hunter,
James Clark, Mark Rutland, Alexander Shishkin, Peter Zijlstra,
Ingo Molnar, Thomas Gleixner, André Almeida, Davidlohr Bueso,
Palmer Dabbelt, Alexandre Ghiti, linux-perf-users, linux-riscv,
linux-kernel
On Wed, Sep 2, 2026 at 2:32 AM Nylon Chen <nylon.chen@sifive.com> wrote:
>
> The kernel does not provide sys_futex() on 32-bit architectures that lack
> a 32-bit time representation, such as riscv32. Consequently glibc does not
> define SYS_futex there, only SYS_futex_time64, and perf bench's futex
> benchmarks fail to build:
>
> bench/futex.h: In function 'futex_syscall':
> bench/futex.h:77:18: error: 'SYS_futex' undeclared (first use in this function)
>
> Define SYS_futex as SYS_futex_time64 when only the latter is available.
> The guard and its comment are taken verbatim from
> tools/testing/selftests/futex/include/futextest.h, where they were added by
> commit 04850819c65c ("selftests/futex: Define SYS_futex on 32-bit
> architectures with 64-bit time_t"), keeping the two futex userspace headers
> in sync.
>
> No timespec conversion helper is needed on top of this. glibc lays out
> struct timespec on 32-bit architectures with 64-bit time_t as
> { int64 tv_sec; int32 tv_nsec; 32-bit pad }, which is compatible with
> struct __kernel_timespec, and every futex_wait()/futex_lock_pi()/
> futex_wait_requeue_pi() call site in perf bench passes a NULL timeout
> anyway, so no timespec ever crosses the syscall boundary here.
>
> Note that an earlier and more ambitious attempt at this was
> commit c1ff12dac465 ("perf bench futex: Add support for 32-bit systems
> with 64-bit time_t"), reverted by
> commit ba4026b09d83 ("Revert "perf bench futex: Add support for 32-bit
> systems with 64-bit time_t"") because it included linux/time_types.h,
> which is unavailable on older distributions. This change deliberately
> avoids that dependency and adds only the one guard needed to fix
> compilation.
>
> Signed-off-by: Nylon Chen <nylon.chen@sifive.com>
Reviewed-by: Ian Rogers <irogers@google.com>
Thanks,
Ian
> ---
> tools/perf/bench/futex.h | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/tools/perf/bench/futex.h b/tools/perf/bench/futex.h
> index fcb72d682cf8..6df8837b365b 100644
> --- a/tools/perf/bench/futex.h
> +++ b/tools/perf/bench/futex.h
> @@ -14,6 +14,17 @@
> #include <sys/types.h>
> #include <linux/futex.h>
>
> +/*
> + * SYS_futex is expected from system C library, in glibc some 32-bit
> + * architectures (e.g. RV32) are using 64-bit time_t, therefore it doesn't have
> + * SYS_futex defined but just SYS_futex_time64. Define SYS_futex as
> + * SYS_futex_time64 in this situation to ensure the compilation and the
> + * compatibility.
> + */
> +#if !defined(SYS_futex) && defined(SYS_futex_time64)
> +#define SYS_futex SYS_futex_time64
> +#endif
> +
> struct bench_futex_parameters {
> bool silent;
> bool fshared;
>
> base-commit: 66498c75b4f8017f62d720d9b59675bdf3abce91
> --
> 2.43.7
>
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-09-03 5:04 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-09-02 9:32 [PATCH] perf bench futex: Define SYS_futex on 32-bit arches with 64-bit time_t Nylon Chen
2026-09-03 5:04 ` Ian Rogers
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox