]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
vdso: Move architecture related data before basetime data
authorAnna-Maria Behnsen <anna-maria@linutronix.de>
Mon, 3 Mar 2025 11:11:20 +0000 (12:11 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Sat, 8 Mar 2025 13:37:41 +0000 (14:37 +0100)
Architecture related vdso data is required in the fast path when reading
CLOCK_MONOTONIC or CLOCK_REALTIME. At the moment, this information is
located at the end of the vdso_time_data structure, which is a suboptimal
cache layout.

Move the architecture specific VDSO data right before the basetime
information, which is always required. This change does not have an impact
on architectures with CONFIG_ARCH_HAS_VDSO_DATA=n. Architectures, which
have it enabled, gain a better cache layout.

Signed-off-by: Anna-Maria Behnsen <anna-maria@linutronix.de>
Signed-off-by: Nam Cao <namcao@linutronix.de>
Signed-off-by: Thomas Weißschuh <thomas.weissschuh@linutronix.de>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/20250303-vdso-clock-v1-18-c1b5c69a166f@linutronix.de
include/vdso/datapage.h

index 1df22e8bb9b31153546b72b1e8b8c8aeaed7d9e3..bcd19c223783be7c22f90120330e7dddd0496f1a 100644 (file)
@@ -70,6 +70,8 @@ struct vdso_timestamp {
 
 /**
  * struct vdso_time_data - vdso datapage representation
+ * @arch_data:         architecture specific data (optional, defaults
+ *                     to an empty struct)
  * @seq:               timebase sequence counter
  * @clock_mode:                clock mode
  * @cycle_last:                timebase at clocksource init
@@ -83,8 +85,6 @@ struct vdso_timestamp {
  * @tz_dsttime:                type of DST correction
  * @hrtimer_res:       hrtimer resolution
  * @__unused:          unused
- * @arch_data:         architecture specific data (optional, defaults
- *                     to an empty struct)
  *
  * vdso_time_data will be accessed by 64 bit and compat code at the same time
  * so we should be careful before modifying this structure.
@@ -105,6 +105,8 @@ struct vdso_timestamp {
  * offset must be zero.
  */
 struct vdso_time_data {
+       struct arch_vdso_time_data arch_data;
+
        u32                     seq;
 
        s32                     clock_mode;
@@ -125,8 +127,6 @@ struct vdso_time_data {
        s32                     tz_dsttime;
        u32                     hrtimer_res;
        u32                     __unused;
-
-       struct arch_vdso_time_data arch_data;
 } ____cacheline_aligned;
 
 #define vdso_clock vdso_time_data