[PATCH] Fix regression added by ppoll/pselect code.

The compat layer timeout handling changes in:

9f72949f67

are busted.  This is most easily seen with an X application
that uses sub-second select/poll timeout such as emacs.  You
hit a key and it takes a second or so before the app responds.

The two ROUND_UP() calls upon entry are using {tv,ts}_sec where it
should instead be using {tv_usec,ts_nsec}, which perfectly explains
the observed incorrect behavior.

Another bug shot down with git bisect.

Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
David S. Miller 2006-01-19 16:40:42 -08:00 committed by Linus Torvalds
parent 0f36b018b2
commit 7e732bfc55

View file

@ -1743,7 +1743,7 @@ asmlinkage long compat_sys_select(int n, compat_ulong_t __user *inp,
if ((u64)tv.tv_sec >= (u64)MAX_INT64_SECONDS) if ((u64)tv.tv_sec >= (u64)MAX_INT64_SECONDS)
timeout = -1; /* infinite */ timeout = -1; /* infinite */
else { else {
timeout = ROUND_UP(tv.tv_sec, 1000000/HZ); timeout = ROUND_UP(tv.tv_usec, 1000000/HZ);
timeout += tv.tv_sec * HZ; timeout += tv.tv_sec * HZ;
} }
} }
@ -1884,7 +1884,7 @@ asmlinkage long compat_sys_ppoll(struct pollfd __user *ufds,
/* We assume that ts.tv_sec is always lower than /* We assume that ts.tv_sec is always lower than
the number of seconds that can be expressed in the number of seconds that can be expressed in
an s64. Otherwise the compiler bitches at us */ an s64. Otherwise the compiler bitches at us */
timeout = ROUND_UP(ts.tv_sec, 1000000000/HZ); timeout = ROUND_UP(ts.tv_nsec, 1000000000/HZ);
timeout += ts.tv_sec * HZ; timeout += ts.tv_sec * HZ;
} }