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
          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"
 
 #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)           | \
  * @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.
        s32                     tz_dsttime;
        u32                     hrtimer_res;
        u32                     __unused;
+
+       struct arch_vdso_data   arch_data;
 };
 
 /*