2009-06-01 09:02:50

by Luming Yu

[permalink] [raw]
Subject: [RFC patch] reset TSC at the begining of check_tsc_warp

Hello,

Without this patch, we always get kernel warning that TSC warp between CPUs,
and TSC is marked unstable due to check_tsc_sync_source failed if the CPUs
have the problem of not-synced initial TSC.

It hurts CPUs with constant-tsc feature, but with unsynced initial TSC value...

The downside is we could break perfect synced TSC with this patch.
Please review, test and apply.

**The patch is enclosed in text attachment*
**Using web client to send the patch* *
**below is c&p just for review, please apply attached patch*/

Thanks,
Luming



Signed-off-by: Yu Luming <[email protected]>

tsc_sync.c | 1 +
1 file changed, 1 insertion(+)


diff --git a/arch/x86/kernel/tsc_sync.c b/arch/x86/kernel/tsc_sync.c
index bf36328..190c1b0 100644
--- a/arch/x86/kernel/tsc_sync.c
+++ b/arch/x86/kernel/tsc_sync.c
@@ -46,6 +46,7 @@ static __cpuinit void check_tsc_warp(void)
cycles_t start, now, prev, end;
int i;

+ wrmsrl(MSR_IA32_TSC, 0);
rdtsc_barrier();
start = get_cycles();
rdtsc_barrier();


Attachments:
2.patch (360.00 B)

2009-06-01 23:10:19

by Frans Pop

[permalink] [raw]
Subject: Re: [RFC patch] reset TSC at the begining of check_tsc_warp

Luming Yu wrote:
> Without this patch, we always get kernel warning that TSC warp between
> CPUs, and TSC is marked unstable due to check_tsc_sync_source failed if
> the CPUs have the problem of not-synced initial TSC.
>
> It hurts CPUs with constant-tsc feature, but with unsynced initial TSC
> value...
>
> The downside is we could break perfect synced TSC with this patch.
> Please review, test and apply.

I've tested this on my desktop (working TSC) and my laptop (non-working TSC).
On both machines the patch didn't make any difference.

Desktop: Intel mainboard, ICH7 chipset, dual core Pentium D 3.20GHz
$ dmesg | grep -i tsc
Fast TSC calibration using PIT
checking TSC synchronization [CPU#0 -> CPU#1]: passed.

Laptop: HP 2510p notebook, ICH8 chipset, Core2 Duo 1.33GHz
$ dmesg | grep -i tsc
Fast TSC calibration using PIT
checking TSC synchronization [CPU#0 -> CPU#1]: passed.
Marking TSC unstable due to TSC halts in idle
Clocksource tsc unstable (delta = -98164364 ns)

Tested on top of today's mainline git.

Cheers,
FJP

2009-06-02 07:05:59

by Luming Yu

[permalink] [raw]
Subject: Re: [RFC patch] reset TSC at the begining of check_tsc_warp

On Tue, Jun 2, 2009 at 7:10 AM, Frans Pop <[email protected]> wrote:
> Luming Yu wrote:
>> Without this patch, we always get kernel warning that TSC warp between
>> CPUs, and TSC is marked unstable due to check_tsc_sync_source failed if
>> the CPUs have the problem of not-synced initial TSC.
>>
>> It hurts CPUs with constant-tsc feature, but with unsynced initial TSC
>> value...
>>
>> The downside is we could break perfect synced TSC with this patch.
>> Please review, test and apply.
>
> I've tested this on my desktop (working TSC) and my laptop (non-working TSC).
> On both machines the patch didn't make any difference.

Thanks for testing, but if there was no warnings like
"Measured 439164 cycles TSC warp between CPUs, turning off TSC clock."
the patch won't help....

--Luming

2009-06-02 07:54:58

by Andi Kleen

[permalink] [raw]
Subject: Re: [RFC patch] reset TSC at the begining of check_tsc_warp

Luming Yu <[email protected]> writes:

> Hello,
>
> Without this patch, we always get kernel warning that TSC warp between CPUs,
> and TSC is marked unstable due to check_tsc_sync_source failed if the CPUs
> have the problem of not-synced initial TSC.
>
> It hurts CPUs with constant-tsc feature, but with unsynced initial TSC value...
>
> The downside is we could break perfect synced TSC with this patch.

s/could/will definitely/

So you're hurting the good systems for one buggy box. I don't think
that's a good idea.

Possible alternatives:
- black list that system with DMI
- try to detect it by checking constant_tsc and still unsynchronized TSC
- just give up and say the system won't be able to use TSC unless the BIOS
fixes its act.

The third option is probably not the worst.

-Andi

--
[email protected] -- Speaking for myself only.

2009-06-02 08:29:17

by Luming Yu

[permalink] [raw]
Subject: Re: [RFC patch] reset TSC at the begining of check_tsc_warp

>
> So you're hurting the good systems for one buggy box. I don't think
> that's a good idea.

Yes, the patch should be polished to avoid already-perfect-synced-tsc
case...the whole point of this patch is trying to improve , not damage...
Although I'm not quite sure how much diff the patch could
introduce...,given execution of
the function has already synced between CPUs....But this should be
another topic..