Re: 2.6.16-rc3 macromedia flash regression...

From: Andrew Morton
Date: Fri Feb 17 2006 - 02:26:42 EST


Ernst Herzberg <list-lkml@xxxxxxxx> wrote:
>
> .... or not regession, that's the question.
>
> 2.6.16-rc2 works without problems.
>
> With -rc3 a .swf that opens a ip connection back to the server takes ages to
> load. strace shows that the player hangs for long times in select().
>
> Digging through the changelog brings up
>
> commit 643a654540579b0dcc7a206a4a7475276a41aff0
> Author: Andrew Morton <akpm@xxxxxxxx>
> Date: Sat Feb 11 17:55:52 2006 -0800
>
> [PATCH] select: fix returned timeval

y'know, when I sent that patch out to reviewers I said "Could you guys
please double-check this like hawks? Especially the handy-dandy new
timespec/timeval comparison functions. I invariably screw that sort of
thing up."

Does this help?


diff -puN fs/select.c~select-time-comparison-fixes fs/select.c
--- devel/fs/select.c~select-time-comparison-fixes 2006-02-16 23:17:54.000000000 -0800
+++ devel-akpm/fs/select.c 2006-02-16 23:19:21.000000000 -0800
@@ -404,7 +404,7 @@ asmlinkage long sys_select(int n, fd_set
goto sticky;
rtv.tv_usec = jiffies_to_usecs(do_div((*(u64*)&timeout), HZ));
rtv.tv_sec = timeout;
- if (timeval_compare(&rtv, &tv) < 0)
+ if (timeval_compare(&rtv, &tv) >= 0)
rtv = tv;
if (copy_to_user(tvp, &rtv, sizeof(rtv))) {
sticky:
@@ -471,7 +471,7 @@ asmlinkage long sys_pselect7(int n, fd_s
rts.tv_nsec = jiffies_to_usecs(do_div((*(u64*)&timeout), HZ)) *
1000;
rts.tv_sec = timeout;
- if (timespec_compare(&rts, &ts) < 0)
+ if (timespec_compare(&rts, &ts) >= 0)
rts = ts;
if (copy_to_user(tsp, &rts, sizeof(rts))) {
sticky:
@@ -775,7 +775,7 @@ asmlinkage long sys_ppoll(struct pollfd
rts.tv_nsec = jiffies_to_usecs(do_div((*(u64*)&timeout), HZ)) *
1000;
rts.tv_sec = timeout;
- if (timespec_compare(&rts, &ts) < 0)
+ if (timespec_compare(&rts, &ts) >= 0)
rts = ts;
if (copy_to_user(tsp, &rts, sizeof(rts))) {
sticky:
diff -puN fs/compat.c~select-time-comparison-fixes fs/compat.c
--- devel/fs/compat.c~select-time-comparison-fixes 2006-02-16 23:17:54.000000000 -0800
+++ devel-akpm/fs/compat.c 2006-02-16 23:19:33.000000000 -0800
@@ -1757,7 +1757,7 @@ asmlinkage long compat_sys_select(int n,
goto sticky;
rtv.tv_usec = jiffies_to_usecs(do_div((*(u64*)&timeout), HZ));
rtv.tv_sec = timeout;
- if (compat_timeval_compare(&rtv, &tv) < 0)
+ if (compat_timeval_compare(&rtv, &tv) >= 0)
rtv = tv;
if (copy_to_user(tvp, &rtv, sizeof(rtv))) {
sticky:
@@ -1834,7 +1834,7 @@ asmlinkage long compat_sys_pselect7(int
rts.tv_sec++;
rts.tv_nsec -= NSEC_PER_SEC;
}
- if (compat_timespec_compare(&rts, &ts) < 0)
+ if (compat_timespec_compare(&rts, &ts) >= 0)
rts = ts;
copy_to_user(tsp, &rts, sizeof(rts));
}
@@ -1934,7 +1934,7 @@ asmlinkage long compat_sys_ppoll(struct
rts.tv_nsec = jiffies_to_usecs(do_div((*(u64*)&timeout), HZ)) *
1000;
rts.tv_sec = timeout;
- if (compat_timespec_compare(&rts, &ts) < 0)
+ if (compat_timespec_compare(&rts, &ts) >= 0)
rts = ts;
if (copy_to_user(tsp, &rts, sizeof(rts))) {
sticky:
_

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/