• Feng Tang's avatar
    x86/tsc: Disable clocksource watchdog for TSC on qualified platorms · b50db709
    Feng Tang authored
    There are cases that the TSC clocksource is wrongly judged as unstable by
    the clocksource watchdog mechanism which tries to validate the TSC against
    HPET, PM_TIMER or jiffies. While there is hardly a general reliable way to
    check the validity of a watchdog, Thomas Gleixner proposed [1]:
    
    "I'm inclined to lift that requirement when the CPU has:
    
        1) X86_FEATURE_CONSTANT_TSC
        2) X86_FEATURE_NONSTOP_TSC
        3) X86_FEATURE_NONSTOP_TSC_S3
        4) X86_FEATURE_TSC_ADJUST
        5) At max. 4 sockets
    
     After two decades of horrors we're finally at a point where TSC seems
     to be halfway reliable and less abused by BIOS tinkerers. TSC_ADJUST
     was really key as we can now detect even small modifications reliably
     and the important point is that we can cure them as well (not pretty
     but better than all other options)."
    
    As feature #3 X86_FEATURE_NONSTOP_TSC_S3 only exists on several generations
    of Atom processorz, and is always coupled with X86_FEATURE_CONSTANT_TSC
    and X86_FEATURE_NONSTOP_TSC, skip checking it, and also be more defensive
    to use maximal 2 sockets.
    
    The check is done inside tsc_init() before registering 'tsc-early' and
    'tsc' clocksources, as there were cases that both of them had been
    wrongly judged as unreliable.
    
    For more background of tsc/watchdog, there is a good summary in [2]
    
    [tglx} Update vs. jiffies:
    
      On systems where the only remaining clocksource aside of TSC is jiffies
      there is no way to make this work because that creates a circular
      dependency. Jiffies accuracy depends on not missing a periodic timer
      interrupt, which is not guaranteed. That could be detected by TSC, but as
      TSC is not trusted this cannot be compensated. The consequence is a
      circulus vitiosus which results in shutting down TSC and falling back to
      the jiffies clocksource which is even more unreliable.
    
    [1]. https://lore.kernel.org/lkml/87eekfk8bd.fsf@nanos.tec.linutronix.de/
    [2]. https://lore.kernel.org/lkml/87a6pimt1f.ffs@nanos.tec.linutronix.de/
    
    [ tglx: Refine comment and amend changelog ]
    
    Fixes: 6e3cd952 ("x86/hpet: Use another crystalball to evaluate HPET usability")
    Suggested-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Signed-off-by: default avatarFeng Tang <feng.tang@intel.com>
    Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
    Cc: "Paul E. McKenney" <paulmck@kernel.org>
    Cc: stable@vger.kernel.org
    Link: https://lore.kernel.org/r/20211117023751.24190-2-feng.tang@intel.com
    b50db709
tsc.c 40.2 KB