Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

vdso/vsyscall: Split up __arch_update_vsyscall() into __arch_update_vdso_clock()

The upcoming auxiliary clocks need this hook, too.
To separate the architecture hooks from the timekeeper internals, refactor
the hook to only operate on a single vDSO clock.

While at it, use a more robust #define for the hook override.

Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/20250701-vdso-auxclock-v1-3-df7d9f87b9b8@linutronix.de

authored by

Thomas Weißschuh and committed by
Thomas Gleixner
76164ca0 6fedaf68

+8 -8
+3 -4
arch/arm64/include/asm/vdso/vsyscall.h
··· 13 13 * Update the vDSO data page to keep in sync with kernel timekeeping. 14 14 */ 15 15 static __always_inline 16 - void __arm64_update_vsyscall(struct vdso_time_data *vdata) 16 + void __arch_update_vdso_clock(struct vdso_clock *vc) 17 17 { 18 - vdata->clock_data[CS_HRES_COARSE].mask = VDSO_PRECISION_MASK; 19 - vdata->clock_data[CS_RAW].mask = VDSO_PRECISION_MASK; 18 + vc->mask = VDSO_PRECISION_MASK; 20 19 } 21 - #define __arch_update_vsyscall __arm64_update_vsyscall 20 + #define __arch_update_vdso_clock __arch_update_vdso_clock 22 21 23 22 /* The asm-generic header needs to be included after the definitions above */ 24 23 #include <asm-generic/vdso/vsyscall.h>
+3 -3
include/asm-generic/vdso/vsyscall.h
··· 22 22 23 23 #endif /* CONFIG_GENERIC_VDSO_DATA_STORE */ 24 24 25 - #ifndef __arch_update_vsyscall 26 - static __always_inline void __arch_update_vsyscall(struct vdso_time_data *vdata) 25 + #ifndef __arch_update_vdso_clock 26 + static __always_inline void __arch_update_vdso_clock(struct vdso_clock *vc) 27 27 { 28 28 } 29 - #endif /* __arch_update_vsyscall */ 29 + #endif /* __arch_update_vdso_clock */ 30 30 31 31 #ifndef __arch_sync_vdso_time_data 32 32 static __always_inline void __arch_sync_vdso_time_data(struct vdso_time_data *vdata)
+2 -1
kernel/time/vsyscall.c
··· 118 118 if (clock_mode != VDSO_CLOCKMODE_NONE) 119 119 update_vdso_time_data(vdata, tk); 120 120 121 - __arch_update_vsyscall(vdata); 121 + __arch_update_vdso_clock(&vc[CS_HRES_COARSE]); 122 + __arch_update_vdso_clock(&vc[CS_RAW]); 122 123 123 124 vdso_write_end(vdata); 124 125