2006-02-17 04:08:57

by Ernst Herzberg

[permalink] [raw]
Subject: 2.6.16-rc3 macromedia flash regression...


.... 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 <[email protected]>
Date: Sat Feb 11 17:55:52 2006 -0800

[PATCH] select: fix returned timeval


Reverting the patch partial like

--- lx-2.6.16-rc3/fs/select.c 2006-02-17 04:35:10.000000000 +0100
+++ lx-2.6.16-rc3.old/fs/select.c 2006-02-17 04:44:00.000000000 +0100
@@ -404,8 +404,6 @@ 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)
- rtv = tv;
if (copy_to_user(tvp, &rtv, sizeof(rtv))) {
sticky:
/*
@@ -471,8 +469,6 @@ 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)
- rts = ts;
if (copy_to_user(tsp, &rts, sizeof(rts))) {
sticky:
/*

----------------------

fixed that, the player works again in normal speed.

The player is the newest from macromedia (7.0.61.0, gentoo ebuild), binary
only of course:( Reading the patch and the documentation of select() i think
the player is buggy... but works until 2.6.16-rc3

So what is your opinion? I think, macromedia should fix the player...

Thanks

<earny/>


2006-02-17 07:11:32

by Andrew Morton

[permalink] [raw]
Subject: Re: 2.6.16-rc3 macromedia flash regression...

Ernst Herzberg <[email protected]> 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 <[email protected]>
> Date: Sat Feb 11 17:55:52 2006 -0800
>
> [PATCH] select: fix returned timeval

Thanks for working that out.

Are you able to send along the relevant parts of the strace output, so we
see the select() inputs and outputs?

2006-02-17 07:24:31

by Andrew Morton

[permalink] [raw]
Subject: Re: 2.6.16-rc3 macromedia flash regression...

Ernst Herzberg <[email protected]> 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 <[email protected]>
> 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:
_

2006-02-17 19:37:41

by Ernst Herzberg

[permalink] [raw]
Subject: Re: 2.6.16-rc3 macromedia flash regression...

On Freitag 17 Februar 2006 08:10, Andrew Morton wrote:
> Ernst Herzberg <[email protected]> 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 <[email protected]>
> > Date: Sat Feb 11 17:55:52 2006 -0800
> >
> > [PATCH] select: fix returned timeval
>
> Thanks for working that out.
>
> Are you able to send along the relevant parts of the strace output, so
> we see the select() inputs and outputs?

The straces are available at

http://dev.net4u.de/~earny/flash_regression/

If someone want to debug this by itself should contact me private, i will
then setup an URL with the problematic swf.

Thanks

<earny/>

2006-02-17 19:38:17

by Ernst Herzberg

[permalink] [raw]
Subject: Re: 2.6.16-rc3 macromedia flash regression...

On Freitag 17 Februar 2006 08:23, Andrew Morton wrote:
> Ernst Herzberg <[email protected]> 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 <[email protected]>
> > 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:
> _

---------------------------

The patch does _not_ fix the problem.

sorry...
<earny/>

2006-02-17 21:17:41

by Andrew Morton

[permalink] [raw]
Subject: Re: 2.6.16-rc3 macromedia flash regression...

Ernst Herzberg <[email protected]> wrote:
>
> The patch does _not_ fix the problem.
>

Surprised. Could I ask that you double-check that the patch was applied
and that the right kernel was running?

2006-02-17 22:07:12

by Ernst Herzberg

[permalink] [raw]
Subject: Re: 2.6.16-rc3 macromedia flash regression...

On Friday 17 February 2006 22:16, Andrew Morton wrote:
> Ernst Herzberg <[email protected]> wrote:
> > The patch does _not_ fix the problem.
>
> Surprised. Could I ask that you double-check that the patch was applied
> and that the right kernel was running?

**doublechecked**, and..... you are right!

This patch __fixes__ the problem.

Thanks

<earny/>

2006-02-17 22:14:59

by Andrew Morton

[permalink] [raw]
Subject: Re: 2.6.16-rc3 macromedia flash regression...

Ernst Herzberg <[email protected]> wrote:
>
> On Friday 17 February 2006 22:16, Andrew Morton wrote:
> > Ernst Herzberg <[email protected]> wrote:
> > > The patch does _not_ fix the problem.
> >
> > Surprised. Could I ask that you double-check that the patch was applied
> > and that the right kernel was running?
>
> **doublechecked**, and..... you are right!
>
> This patch __fixes__ the problem.
>

Whew. I thought I was going mad ;)

Thanks for finding the bug.