lkml.org 
[lkml]   [2010]   [Mar]   [30]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[153/156] x86: Fix sched_clock_cpu for systems with unsynchronized TSC
    From: Dimitri Sivanich <sivanich@sgi.com>

    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
    up.

    Only set sched_clock_stable if tsc has not been marked unstable.

    Signed-off-by: Dimitri Sivanich <sivanich@sgi.com>
    Acked-by: Venkatesh Pallipadi <venkatesh.pallipadi@intel.com>
    Acked-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
    LKML-Reference: <20100301174815.GC8224@sgi.com>
    Signed-off-by: Ingo Molnar <mingo@elte.hu>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    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 01:27    [W:4.088 / U:0.024 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site