posix-timers: Store rmtp into restart_block in sys_clock_nanosleep()
authorAl Viro <viro@ZenIV.linux.org.uk>
Wed, 7 Jun 2017 08:42:30 +0000 (09:42 +0100)
committerThomas Gleixner <tglx@linutronix.de>
Tue, 13 Jun 2017 22:00:41 +0000 (00:00 +0200)
... instead of doing that in every ->nsleep() instance

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Thomas 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
kernel/time/alarmtimer.c
kernel/time/posix-cpu-timers.c
kernel/time/posix-timers.c
kernel/time/posix-timers.h

index ac6e9bc..d859a36 100644 (file)
@@ -753,8 +753,7 @@ static long __sched alarm_timer_nsleep_restart(struct restart_block *restart)
  * Handles clock_nanosleep calls against _ALARM clockids
  */
 static int alarm_timer_nsleep(const clockid_t which_clock, int flags,
-                             struct timespec64 *tsreq,
-                             struct timespec __user *rmtp)
+                             struct timespec64 *tsreq)
 {
        enum  alarmtimer_type type = clock2alarm(which_clock);
        struct restart_block *restart = &current->restart_block;
@@ -762,11 +761,6 @@ static int alarm_timer_nsleep(const clockid_t which_clock, int flags,
        ktime_t exp;
        int ret = 0;
 
-       if (flags & TIMER_ABSTIME)
-               rmtp = NULL;
-
-       restart->nanosleep.rmtp = rmtp;
-
        if (!alarmtimer_get_rtcdev())
                return -ENOTSUPP;
 
index 239fff9..ec6258c 100644 (file)
@@ -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 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;
        int error;
 
-       if (flags & TIMER_ABSTIME)
-               rmtp = NULL;
-
-       restart_block->nanosleep.rmtp = rmtp;
-
        /*
         * Diagnose required errors first.
         */
@@ -1388,10 +1383,9 @@ static int process_cpu_timer_create(struct k_itimer *timer)
        return posix_cpu_timer_create(timer);
 }
 static int process_cpu_nsleep(const clockid_t which_clock, int flags,
-                             struct timespec64 *rqtp,
-                             struct timespec __user *rmtp)
+                             struct timespec64 *rqtp)
 {
-       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)
 {
index 1a9f59f..a3e5c01 100644 (file)
@@ -1041,11 +1041,8 @@ SYSCALL_DEFINE2(clock_getres, const clockid_t, which_clock,
  * nanosleep for monotonic and realtime clocks
  */
 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 ?
                                 HRTIMER_MODE_ABS : HRTIMER_MODE_REL,
                                 which_clock);
@@ -1070,8 +1067,11 @@ SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags,
        t64 = timespec_to_timespec64(t);
        if (!timespec64_valid(&t64))
                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);
 }
 
 /*
index b086f5b..bfd9e15 100644 (file)
@@ -10,7 +10,7 @@ struct k_clock {
        int     (*clock_adj)(const clockid_t which_clock, struct timex *tx);
        int     (*timer_create)(struct k_itimer *timer);
        int     (*nsleep)(const clockid_t which_clock, int flags,
-                         struct timespec64 *, struct timespec __user *);
+                         struct timespec64 *);
        long    (*nsleep_restart)(struct restart_block *restart_block);
        int     (*timer_set)(struct k_itimer *timr, int flags,
                             struct itimerspec64 *new_setting,