From 8d4be8e12721f30897a1b9fc6d2b1b30007eb5ee Mon Sep 17 00:00:00 2001 From: Arjan van de Ven Date: Mon, 8 Sep 2008 08:58:59 -0700 Subject: [PATCH] --- yaml --- r: 117617 b: refs/heads/master c: 3bd012060f962567aadb52b27b2fc8fdc91102c7 h: refs/heads/master i: 117615: a10b27f66f181fb5c07568146917d72b9636e414 v: v3 --- [refs] | 2 +- trunk/arch/alpha/kernel/osf_sys.c | 13 ++++++------- trunk/kernel/hrtimer.c | 7 ++++++- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/[refs] b/[refs] index d7a13ec4d745..565cc0a2a318 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 14e2acd8686507f8dee6d6269760d9ed145b2a89 +refs/heads/master: 3bd012060f962567aadb52b27b2fc8fdc91102c7 diff --git a/trunk/arch/alpha/kernel/osf_sys.c b/trunk/arch/alpha/kernel/osf_sys.c index 8e19acbf2886..8509dad31204 100644 --- a/trunk/arch/alpha/kernel/osf_sys.c +++ b/trunk/arch/alpha/kernel/osf_sys.c @@ -986,12 +986,10 @@ asmlinkage int osf_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, struct timeval32 __user *tvp) { - struct timespec end_time, *to = NULL; + s64 timeout = MAX_SCHEDULE_TIMEOUT; if (tvp) { time_t sec, usec; - to = &end_time; - if (!access_ok(VERIFY_READ, tvp, sizeof(*tvp)) || __get_user(sec, &tvp->tv_sec) || __get_user(usec, &tvp->tv_usec)) { @@ -1001,13 +999,14 @@ osf_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, if (sec < 0 || usec < 0) return -EINVAL; - if (poll_select_set_timeout(to, sec, usec * NSEC_PER_USEC)) - return -EINVAL; - + if ((unsigned long) sec < MAX_SELECT_SECONDS) { + timeout = (usec + 1000000/HZ - 1) / (1000000/HZ); + timeout += sec * (unsigned long) HZ; + } } /* OSF does not copy back the remaining time. */ - return core_sys_select(n, inp, outp, exp, to); + return core_sys_select(n, inp, outp, exp, &timeout); } struct rusage32 { diff --git a/trunk/kernel/hrtimer.c b/trunk/kernel/hrtimer.c index a0222097c57e..9a4c90185566 100644 --- a/trunk/kernel/hrtimer.c +++ b/trunk/kernel/hrtimer.c @@ -1563,9 +1563,14 @@ long hrtimer_nanosleep(struct timespec *rqtp, struct timespec __user *rmtp, struct restart_block *restart; struct hrtimer_sleeper t; int ret = 0; + unsigned long slack; + + slack = current->timer_slack_ns; + if (rt_task(current)) + slack = 0; hrtimer_init_on_stack(&t.timer, clockid, mode); - hrtimer_set_expires(&t.timer, timespec_to_ktime(*rqtp)); + hrtimer_set_expires_range_ns(&t.timer, timespec_to_ktime(*rqtp), slack); if (do_nanosleep(&t, mode)) goto out;