Commit 2d6b01bd authored by Thomas Gleixner's avatar Thomas Gleixner

lib/vdso: Move VCLOCK_TIMENS to vdso_clock_modes

Move the time namespace indicator clock mode to the other ones for
consistency sake.
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Reviewed-by: default avatarVincenzo Frascino <vincenzo.frascino@arm.com>
Link: https://lkml.kernel.org/r/20200207124403.656097274@linutronix.de

parent c7a18100
...@@ -34,6 +34,9 @@ enum vdso_clock_mode { ...@@ -34,6 +34,9 @@ enum vdso_clock_mode {
VDSO_ARCH_CLOCKMODES, VDSO_ARCH_CLOCKMODES,
#endif #endif
VDSO_CLOCKMODE_MAX, VDSO_CLOCKMODE_MAX,
/* Indicator for time namespace VDSO */
VDSO_CLOCKMODE_TIMENS = INT_MAX
}; };
/** /**
......
...@@ -21,8 +21,6 @@ ...@@ -21,8 +21,6 @@
#define CS_RAW 1 #define CS_RAW 1
#define CS_BASES (CS_RAW + 1) #define CS_BASES (CS_RAW + 1)
#define VCLOCK_TIMENS UINT_MAX
/** /**
* struct vdso_timestamp - basetime per clock_id * struct vdso_timestamp - basetime per clock_id
* @sec: seconds * @sec: seconds
......
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
#include <linux/user_namespace.h> #include <linux/user_namespace.h>
#include <linux/sched/signal.h> #include <linux/sched/signal.h>
#include <linux/sched/task.h> #include <linux/sched/task.h>
#include <linux/clocksource.h>
#include <linux/seq_file.h> #include <linux/seq_file.h>
#include <linux/proc_ns.h> #include <linux/proc_ns.h>
#include <linux/export.h> #include <linux/export.h>
...@@ -172,8 +173,8 @@ static struct timens_offset offset_from_ts(struct timespec64 off) ...@@ -172,8 +173,8 @@ static struct timens_offset offset_from_ts(struct timespec64 off)
* for vdso_data->clock_mode is a non-issue. The task is spin waiting for the * for vdso_data->clock_mode is a non-issue. The task is spin waiting for the
* update to finish and for 'seq' to become even anyway. * update to finish and for 'seq' to become even anyway.
* *
* Timens page has vdso_data->clock_mode set to VCLOCK_TIMENS which enforces * Timens page has vdso_data->clock_mode set to VDSO_CLOCKMODE_TIMENS which
* the time namespace handling path. * enforces the time namespace handling path.
*/ */
static void timens_setup_vdso_data(struct vdso_data *vdata, static void timens_setup_vdso_data(struct vdso_data *vdata,
struct time_namespace *ns) struct time_namespace *ns)
...@@ -183,7 +184,7 @@ static void timens_setup_vdso_data(struct vdso_data *vdata, ...@@ -183,7 +184,7 @@ static void timens_setup_vdso_data(struct vdso_data *vdata,
struct timens_offset boottime = offset_from_ts(ns->offsets.boottime); struct timens_offset boottime = offset_from_ts(ns->offsets.boottime);
vdata->seq = 1; vdata->seq = 1;
vdata->clock_mode = VCLOCK_TIMENS; vdata->clock_mode = VDSO_CLOCKMODE_TIMENS;
offset[CLOCK_MONOTONIC] = monotonic; offset[CLOCK_MONOTONIC] = monotonic;
offset[CLOCK_MONOTONIC_RAW] = monotonic; offset[CLOCK_MONOTONIC_RAW] = monotonic;
offset[CLOCK_MONOTONIC_COARSE] = monotonic; offset[CLOCK_MONOTONIC_COARSE] = monotonic;
......
...@@ -116,10 +116,10 @@ static __always_inline int do_hres(const struct vdso_data *vd, clockid_t clk, ...@@ -116,10 +116,10 @@ static __always_inline int do_hres(const struct vdso_data *vd, clockid_t clk,
do { do {
/* /*
* Open coded to handle VCLOCK_TIMENS. Time namespace * Open coded to handle VDSO_CLOCKMODE_TIMENS. Time namespace
* enabled tasks have a special VVAR page installed which * enabled tasks have a special VVAR page installed which
* has vd->seq set to 1 and vd->clock_mode set to * has vd->seq set to 1 and vd->clock_mode set to
* VCLOCK_TIMENS. For non time namespace affected tasks * VDSO_CLOCKMODE_TIMENS. For non time namespace affected tasks
* this does not affect performance because if vd->seq is * this does not affect performance because if vd->seq is
* odd, i.e. a concurrent update is in progress the extra * odd, i.e. a concurrent update is in progress the extra
* check for vd->clock_mode is just a few extra * check for vd->clock_mode is just a few extra
...@@ -128,7 +128,7 @@ static __always_inline int do_hres(const struct vdso_data *vd, clockid_t clk, ...@@ -128,7 +128,7 @@ static __always_inline int do_hres(const struct vdso_data *vd, clockid_t clk,
*/ */
while (unlikely((seq = READ_ONCE(vd->seq)) & 1)) { while (unlikely((seq = READ_ONCE(vd->seq)) & 1)) {
if (IS_ENABLED(CONFIG_TIME_NS) && if (IS_ENABLED(CONFIG_TIME_NS) &&
vd->clock_mode == VCLOCK_TIMENS) vd->clock_mode == VDSO_CLOCKMODE_TIMENS)
return do_hres_timens(vd, clk, ts); return do_hres_timens(vd, clk, ts);
cpu_relax(); cpu_relax();
} }
...@@ -200,12 +200,12 @@ static __always_inline int do_coarse(const struct vdso_data *vd, clockid_t clk, ...@@ -200,12 +200,12 @@ static __always_inline int do_coarse(const struct vdso_data *vd, clockid_t clk,
do { do {
/* /*
* Open coded to handle VCLOCK_TIMENS. See comment in * Open coded to handle VDSO_CLOCK_TIMENS. See comment in
* do_hres(). * do_hres().
*/ */
while ((seq = READ_ONCE(vd->seq)) & 1) { while ((seq = READ_ONCE(vd->seq)) & 1) {
if (IS_ENABLED(CONFIG_TIME_NS) && if (IS_ENABLED(CONFIG_TIME_NS) &&
vd->clock_mode == VCLOCK_TIMENS) vd->clock_mode == VDSO_CLOCKMODE_TIMENS)
return do_coarse_timens(vd, clk, ts); return do_coarse_timens(vd, clk, ts);
cpu_relax(); cpu_relax();
} }
...@@ -292,7 +292,7 @@ __cvdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz) ...@@ -292,7 +292,7 @@ __cvdso_gettimeofday(struct __kernel_old_timeval *tv, struct timezone *tz)
if (unlikely(tz != NULL)) { if (unlikely(tz != NULL)) {
if (IS_ENABLED(CONFIG_TIME_NS) && if (IS_ENABLED(CONFIG_TIME_NS) &&
vd->clock_mode == VCLOCK_TIMENS) vd->clock_mode == VDSO_CLOCKMODE_TIMENS)
vd = __arch_get_timens_vdso_data(); vd = __arch_get_timens_vdso_data();
tz->tz_minuteswest = vd[CS_HRES_COARSE].tz_minuteswest; tz->tz_minuteswest = vd[CS_HRES_COARSE].tz_minuteswest;
...@@ -308,7 +308,8 @@ static __maybe_unused __kernel_old_time_t __cvdso_time(__kernel_old_time_t *time ...@@ -308,7 +308,8 @@ static __maybe_unused __kernel_old_time_t __cvdso_time(__kernel_old_time_t *time
const struct vdso_data *vd = __arch_get_vdso_data(); const struct vdso_data *vd = __arch_get_vdso_data();
__kernel_old_time_t t; __kernel_old_time_t t;
if (IS_ENABLED(CONFIG_TIME_NS) && vd->clock_mode == VCLOCK_TIMENS) if (IS_ENABLED(CONFIG_TIME_NS) &&
vd->clock_mode == VDSO_CLOCKMODE_TIMENS)
vd = __arch_get_timens_vdso_data(); vd = __arch_get_timens_vdso_data();
t = READ_ONCE(vd[CS_HRES_COARSE].basetime[CLOCK_REALTIME].sec); t = READ_ONCE(vd[CS_HRES_COARSE].basetime[CLOCK_REALTIME].sec);
...@@ -332,7 +333,8 @@ int __cvdso_clock_getres_common(clockid_t clock, struct __kernel_timespec *res) ...@@ -332,7 +333,8 @@ int __cvdso_clock_getres_common(clockid_t clock, struct __kernel_timespec *res)
if (unlikely((u32) clock >= MAX_CLOCKS)) if (unlikely((u32) clock >= MAX_CLOCKS))
return -1; return -1;
if (IS_ENABLED(CONFIG_TIME_NS) && vd->clock_mode == VCLOCK_TIMENS) if (IS_ENABLED(CONFIG_TIME_NS) &&
vd->clock_mode == VDSO_CLOCKMODE_TIMENS)
vd = __arch_get_timens_vdso_data(); vd = __arch_get_timens_vdso_data();
/* /*
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment