diff options
author | Arjan van de Ven <arjan@linux.intel.com> | 2008-10-06 13:01:53 -0700 |
---|---|---|
committer | Ingo Molnar <mingo@elte.hu> | 2008-10-07 07:17:37 +0200 |
commit | 14e2acd8686507f8dee6d6269760d9ed145b2a89 (patch) | |
tree | 584303a35118e6819cdf50348cca8e8fecdb7697 /arch/alpha/kernel/osf_sys.c | |
parent | 96d2ab484e7a9bafdab44b8c7d1ef5944319b18c (diff) | |
download | blackbird-op-linux-14e2acd8686507f8dee6d6269760d9ed145b2a89.tar.gz blackbird-op-linux-14e2acd8686507f8dee6d6269760d9ed145b2a89.zip |
select: fix alpha OSF wrapper
... alpha calls the core select code from inside it's architecture
code for emulating OSF; this patch makes it compile again
Signed-off-by: Arjan van de Ven <arjan@linux.intel.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Diffstat (limited to 'arch/alpha/kernel/osf_sys.c')
-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 8509dad31204..8e19acbf2886 100644 --- a/arch/alpha/kernel/osf_sys.c +++ b/arch/alpha/kernel/osf_sys.c @@ -986,10 +986,12 @@ asmlinkage int osf_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, struct timeval32 __user *tvp) { - s64 timeout = MAX_SCHEDULE_TIMEOUT; + struct timespec end_time, *to = NULL; 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)) { @@ -999,14 +1001,13 @@ osf_select(int n, fd_set __user *inp, fd_set __user *outp, fd_set __user *exp, if (sec < 0 || usec < 0) return -EINVAL; - if ((unsigned long) sec < MAX_SELECT_SECONDS) { - timeout = (usec + 1000000/HZ - 1) / (1000000/HZ); - timeout += sec * (unsigned long) HZ; - } + if (poll_select_set_timeout(to, sec, usec * NSEC_PER_USEC)) + return -EINVAL; + } /* OSF does not copy back the remaining time. */ - return core_sys_select(n, inp, outp, exp, &timeout); + return core_sys_select(n, inp, outp, exp, to); } struct rusage32 { |