Messages in this thread Patch in this message |  | | | Date | Sat, 6 Sep 2008 22:58:02 +0200 (CEST) | | From | Thomas Gleixner <> | | Subject | Re: [RFC patch 0/4] TSC calibration improvements | |
On Sat, 6 Sep 2008, Linus Torvalds wrote:
>
>
> On Sat, 6 Sep 2008, Thomas Gleixner wrote:
> >
> > Just checked. The -tip version still has the expect-- in the for()
> > which might lead to stupid results depending on the gcc madness level.
>
> Umm. What? You're on some odd drugs.
Just straight forward german beer :)
diff --git a/arch/x86/kernel/tsc.c b/arch/x86/kernel/tsc.c
index 6dab90f..3bfe083 100644
--- a/arch/x86/kernel/tsc.c
+++ b/arch/x86/kernel/tsc.c
@@ -310,8 +310,8 @@ static unsigned long quick_pit_calibrate(void)
unsigned char expect = 0xfe;
t1 = get_cycles();
for (i = 0; i < QUICK_PIT_ITERATIONS; i++, expect--) {
if (!pit_expect_msb(expect))
goto failed;
}
t2 = get_cycles();
/*
* Make sure we can rely on the second TSC timestamp:
*/
if (!pit_expect_msb(--expect))
goto failed;
Where is a guarantee, that excpect is not decremented before we break
out of the loop ?
the "expect--" can be done _BEFORE_ the i < QUICK_PIT_ITERATIONS
evaluation. Not likely, but ...
This version works always
t1 = get_cycles();
for (i = 0; i < QUICK_PIT_ITERATIONS; i++) {
if (!pit_expect_msb(expect--))
goto failed;
}
t2 = get_cycles();
/*
* Make sure we can rely on the second TSC timestamp:
*/
if (!pit_expect_msb(expect))
goto failed;
Thanks,
tglx
|  |