2007-05-15 05:09:21

by Andrew Morton

[permalink] [raw]
Subject: Re: [Bugme-new] [Bug 8479] New: gettimeofday returning 1000000 in tv_usec on core2duo

On Mon, 14 May 2007 21:17:47 -0700 [email protected] wrote:

> http://bugzilla.kernel.org/show_bug.cgi?id=8479
>
> Summary: gettimeofday returning 1000000 in tv_usec on core2duo
> Kernel Version: 2.6.21
> Status: NEW
> Severity: normal
> Owner: [email protected]
> Submitter: [email protected]
>
>
> Most recent kernel where this bug did *NOT* occur: 2.6.20
> Distribution: Gentoo
> Hardware Environment: core2duo T7200 (all reporters had this same CPU)
> Software Environment: Linux 2.6.21, glibc 2.5
> Problem Description:
>
> gettimeofday returns 1 - 1000000 in tv_usec, not 0 - 999999
> This does not happen on any of my AMD-based 32 or 64 bit boxes, only on my
> core2duo; I have 2 other reports of this problem, all on T7200's
>
> Steps to reproduce:
>
> call gettimeofday a lot. Eventually, you'll get 1000000 returned in tv_usec. My
> average is ~1 in 1000000 calls. I've attached my test program, with output from
> various boxes. One of the other reporters tried the test program too, and got
> similar output. .config will be attached too.

err, whoops.


2007-05-15 06:07:55

by Eric Dumazet

[permalink] [raw]
Subject: Re: [Bugme-new] [Bug 8479] New: gettimeofday returning 1000000 in tv_usec on core2duo

Andrew Morton a ?crit :
> On Mon, 14 May 2007 21:17:47 -0700 [email protected] wrote:
>
>> http://bugzilla.kernel.org/show_bug.cgi?id=8479
>>
>> Summary: gettimeofday returning 1000000 in tv_usec on core2duo
>> Kernel Version: 2.6.21
>> Status: NEW
>> Severity: normal
>> Owner: [email protected]
>> Submitter: [email protected]
>>
>>
>> Most recent kernel where this bug did *NOT* occur: 2.6.20
>> Distribution: Gentoo
>> Hardware Environment: core2duo T7200 (all reporters had this same CPU)
>> Software Environment: Linux 2.6.21, glibc 2.5
>> Problem Description:
>>
>> gettimeofday returns 1 - 1000000 in tv_usec, not 0 - 999999
>> This does not happen on any of my AMD-based 32 or 64 bit boxes, only on my
>> core2duo; I have 2 other reports of this problem, all on T7200's
>>
>> Steps to reproduce:
>>
>> call gettimeofday a lot. Eventually, you'll get 1000000 returned in tv_usec. My
>> average is ~1 in 1000000 calls. I've attached my test program, with output from
>> various boxes. One of the other reporters tried the test program too, and got
>> similar output. .config will be attached too.
>
> err, whoops.

I remember I already hit this and corrected it

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blobdiff;f=arch/x86_64/kernel/vsyscall.c;h=dc32cef961950915fbaa185e36ab802d5f7cea3b;hp=ba330f87067996a17495f7d03466d646c718b52c;hb=c8118c6c07f2edfd697aaa0b93e08c3b65a5a675;hpb=272a3713bb9e302e0455c894c41180a482d2c8a3

Maybe a stable push is necessary ?


2007-05-15 06:27:39

by Andrew Morton

[permalink] [raw]
Subject: Re: [Bugme-new] [Bug 8479] New: gettimeofday returning 1000000 in tv_usec on core2duo

On Tue, 15 May 2007 08:06:52 +0200 Eric Dumazet <[email protected]> wrote:

> Andrew Morton a ?crit :
> > On Mon, 14 May 2007 21:17:47 -0700 [email protected] wrote:
> >
> >> http://bugzilla.kernel.org/show_bug.cgi?id=8479
> >>
> >> Summary: gettimeofday returning 1000000 in tv_usec on core2duo
> >> Kernel Version: 2.6.21
> >> Status: NEW
> >> Severity: normal
> >> Owner: [email protected]
> >> Submitter: [email protected]
> >>
> >>
> >> Most recent kernel where this bug did *NOT* occur: 2.6.20
> >> Distribution: Gentoo
> >> Hardware Environment: core2duo T7200 (all reporters had this same CPU)
> >> Software Environment: Linux 2.6.21, glibc 2.5
> >> Problem Description:
> >>
> >> gettimeofday returns 1 - 1000000 in tv_usec, not 0 - 999999
> >> This does not happen on any of my AMD-based 32 or 64 bit boxes, only on my
> >> core2duo; I have 2 other reports of this problem, all on T7200's
> >>
> >> Steps to reproduce:
> >>
> >> call gettimeofday a lot. Eventually, you'll get 1000000 returned in tv_usec. My
> >> average is ~1 in 1000000 calls. I've attached my test program, with output from
> >> various boxes. One of the other reporters tried the test program too, and got
> >> similar output. .config will be attached too.
> >
> > err, whoops.
>
> I remember I already hit this and corrected it
>
> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blobdiff;f=arch/x86_64/kernel/vsyscall.c;h=dc32cef961950915fbaa185e36ab802d5f7cea3b;hp=ba330f87067996a17495f7d03466d646c718b52c;hb=c8118c6c07f2edfd697aaa0b93e08c3b65a5a675;hpb=272a3713bb9e302e0455c894c41180a482d2c8a3

Oh, OK.

> Maybe a stable push is necessary ?

yup. Please always think of -stable when preparing fixes. I'm sure many
useful fixes are slipping past simply because those who _are_ looking out
for backportable fixes are missing things.

Greg, Chris: please consider c8118c6c07f2edfd697aaa0b93e08c3b65a5a675
for -stable, if it isn't already there.

2007-05-15 07:23:18

by Andi Kleen

[permalink] [raw]
Subject: Re: [Bugme-new] [Bug 8479] New: gettimeofday returning 1000000 in tv_usec on core2duo


> >
> > I remember I already hit this and corrected it
> >
> > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blobdi
> >ff;f=arch/x86_64/kernel/vsyscall.c;h=dc32cef961950915fbaa185e36ab802d5f7ce
> >a3b;hp=ba330f87067996a17495f7d03466d646c718b52c;hb=c8118c6c07f2edfd697aaa0
> >b93e08c3b65a5a675;hpb=272a3713bb9e302e0455c894c41180a482d2c8a3
>
> Oh, OK.
>
> > Maybe a stable push is necessary ?
>
> yup. Please always think of -stable when preparing fixes. I'm sure many
> useful fixes are slipping past simply because those who _are_ looking out
> for backportable fixes are missing things.
>
> Greg, Chris: please consider c8118c6c07f2edfd697aaa0b93e08c3b65a5a675
> for -stable, if it isn't already there.

The full patch is overkill because 99% of it is an totally unrelated
optimization. Only the > -> >= change should be backported

-Andi

2007-05-15 09:08:20

by Eric Dumazet

[permalink] [raw]
Subject: Re: [Bugme-new] [Bug 8479] New: gettimeofday returning 1000000 in tv_usec on core2duo

On Tue, 15 May 2007 09:22:47 +0200
Andi Kleen <[email protected]> wrote:

>
> > >
> > > I remember I already hit this and corrected it
> > >
> > > http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blobdi
> > >ff;f=arch/x86_64/kernel/vsyscall.c;h=dc32cef961950915fbaa185e36ab802d5f7ce
> > >a3b;hp=ba330f87067996a17495f7d03466d646c718b52c;hb=c8118c6c07f2edfd697aaa0
> > >b93e08c3b65a5a675;hpb=272a3713bb9e302e0455c894c41180a482d2c8a3
> >
> > Oh, OK.
> >
> > > Maybe a stable push is necessary ?
> >
> > yup. Please always think of -stable when preparing fixes. I'm sure many
> > useful fixes are slipping past simply because those who _are_ looking out
> > for backportable fixes are missing things.
> >
> > Greg, Chris: please consider c8118c6c07f2edfd697aaa0b93e08c3b65a5a675
> > for -stable, if it isn't already there.
>
> The full patch is overkill because 99% of it is an totally unrelated
> optimization. Only the > -> >= change should be backported

OK, here is the fix only patch, for linux-2.6.21-stable only, since 2.6.22 is already fixed.

[PATCH] x86_64 : Fix vgettimeofday()

vgettimeofday() may return some bad timeval values, (tv_usec = 1000000), because of a wrong compare.

Signed-off-by: Eric Dumazet <[email protected]>

--- arch/x86_64/kernel/vsyscall.c
+++ arch/x86_64/kernel/vsyscall.c
@@ -132,7 +132,7 @@ static __always_inline void do_vgettimeo

/* convert to usecs and add to timespec: */
tv->tv_usec += nsec_delta / NSEC_PER_USEC;
- while (tv->tv_usec > USEC_PER_SEC) {
+ while (tv->tv_usec >= USEC_PER_SEC) {
tv->tv_sec += 1;
tv->tv_usec -= USEC_PER_SEC;
}

2007-05-15 15:02:40

by Daniel Gryniewicz

[permalink] [raw]
Subject: Re: [Bugme-new] [Bug 8479] New: gettimeofday returning 1000000 in tv_usec on core2duo

On Tue, 2007-05-15 at 10:17 +0200, Eric Dumazet wrote:
> OK, here is the fix only patch, for linux-2.6.21-stable only, since 2.6.22 is already fixed.
>
> [PATCH] x86_64 : Fix vgettimeofday()
>
> vgettimeofday() may return some bad timeval values, (tv_usec = 1000000), because of a wrong compare.
>
> Signed-off-by: Eric Dumazet <[email protected]>
>
> --- arch/x86_64/kernel/vsyscall.c
> +++ arch/x86_64/kernel/vsyscall.c
> @@ -132,7 +132,7 @@ static __always_inline void do_vgettimeo
>
> /* convert to usecs and add to timespec: */
> tv->tv_usec += nsec_delta / NSEC_PER_USEC;
> - while (tv->tv_usec > USEC_PER_SEC) {
> + while (tv->tv_usec >= USEC_PER_SEC) {
> tv->tv_sec += 1;
> tv->tv_usec -= USEC_PER_SEC;
> }

That fixed it, thanks.

Daniel

2007-05-19 14:33:30

by Bill Davidsen

[permalink] [raw]
Subject: Re: [Bugme-new] [Bug 8479] New: gettimeofday returning 1000000 in tv_usec on core2duo

Andrew Morton wrote:
> On Tue, 15 May 2007 08:06:52 +0200 Eric Dumazet <[email protected]> wrote:
>
>> Andrew Morton a ?crit :
>>> On Mon, 14 May 2007 21:17:47 -0700 [email protected] wrote:
>>>
>>>> http://bugzilla.kernel.org/show_bug.cgi?id=8479
>>>>
>>>> Summary: gettimeofday returning 1000000 in tv_usec on core2duo
>>>> Kernel Version: 2.6.21
>>>> Status: NEW
>>>> Severity: normal
>>>> Owner: [email protected]
>>>> Submitter: [email protected]
>>>>
>>>>
>>>> Most recent kernel where this bug did *NOT* occur: 2.6.20
>>>> Distribution: Gentoo
>>>> Hardware Environment: core2duo T7200 (all reporters had this same CPU)
>>>> Software Environment: Linux 2.6.21, glibc 2.5
>>>> Problem Description:
>>>>
>>>> gettimeofday returns 1 - 1000000 in tv_usec, not 0 - 999999
>>>> This does not happen on any of my AMD-based 32 or 64 bit boxes, only on my
>>>> core2duo; I have 2 other reports of this problem, all on T7200's
>>>>
>>>> Steps to reproduce:
>>>>
>>>> call gettimeofday a lot. Eventually, you'll get 1000000 returned in tv_usec. My
>>>> average is ~1 in 1000000 calls. I've attached my test program, with output from
>>>> various boxes. One of the other reporters tried the test program too, and got
>>>> similar output. .config will be attached too.
>>> err, whoops.
>> I remember I already hit this and corrected it
>>
>> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blobdiff;f=arch/x86_64/kernel/vsyscall.c;h=dc32cef961950915fbaa185e36ab802d5f7cea3b;hp=ba330f87067996a17495f7d03466d646c718b52c;hb=c8118c6c07f2edfd697aaa0b93e08c3b65a5a675;hpb=272a3713bb9e302e0455c894c41180a482d2c8a3
>
> Oh, OK.
>
>> Maybe a stable push is necessary ?
>
> yup. Please always think of -stable when preparing fixes. I'm sure many
> useful fixes are slipping past simply because those who _are_ looking out
> for backportable fixes are missing things.
>
That makes me feel better, I have been occasionally suggesting fixes
posted here as candidates for stable, I was afraid I was being a PITA. I
forgot about the "stable" address and have been bugging greg, I'll stop
that.

> Greg, Chris: please consider c8118c6c07f2edfd697aaa0b93e08c3b65a5a675
> for -stable, if it isn't already there.


--
Bill Davidsen <[email protected]>
"We have more to fear from the bungling of the incompetent than from
the machinations of the wicked." - from Slashdot

2007-05-19 18:04:22

by Eric Dumazet

[permalink] [raw]
Subject: Re: [Bugme-new] [Bug 8479] New: gettimeofday returning 1000000 in tv_usec on core2duo

Bill Davidsen a ?crit :
> Andrew Morton wrote:
>> On Tue, 15 May 2007 08:06:52 +0200 Eric Dumazet <[email protected]>
>> wrote:
>>
>>> Andrew Morton a ?crit :
>>>> On Mon, 14 May 2007 21:17:47 -0700 [email protected]
>>>> wrote:
>>>>
>>>>> http://bugzilla.kernel.org/show_bug.cgi?id=8479
>>>>>
>>>>> Summary: gettimeofday returning 1000000 in tv_usec on
>>>>> core2duo
>>>>> Kernel Version: 2.6.21
>>>>> Status: NEW
>>>>> Severity: normal
>>>>> Owner: [email protected]
>>>>> Submitter: [email protected]
>>>>>
>>>>>
>>>>> Most recent kernel where this bug did *NOT* occur: 2.6.20
>>>>> Distribution: Gentoo
>>>>> Hardware Environment: core2duo T7200 (all reporters had this same CPU)
>>>>> Software Environment: Linux 2.6.21, glibc 2.5
>>>>> Problem Description:
>>>>>
>>>>> gettimeofday returns 1 - 1000000 in tv_usec, not 0 - 999999 This
>>>>> does not happen on any of my AMD-based 32 or 64 bit boxes, only on my
>>>>> core2duo; I have 2 other reports of this problem, all on T7200's
>>>>>
>>>>> Steps to reproduce:
>>>>>
>>>>> call gettimeofday a lot. Eventually, you'll get 1000000 returned
>>>>> in tv_usec. My
>>>>> average is ~1 in 1000000 calls. I've attached my test program,
>>>>> with output from
>>>>> various boxes. One of the other reporters tried the test program
>>>>> too, and got
>>>>> similar output. .config will be attached too.
>>>> err, whoops.
>>> I remember I already hit this and corrected it
>>>
>>> http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=blobdiff;f=arch/x86_64/kernel/vsyscall.c;h=dc32cef961950915fbaa185e36ab802d5f7cea3b;hp=ba330f87067996a17495f7d03466d646c718b52c;hb=c8118c6c07f2edfd697aaa0b93e08c3b65a5a675;hpb=272a3713bb9e302e0455c894c41180a482d2c8a3
>>>
>>
>> Oh, OK.
>>
>>> Maybe a stable push is necessary ?
>>
>> yup. Please always think of -stable when preparing fixes. I'm sure many
>> useful fixes are slipping past simply because those who _are_ looking out
>> for backportable fixes are missing things.
>>
> That makes me feel better, I have been occasionally suggesting fixes
> posted here as candidates for stable, I was afraid I was being a PITA. I
> forgot about the "stable" address and have been bugging greg, I'll stop
> that.

Well, it seems Andrew concern about 'stable' was not right for this particular
patch, since I posted it well before 2.6.21-final, and 2.6.20 was not concerned.