diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-23 13:53:02 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2008-10-23 13:53:02 -0400 |
commit | 1f6d6e8ebe73ba9d9d4c693f7f6f50f661dbd6e4 (patch) | |
tree | be7a2d20b1728da5a0d844a6f4cd382b2c2569fb /arch/alpha | |
parent | db563fc2e80534f98c7f9121a6f7dfe41f177a79 (diff) | |
parent | 268a3dcfea2077fca60d3715caa5c96f9b5e6ea7 (diff) |
Merge branch 'v28-range-hrtimers-for-linus-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip
* 'v28-range-hrtimers-for-linus-v2' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip: (37 commits)
hrtimers: add missing docbook comments to struct hrtimer
hrtimers: simplify hrtimer_peek_ahead_timers()
hrtimers: fix docbook comments
DECLARE_PER_CPU needs linux/percpu.h
hrtimers: fix typo
rangetimers: fix the bug reported by Ingo for real
rangetimer: fix BUG_ON reported by Ingo
rangetimer: fix x86 build failure for the !HRTIMERS case
select: fix alpha OSF wrapper
select: fix alpha OSF wrapper
hrtimer: peek at the timer queue just before going idle
hrtimer: make the futex() system call use the per process slack value
hrtimer: make the nanosleep() syscall use the per process slack
hrtimer: fix signed/unsigned bug in slack estimator
hrtimer: show the timer ranges in /proc/timer_list
hrtimer: incorporate feedback from Peter Zijlstra
hrtimer: add a hrtimer_start_range() function
hrtimer: another build fix
hrtimer: fix build bug found by Ingo
hrtimer: make select() and poll() use the hrtimer range feature
...
Diffstat (limited to 'arch/alpha')
-rw-r--r-- | arch/alpha/kernel/osf_sys.c | 13 |
1 files changed, 7 insertions, 6 deletions
diff --git a/arch/alpha/kernel/osf_sys.c b/arch/alpha/kernel/osf_sys.c index f25f6c490952..18a3ea1aac51 100644 --- a/arch/alpha/kernel/osf_sys.c +++ b/arch/alpha/kernel/osf_sys.c | |||
@@ -983,10 +983,12 @@ asmlinkage int | |||
983 | osf_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, | 983 | osf_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, |
984 | struct timeval32 __user *tvp) | 984 | struct timeval32 __user *tvp) |
985 | { | 985 | { |
986 | s64 timeout = MAX_SCHEDULE_TIMEOUT; | 986 | struct timespec end_time, *to = NULL; |
987 | if (tvp) { | 987 | if (tvp) { |
988 | time_t sec, usec; | 988 | time_t sec, usec; |
989 | 989 | ||
990 | to = &end_time; | ||
991 | |||
990 | if (!access_ok(VERIFY_READ, tvp, sizeof(*tvp)) | 992 | if (!access_ok(VERIFY_READ, tvp, sizeof(*tvp)) |
991 | || __get_user(sec, &tvp->tv_sec) | 993 | || __get_user(sec, &tvp->tv_sec) |
992 | || __get_user(usec, &tvp->tv_usec)) { | 994 | || __get_user(usec, &tvp->tv_usec)) { |
@@ -996,14 +998,13 @@ osf_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, | |||
996 | if (sec < 0 || usec < 0) | 998 | if (sec < 0 || usec < 0) |
997 | return -EINVAL; | 999 | return -EINVAL; |
998 | 1000 | ||
999 | if ((unsigned long) sec < MAX_SELECT_SECONDS) { | 1001 | if (poll_select_set_timeout(to, sec, usec * NSEC_PER_USEC)) |
1000 | timeout = (usec + 1000000/HZ - 1) / (1000000/HZ); | 1002 | return -EINVAL; |
1001 | timeout += sec * (unsigned long) HZ; | 1003 | |
1002 | } | ||
1003 | } | 1004 | } |
1004 | 1005 | ||
1005 | /* OSF does not copy back the remaining time. */ | 1006 | /* OSF does not copy back the remaining time. */ |
1006 | return core_sys_select(n, inp, outp, exp, &timeout); | 1007 | return core_sys_select(n, inp, outp, exp, to); |
1007 | } | 1008 | } |
1008 | 1009 | ||
1009 | struct rusage32 { | 1010 | struct rusage32 { |