]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
vdso/gettimeofday: Add a helper to test if a clock is namespaced
authorThomas Weißschuh <thomas.weissschuh@linutronix.de>
Fri, 27 Feb 2026 06:43:22 +0000 (07:43 +0100)
committerBorislav Petkov (AMD) <bp@alien8.de>
Wed, 11 Mar 2026 14:09:59 +0000 (15:09 +0100)
Currently this logic is duplicate multiple times.

Add a helper for it to make the code more readable.

  [ bp: Add a missing clocksource.h include, see
    https://lore.kernel.org/r/20260311113435-f72f81d8-33a6-4a0f-bd80-4997aad068cc@linutronix.de ]

Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://patch.msgid.link/20260227-vdso-cleanups-v1-3-c848b4bc4850@linutronix.de
include/vdso/helpers.h
lib/vdso/gettimeofday.c

index 9ccf6b53ef508c206eeac5ff50974fdcab23c335..4d35877dff5f84cdfb5e66dba478f60b00ea2159 100644 (file)
@@ -6,6 +6,12 @@
 
 #include <asm/barrier.h>
 #include <vdso/datapage.h>
+#include <vdso/clocksource.h>
+
+static __always_inline bool vdso_is_timens_clock(const struct vdso_clock *vc)
+{
+       return IS_ENABLED(CONFIG_TIME_NS) && vc->clock_mode == VDSO_CLOCKMODE_TIMENS;
+}
 
 static __always_inline u32 vdso_read_begin(const struct vdso_clock *vc)
 {
@@ -31,7 +37,7 @@ static __always_inline u32 vdso_read_begin(const struct vdso_clock *vc)
 static __always_inline bool vdso_read_begin_timens(const struct vdso_clock *vc, u32 *seq)
 {
        while (unlikely((*seq = READ_ONCE(vc->seq)) & 1)) {
-               if (IS_ENABLED(CONFIG_TIME_NS) && vc->clock_mode == VDSO_CLOCKMODE_TIMENS)
+               if (vdso_is_timens_clock(vc))
                        return true;
                cpu_relax();
        }
index e493696769288dee866489f6021db13a33c8f343..2faed7851635442cd0395067d33a44ad98115a82 100644 (file)
@@ -343,8 +343,7 @@ __cvdso_gettimeofday_data(const struct vdso_time_data *vd,
        }
 
        if (unlikely(tz != NULL)) {
-               if (IS_ENABLED(CONFIG_TIME_NS) &&
-                   vc->clock_mode == VDSO_CLOCKMODE_TIMENS)
+               if (vdso_is_timens_clock(vc))
                        vd = __arch_get_vdso_u_timens_data(vd);
 
                tz->tz_minuteswest = vd[CS_HRES_COARSE].tz_minuteswest;
@@ -367,8 +366,7 @@ __cvdso_time_data(const struct vdso_time_data *vd, __kernel_old_time_t *time)
        const struct vdso_clock *vc = vd->clock_data;
        __kernel_old_time_t t;
 
-       if (IS_ENABLED(CONFIG_TIME_NS) &&
-           vc->clock_mode == VDSO_CLOCKMODE_TIMENS) {
+       if (vdso_is_timens_clock(vc)) {
                vd = __arch_get_vdso_u_timens_data(vd);
                vc = vd->clock_data;
        }
@@ -399,8 +397,7 @@ bool __cvdso_clock_getres_common(const struct vdso_time_data *vd, clockid_t cloc
        if (!vdso_clockid_valid(clock))
                return false;
 
-       if (IS_ENABLED(CONFIG_TIME_NS) &&
-           vc->clock_mode == VDSO_CLOCKMODE_TIMENS)
+       if (vdso_is_timens_clock(vc))
                vd = __arch_get_vdso_u_timens_data(vd);
 
        /*