Re: [PATCH v2 2/2] perf tsc: Declare TSC support from the build system

From: Adrian Hunter

Date: Tue Oct 06 2026 - 09:18:18 EST


On 29/09/2026 06:41, Chen Pei wrote:
> The "TSC support" subtest of the "Convert perf time to TSC" test decides
> whether the architecture is covered by matching compiler macros for
> x86_64, i386 and arm64. That list has to be edited for every new
> architecture and can drift apart from the set of architectures that really
> provide a counter.
>
> Declare the capability where the implementation is, following the
> PERF_HAVE_JITDUMP pattern: an architecture with a usable counter sets
> PERF_HAVE_RDTSC in its arch Makefile, Makefile.config turns it into
> -DHAVE_RDTSC, and the test keys off that.
>
> x86 and arm64 keep the same behaviour, riscv starts running the subtest
> where the previous patch defines rdtsc().
>
> Signed-off-by: Chen Pei <cp0613@xxxxxxxxxxxxxxxxx>

One minor style comment below. In any case:

Reviewed-by: Adrian Hunter <adrian.hunter@xxxxxxxxx>

> ---
> Changes in v2:
> - Declare the capability through the build system instead of a weak
> arch__rdtsc_supported() hook.
>
> tools/perf/Makefile.config | 4 ++++
> tools/perf/arch/arm64/Makefile | 1 +
> tools/perf/arch/riscv/Makefile | 1 +
> tools/perf/arch/x86/Makefile | 1 +
> tools/perf/tests/perf-time-to-tsc.c | 19 ++++---------------
> 5 files changed, 11 insertions(+), 15 deletions(-)
>
> diff --git a/tools/perf/Makefile.config b/tools/perf/Makefile.config
> index 4d5993da9f94..f1b3bf208231 100644
> --- a/tools/perf/Makefile.config
> +++ b/tools/perf/Makefile.config
> @@ -618,6 +618,10 @@ ifdef PERF_HAVE_JITDUMP
> endif
> endif
>
> +ifeq ($(PERF_HAVE_RDTSC),1)
> + CFLAGS += -DHAVE_RDTSC
> +endif
> +
> ifeq ($(SRCARCH),powerpc)
> ifndef NO_LIBDW
> CFLAGS += -DHAVE_SKIP_CALLCHAIN_IDX
> diff --git a/tools/perf/arch/arm64/Makefile b/tools/perf/arch/arm64/Makefile
> index 44cc3f023318..b9cd559065d6 100644
> --- a/tools/perf/arch/arm64/Makefile
> +++ b/tools/perf/arch/arm64/Makefile
> @@ -1,2 +1,3 @@
> # SPDX-License-Identifier: GPL-2.0
> PERF_HAVE_JITDUMP := 1
> +PERF_HAVE_RDTSC := 1
> diff --git a/tools/perf/arch/riscv/Makefile b/tools/perf/arch/riscv/Makefile
> index 44cc3f023318..8036bf55da8e 100644
> --- a/tools/perf/arch/riscv/Makefile
> +++ b/tools/perf/arch/riscv/Makefile
> @@ -1,2 +1,3 @@
> # SPDX-License-Identifier: GPL-2.0
> PERF_HAVE_JITDUMP := 1
> +PERF_HAVE_RDTSC := $(IS_64_BIT)
> diff --git a/tools/perf/arch/x86/Makefile b/tools/perf/arch/x86/Makefile
> index 44cc3f023318..b9cd559065d6 100644
> --- a/tools/perf/arch/x86/Makefile
> +++ b/tools/perf/arch/x86/Makefile
> @@ -1,2 +1,3 @@
> # SPDX-License-Identifier: GPL-2.0
> PERF_HAVE_JITDUMP := 1
> +PERF_HAVE_RDTSC := 1
> diff --git a/tools/perf/tests/perf-time-to-tsc.c b/tools/perf/tests/perf-time-to-tsc.c
> index f8f71fdd32b1..feb8063f8b59 100644
> --- a/tools/perf/tests/perf-time-to-tsc.c
> +++ b/tools/perf/tests/perf-time-to-tsc.c
> @@ -22,16 +22,6 @@
> #include "tests.h"
> #include "util/sample.h"
>
> -/*
> - * Except x86_64/i386 and Arm64, other archs don't support TSC in perf. Just
> - * enable the test for x86_64/i386 and Arm64 archs.
> - */
> -#if defined(__x86_64__) || defined(__i386__) || defined(__aarch64__)
> -#define TSC_IS_SUPPORTED 1
> -#else
> -#define TSC_IS_SUPPORTED 0
> -#endif
> -
> #define CHECK__(x) { \
> while ((x) < 0) { \
> pr_debug(#x " failed!\n"); \
> @@ -49,11 +39,10 @@
> static int test__tsc_is_supported(struct test_suite *test __maybe_unused,
> int subtest __maybe_unused)
> {
> - if (!TSC_IS_SUPPORTED) {
> - pr_debug("Test not supported on this architecture\n");
> - return TEST_SKIP;
> - }
> -
> +#ifndef HAVE_RDTSC
> + pr_debug("Test not supported on this architecture\n");
> + return TEST_SKIP;
> +#endif

Perhaps with #include <tools/config.h> the following is tidier:

if (!IS_BUILTIN(HAVE_RDTSC)) {
pr_debug("Test not supported on this architecture\n");
return TEST_SKIP;
}

> return TEST_OK;
> }
>