[PATCH 5/5] selftests: vDSO: vdso_test_abi: Add tests for auxiliary clocks

From: Thomas Weißschuh

Date: Tue Jul 28 2026 - 04:01:08 EST


Extend the test to also cover auxiliary clocks.

The hardcoded boundary of 'CLOCK_AUX + 8' is intentional.
If the number of auxiliary clocks ever changes we will not access the
vdso_clock_name array out of bounds but instead kselftest.h will report
a mismatch between the executed tests and the test plan.

Signed-off-by: Thomas Weißschuh <thomas.weissschuh@xxxxxxxxxxxxx>
---
tools/testing/selftests/vDSO/vdso_test_abi.c | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)

diff --git a/tools/testing/selftests/vDSO/vdso_test_abi.c b/tools/testing/selftests/vDSO/vdso_test_abi.c
index b162a4ba9c4f..d34d112f9860 100644
--- a/tools/testing/selftests/vDSO/vdso_test_abi.c
+++ b/tools/testing/selftests/vDSO/vdso_test_abi.c
@@ -23,6 +23,14 @@
#include "vdso_call.h"
#include "parse_vdso.h"

+#ifndef CLOCK_AUX
+#define CLOCK_AUX 16
+#endif
+
+#ifndef CLOCK_AUX_LAST
+#define CLOCK_AUX_LAST 23
+#endif
+
static const char *version;
static const char **name;

@@ -52,6 +60,14 @@ static const char * const vdso_clock_name[] = {
[CLOCK_BOOTTIME_ALARM] = "CLOCK_BOOTTIME_ALARM",
[10 /* CLOCK_SGI_CYCLE */] = "CLOCK_SGI_CYCLE",
[CLOCK_TAI] = "CLOCK_TAI",
+ [CLOCK_AUX + 0] = "CLOCK_AUX0",
+ [CLOCK_AUX + 1] = "CLOCK_AUX1",
+ [CLOCK_AUX + 2] = "CLOCK_AUX2",
+ [CLOCK_AUX + 3] = "CLOCK_AUX3",
+ [CLOCK_AUX + 4] = "CLOCK_AUX4",
+ [CLOCK_AUX + 5] = "CLOCK_AUX5",
+ [CLOCK_AUX + 6] = "CLOCK_AUX6",
+ [CLOCK_AUX + 7] = "CLOCK_AUX7",
};

static void vdso_test_gettimeofday(void)
@@ -99,6 +115,9 @@ static void vdso_test_clock_gettime64(clockid_t clk_id)
(long long)ts.tv_sec, (long long)ts.tv_nsec);
ksft_test_result_pass("%s %s\n", name[5],
vdso_clock_name[clk_id]);
+ } else if (ret == -ENODEV) {
+ ksft_test_result_skip("%s %s\n", name[5],
+ vdso_clock_name[clk_id]);
} else {
ksft_test_result_fail("%s %s\n", name[5],
vdso_clock_name[clk_id]);
@@ -126,6 +145,9 @@ static void vdso_test_clock_gettime(clockid_t clk_id)
(long long)ts.tv_sec, (long long)ts.tv_nsec);
ksft_test_result_pass("%s %s\n", name[1],
vdso_clock_name[clk_id]);
+ } else if (ret == -ENODEV) {
+ ksft_test_result_skip("%s %s\n", name[1],
+ vdso_clock_name[clk_id]);
} else {
ksft_test_result_fail("%s %s\n", name[1],
vdso_clock_name[clk_id]);
@@ -261,7 +283,8 @@ static inline void vdso_test_clock(clockid_t clock_id)
vdso_test_clock_getres_time64(clock_id);
}

-#define VDSO_TEST_PLAN 38
+#define NUM_AUX_TESTS (4 * (CLOCK_AUX_LAST - CLOCK_AUX + 1))
+#define VDSO_TEST_PLAN (38 + NUM_AUX_TESTS)

int main(int argc, char **argv)
{
@@ -293,6 +316,9 @@ int main(int argc, char **argv)
vdso_test_clock(CLOCK_PROCESS_CPUTIME_ID);
vdso_test_clock(CLOCK_THREAD_CPUTIME_ID);

+ for (clockid_t aux_clock = CLOCK_AUX; aux_clock < CLOCK_AUX + 8; aux_clock++)
+ vdso_test_clock(aux_clock);
+
vdso_test_time();

ksft_finished();

--
2.55.0