• Peter Zijlstra's avatar
    sched/clock: Fixup early initialization · d375b4e0
    Peter Zijlstra authored
    The code would assume sched_clock_stable() and switch to !stable
    later, this switch brings a discontinuity in time.
    
    The discontinuity on switching from stable to unstable was always
    present, but previously we would set stable/unstable before
    initializing TSC and usually stick to the one we start out with.
    
    So the static_key bits brought an extra switch where there previously
    wasn't one.
    
    Things are further complicated by the fact that we cannot use
    static_key as early as we usually call set_sched_clock_stable().
    
    Fix things by tracking the stable state in a regular variable and only
    set the static_key to the right state on sched_clock_init(), which is
    ran right after late_time_init->tsc_init().
    
    Before this we would not be using the TSC anyway.
    Reported-and-Tested-by: default avatarSasha Levin <sasha.levin@oracle.com>
    Reported-by: dyoung@redhat.com
    Fixes: 35af99e6 ("sched/clock, x86: Use a static_key for sched_clock_stable")
    Cc: jacob.jun.pan@linux.intel.com
    Cc: Mike Galbraith <bitbucket@online.de>
    Cc: hpa@zytor.com
    Cc: paulmck@linux.vnet.ibm.com
    Cc: John Stultz <john.stultz@linaro.org>
    Cc: Andy Lutomirski <luto@amacapital.net>
    Cc: Arjan van de Ven <arjan@linux.intel.com>
    Cc: lenb@kernel.org
    Cc: rjw@rjwysocki.net
    Cc: Eliezer Tamir <eliezer.tamir@linux.intel.com>
    Cc: rui.zhang@intel.com
    Signed-off-by: default avatarPeter Zijlstra <peterz@infradead.org>
    Link: http://lkml.kernel.org/r/20140122115918.GG3694@twins.programming.kicks-ass.netSigned-off-by: default avatarIngo Molnar <mingo@kernel.org>
    d375b4e0
clock.c 9.66 KB