Commit 99e6c0e6 authored by Al Viro's avatar Al Viro Committed by Thomas Gleixner

posix-timers: Store rmtp into restart_block in sys_clock_nanosleep()

... instead of doing that in every ->nsleep() instance
Signed-off-by: default avatarAl Viro <viro@zeniv.linux.org.uk>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: John Stultz <john.stultz@linaro.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Link: http://lkml.kernel.org/r/20170607084241.28657-5-viro@ZenIV.linux.org.uk
parent a7602681
...@@ -753,8 +753,7 @@ static long __sched alarm_timer_nsleep_restart(struct restart_block *restart) ...@@ -753,8 +753,7 @@ static long __sched alarm_timer_nsleep_restart(struct restart_block *restart)
* Handles clock_nanosleep calls against _ALARM clockids * Handles clock_nanosleep calls against _ALARM clockids
*/ */
static int alarm_timer_nsleep(const clockid_t which_clock, int flags, static int alarm_timer_nsleep(const clockid_t which_clock, int flags,
struct timespec64 *tsreq, struct timespec64 *tsreq)
struct timespec __user *rmtp)
{ {
enum alarmtimer_type type = clock2alarm(which_clock); enum alarmtimer_type type = clock2alarm(which_clock);
struct restart_block *restart = &current->restart_block; struct restart_block *restart = &current->restart_block;
...@@ -762,11 +761,6 @@ static int alarm_timer_nsleep(const clockid_t which_clock, int flags, ...@@ -762,11 +761,6 @@ static int alarm_timer_nsleep(const clockid_t which_clock, int flags,
ktime_t exp; ktime_t exp;
int ret = 0; int ret = 0;
if (flags & TIMER_ABSTIME)
rmtp = NULL;
restart->nanosleep.rmtp = rmtp;
if (!alarmtimer_get_rtcdev()) if (!alarmtimer_get_rtcdev())
return -ENOTSUPP; return -ENOTSUPP;
......
...@@ -1328,16 +1328,11 @@ static int do_cpu_nanosleep(const clockid_t which_clock, int flags, ...@@ -1328,16 +1328,11 @@ static int do_cpu_nanosleep(const clockid_t which_clock, int flags,
static long posix_cpu_nsleep_restart(struct restart_block *restart_block); static long posix_cpu_nsleep_restart(struct restart_block *restart_block);
static int posix_cpu_nsleep(const clockid_t which_clock, int flags, static int posix_cpu_nsleep(const clockid_t which_clock, int flags,
struct timespec64 *rqtp, struct timespec __user *rmtp) struct timespec64 *rqtp)
{ {
struct restart_block *restart_block = &current->restart_block; struct restart_block *restart_block = &current->restart_block;
int error; int error;
if (flags & TIMER_ABSTIME)
rmtp = NULL;
restart_block->nanosleep.rmtp = rmtp;
/* /*
* Diagnose required errors first. * Diagnose required errors first.
*/ */
...@@ -1388,10 +1383,9 @@ static int process_cpu_timer_create(struct k_itimer *timer) ...@@ -1388,10 +1383,9 @@ static int process_cpu_timer_create(struct k_itimer *timer)
return posix_cpu_timer_create(timer); return posix_cpu_timer_create(timer);
} }
static int process_cpu_nsleep(const clockid_t which_clock, int flags, static int process_cpu_nsleep(const clockid_t which_clock, int flags,
struct timespec64 *rqtp, struct timespec64 *rqtp)
struct timespec __user *rmtp)
{ {
return posix_cpu_nsleep(PROCESS_CLOCK, flags, rqtp, rmtp); return posix_cpu_nsleep(PROCESS_CLOCK, flags, rqtp);
} }
static long process_cpu_nsleep_restart(struct restart_block *restart_block) static long process_cpu_nsleep_restart(struct restart_block *restart_block)
{ {
......
...@@ -1041,11 +1041,8 @@ SYSCALL_DEFINE2(clock_getres, const clockid_t, which_clock, ...@@ -1041,11 +1041,8 @@ SYSCALL_DEFINE2(clock_getres, const clockid_t, which_clock,
* nanosleep for monotonic and realtime clocks * nanosleep for monotonic and realtime clocks
*/ */
static int common_nsleep(const clockid_t which_clock, int flags, static int common_nsleep(const clockid_t which_clock, int flags,
struct timespec64 *tsave, struct timespec __user *rmtp) struct timespec64 *tsave)
{ {
if (flags & TIMER_ABSTIME)
rmtp = NULL;
current->restart_block.nanosleep.rmtp = rmtp;
return hrtimer_nanosleep(tsave, flags & TIMER_ABSTIME ? return hrtimer_nanosleep(tsave, flags & TIMER_ABSTIME ?
HRTIMER_MODE_ABS : HRTIMER_MODE_REL, HRTIMER_MODE_ABS : HRTIMER_MODE_REL,
which_clock); which_clock);
...@@ -1070,8 +1067,11 @@ SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags, ...@@ -1070,8 +1067,11 @@ SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags,
t64 = timespec_to_timespec64(t); t64 = timespec_to_timespec64(t);
if (!timespec64_valid(&t64)) if (!timespec64_valid(&t64))
return -EINVAL; return -EINVAL;
if (flags & TIMER_ABSTIME)
rmtp = NULL;
current->restart_block.nanosleep.rmtp = rmtp;
return kc->nsleep(which_clock, flags, &t64, rmtp); return kc->nsleep(which_clock, flags, &t64);
} }
/* /*
......
...@@ -10,7 +10,7 @@ struct k_clock { ...@@ -10,7 +10,7 @@ struct k_clock {
int (*clock_adj)(const clockid_t which_clock, struct timex *tx); int (*clock_adj)(const clockid_t which_clock, struct timex *tx);
int (*timer_create)(struct k_itimer *timer); int (*timer_create)(struct k_itimer *timer);
int (*nsleep)(const clockid_t which_clock, int flags, int (*nsleep)(const clockid_t which_clock, int flags,
struct timespec64 *, struct timespec __user *); struct timespec64 *);
long (*nsleep_restart)(struct restart_block *restart_block); long (*nsleep_restart)(struct restart_block *restart_block);
int (*timer_set)(struct k_itimer *timr, int flags, int (*timer_set)(struct k_itimer *timr, int flags,
struct itimerspec64 *new_setting, struct itimerspec64 *new_setting,
......
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