lib/vdso: Allow to add architecture-specific vdso data
authorSven Schnelle <svens@linux.ibm.com>
Tue, 4 Aug 2020 15:01:22 +0000 (17:01 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Thu, 6 Aug 2020 08:57:30 +0000 (10:57 +0200)
The initial assumption that all VDSO related data can be completely generic
does not hold. S390 needs architecture specific storage to access the clock
steering information.

Add struct arch_vdso_data to the vdso data struct. For architectures which
do not need extra data this defaults to an empty struct. Architectures
which require it, enable CONFIG_ARCH_HAS_VDSO_DATA and provide their
specific struct in asm/vdso/data.h.

Signed-off-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Link: https://lkml.kernel.org/r/20200804150124.41692-2-svens@linux.ibm.com
arch/Kconfig
include/vdso/datapage.h

index a112448..b44dd6b 100644 (file)
@@ -975,6 +975,9 @@ config HAVE_SPARSE_SYSCALL_NR
          entries at 4000, 5000 and 6000 locations. This option turns on syscall
          related optimizations for a given architecture.
 
+config ARCH_HAS_VDSO_DATA
+       bool
+
 source "kernel/gcov/Kconfig"
 
 source "scripts/gcc-plugins/Kconfig"
index ee810ca..73eb622 100644 (file)
 #include <vdso/time32.h>
 #include <vdso/time64.h>
 
+#ifdef CONFIG_ARCH_HAS_VDSO_DATA
+#include <asm/vdso/data.h>
+#else
+struct arch_vdso_data {};
+#endif
+
 #define VDSO_BASES     (CLOCK_TAI + 1)
 #define VDSO_HRES      (BIT(CLOCK_REALTIME)            | \
                         BIT(CLOCK_MONOTONIC)           | \
@@ -64,6 +70,8 @@ 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_data will be accessed by 64 bit and compat code at the same time
  * so we should be careful before modifying this structure.
@@ -97,6 +105,8 @@ struct vdso_data {
        s32                     tz_dsttime;
        u32                     hrtimer_res;
        u32                     __unused;
+
+       struct arch_vdso_data   arch_data;
 };
 
 /*