[lkml]   [2010]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
    Patch in this message
    Subject[115/116] x86: Fix sched_clock_cpu for systems with unsynchronized TSC
    2.6.32-stable review patch.  If anyone has any objections, please let us know.


    From: Dimitri Sivanich <>

    commit 14be1f7454ea96ee614467a49cf018a1a383b189 upstream.

    On UV systems, the TSC is not synchronized across blades. The
    sched_clock_cpu() function is returning values that can go
    backwards (I've seen as much as 8 seconds) when switching
    between cpus.

    As each cpu comes up, early_init_intel() will currently set the
    sched_clock_stable flag true. When mark_tsc_unstable() runs, it
    clears the flag, but this only occurs once (the first time a cpu
    comes up whose TSC is not synchronized with cpu 0). After this,
    early_init_intel() will set the flag again as the next cpu comes

    Only set sched_clock_stable if tsc has not been marked unstable.

    Signed-off-by: Dimitri Sivanich <>
    Acked-by: Venkatesh Pallipadi <>
    Acked-by: Peter Zijlstra <>
    LKML-Reference: <>
    Signed-off-by: Ingo Molnar <>
    Signed-off-by: Greg Kroah-Hartman <>

    arch/x86/kernel/cpu/intel.c | 3 ++-
    1 file changed, 2 insertions(+), 1 deletion(-)

    --- a/arch/x86/kernel/cpu/intel.c
    +++ b/arch/x86/kernel/cpu/intel.c
    @@ -70,7 +70,8 @@ static void __cpuinit early_init_intel(s
    if (c->x86_power & (1 << 8)) {
    set_cpu_cap(c, X86_FEATURE_CONSTANT_TSC);
    set_cpu_cap(c, X86_FEATURE_NONSTOP_TSC);
    - sched_clock_stable = 1;
    + if (!check_tsc_unstable())
    + sched_clock_stable = 1;


     \ /
      Last update: 2010-03-31 02:01    [W:3.192 / U:0.044 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site