posix-timers: Cleanup restart_block usage
posix timers still use the legacy arg0-arg3 members of restart_block. Use restart_block.nanosleep instead Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Acked-by: John Stultz <johnstul@us.ibm.com> Tested-by: Richard Cochran <richard.cochran@omicron.at> LKML-Reference: <20110201134418.232288779@linutronix.de>
This commit is contained in:
parent
59bd5bc24a
commit
3751f9f29b
|
@ -1485,7 +1485,7 @@ int posix_cpu_nsleep(const clockid_t which_clock, int flags,
|
||||||
struct timespec *rqtp, struct timespec __user *rmtp)
|
struct timespec *rqtp, struct timespec __user *rmtp)
|
||||||
{
|
{
|
||||||
struct restart_block *restart_block =
|
struct restart_block *restart_block =
|
||||||
¤t_thread_info()->restart_block;
|
¤t_thread_info()->restart_block;
|
||||||
struct itimerspec it;
|
struct itimerspec it;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
|
@ -1501,50 +1501,42 @@ int posix_cpu_nsleep(const clockid_t which_clock, int flags,
|
||||||
|
|
||||||
if (error == -ERESTART_RESTARTBLOCK) {
|
if (error == -ERESTART_RESTARTBLOCK) {
|
||||||
|
|
||||||
if (flags & TIMER_ABSTIME)
|
if (flags & TIMER_ABSTIME)
|
||||||
return -ERESTARTNOHAND;
|
return -ERESTARTNOHAND;
|
||||||
/*
|
/*
|
||||||
* Report back to the user the time still remaining.
|
* Report back to the user the time still remaining.
|
||||||
*/
|
*/
|
||||||
if (rmtp != NULL && copy_to_user(rmtp, &it.it_value, sizeof *rmtp))
|
if (rmtp && copy_to_user(rmtp, &it.it_value, sizeof *rmtp))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
restart_block->fn = posix_cpu_nsleep_restart;
|
restart_block->fn = posix_cpu_nsleep_restart;
|
||||||
restart_block->arg0 = which_clock;
|
restart_block->nanosleep.index = which_clock;
|
||||||
restart_block->arg1 = (unsigned long) rmtp;
|
restart_block->nanosleep.rmtp = rmtp;
|
||||||
restart_block->arg2 = rqtp->tv_sec;
|
restart_block->nanosleep.expires = timespec_to_ns(rqtp);
|
||||||
restart_block->arg3 = rqtp->tv_nsec;
|
|
||||||
}
|
}
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
|
||||||
long posix_cpu_nsleep_restart(struct restart_block *restart_block)
|
long posix_cpu_nsleep_restart(struct restart_block *restart_block)
|
||||||
{
|
{
|
||||||
clockid_t which_clock = restart_block->arg0;
|
clockid_t which_clock = restart_block->nanosleep.index;
|
||||||
struct timespec __user *rmtp;
|
|
||||||
struct timespec t;
|
struct timespec t;
|
||||||
struct itimerspec it;
|
struct itimerspec it;
|
||||||
int error;
|
int error;
|
||||||
|
|
||||||
rmtp = (struct timespec __user *) restart_block->arg1;
|
t = ns_to_timespec(restart_block->nanosleep.expires);
|
||||||
t.tv_sec = restart_block->arg2;
|
|
||||||
t.tv_nsec = restart_block->arg3;
|
|
||||||
|
|
||||||
restart_block->fn = do_no_restart_syscall;
|
|
||||||
error = do_cpu_nanosleep(which_clock, TIMER_ABSTIME, &t, &it);
|
error = do_cpu_nanosleep(which_clock, TIMER_ABSTIME, &t, &it);
|
||||||
|
|
||||||
if (error == -ERESTART_RESTARTBLOCK) {
|
if (error == -ERESTART_RESTARTBLOCK) {
|
||||||
|
struct timespec __user *rmtp = restart_block->nanosleep.rmtp;
|
||||||
/*
|
/*
|
||||||
* Report back to the user the time still remaining.
|
* Report back to the user the time still remaining.
|
||||||
*/
|
*/
|
||||||
if (rmtp != NULL && copy_to_user(rmtp, &it.it_value, sizeof *rmtp))
|
if (rmtp && copy_to_user(rmtp, &it.it_value, sizeof *rmtp))
|
||||||
return -EFAULT;
|
return -EFAULT;
|
||||||
|
|
||||||
restart_block->fn = posix_cpu_nsleep_restart;
|
restart_block->nanosleep.expires = timespec_to_ns(&t);
|
||||||
restart_block->arg0 = which_clock;
|
|
||||||
restart_block->arg1 = (unsigned long) rmtp;
|
|
||||||
restart_block->arg2 = t.tv_sec;
|
|
||||||
restart_block->arg3 = t.tv_nsec;
|
|
||||||
}
|
}
|
||||||
return error;
|
return error;
|
||||||
|
|
||||||
|
|
|
@ -1034,7 +1034,7 @@ SYSCALL_DEFINE4(clock_nanosleep, const clockid_t, which_clock, int, flags,
|
||||||
*/
|
*/
|
||||||
long clock_nanosleep_restart(struct restart_block *restart_block)
|
long clock_nanosleep_restart(struct restart_block *restart_block)
|
||||||
{
|
{
|
||||||
clockid_t which_clock = restart_block->arg0;
|
clockid_t which_clock = restart_block->nanosleep.index;
|
||||||
struct k_clock *kc = clockid_to_kclock(which_clock);
|
struct k_clock *kc = clockid_to_kclock(which_clock);
|
||||||
|
|
||||||
if (WARN_ON_ONCE(!kc || !kc->nsleep_restart))
|
if (WARN_ON_ONCE(!kc || !kc->nsleep_restart))
|
||||||
|
|
Loading…
Reference in New Issue