mirror of
https://github.com/torvalds/linux.git
synced 2024-12-28 13:51:44 +00:00
posix-timers: Store rmtp into restart_block in sys_clock_nanosleep()
... 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
This commit is contained in:
parent
a7602681fc
commit
99e6c0e6ec
@ -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 = ¤t->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;
|
||||
|
||||
|
@ -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 = ¤t->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)
|
||||
{
|
||||
|
@ -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);
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -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,
|
||||
|
Loading…
Reference in New Issue
Block a user