|
@@ -1120,62 +1120,6 @@ asmlinkage long sys_gettid(void)
|
|
return current->pid;
|
|
return current->pid;
|
|
}
|
|
}
|
|
|
|
|
|
-static long __sched nanosleep_restart(struct restart_block *restart)
|
|
|
|
-{
|
|
|
|
- unsigned long expire = restart->arg0, now = jiffies;
|
|
|
|
- struct timespec __user *rmtp = (struct timespec __user *) restart->arg1;
|
|
|
|
- long ret;
|
|
|
|
-
|
|
|
|
- /* Did it expire while we handled signals? */
|
|
|
|
- if (!time_after(expire, now))
|
|
|
|
- return 0;
|
|
|
|
-
|
|
|
|
- expire = schedule_timeout_interruptible(expire - now);
|
|
|
|
-
|
|
|
|
- ret = 0;
|
|
|
|
- if (expire) {
|
|
|
|
- struct timespec t;
|
|
|
|
- jiffies_to_timespec(expire, &t);
|
|
|
|
-
|
|
|
|
- ret = -ERESTART_RESTARTBLOCK;
|
|
|
|
- if (rmtp && copy_to_user(rmtp, &t, sizeof(t)))
|
|
|
|
- ret = -EFAULT;
|
|
|
|
- /* The 'restart' block is already filled in */
|
|
|
|
- }
|
|
|
|
- return ret;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
-asmlinkage long sys_nanosleep(struct timespec __user *rqtp, struct timespec __user *rmtp)
|
|
|
|
-{
|
|
|
|
- struct timespec t;
|
|
|
|
- unsigned long expire;
|
|
|
|
- long ret;
|
|
|
|
-
|
|
|
|
- if (copy_from_user(&t, rqtp, sizeof(t)))
|
|
|
|
- return -EFAULT;
|
|
|
|
-
|
|
|
|
- if ((t.tv_nsec >= 1000000000L) || (t.tv_nsec < 0) || (t.tv_sec < 0))
|
|
|
|
- return -EINVAL;
|
|
|
|
-
|
|
|
|
- expire = timespec_to_jiffies(&t) + (t.tv_sec || t.tv_nsec);
|
|
|
|
- expire = schedule_timeout_interruptible(expire);
|
|
|
|
-
|
|
|
|
- ret = 0;
|
|
|
|
- if (expire) {
|
|
|
|
- struct restart_block *restart;
|
|
|
|
- jiffies_to_timespec(expire, &t);
|
|
|
|
- if (rmtp && copy_to_user(rmtp, &t, sizeof(t)))
|
|
|
|
- return -EFAULT;
|
|
|
|
-
|
|
|
|
- restart = ¤t_thread_info()->restart_block;
|
|
|
|
- restart->fn = nanosleep_restart;
|
|
|
|
- restart->arg0 = jiffies + expire;
|
|
|
|
- restart->arg1 = (unsigned long) rmtp;
|
|
|
|
- ret = -ERESTART_RESTARTBLOCK;
|
|
|
|
- }
|
|
|
|
- return ret;
|
|
|
|
-}
|
|
|
|
-
|
|
|
|
/*
|
|
/*
|
|
* sys_sysinfo - fill in sysinfo struct
|
|
* sys_sysinfo - fill in sysinfo struct
|
|
*/
|
|
*/
|