lkml.org 
[lkml]   [2016]   [Nov]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    From
    Subject[patch 0/8] x86/tsc: Utilize TSC_ADJUST MSR
    The TSC_ADJUST MSR shows whether the TSC has been modified. This is helpful
    in two aspects:

    1) It allows to detect BIOS wreckage, where SMM code tries to 'hide' the
    cycles spent by storing the TSC value at SMM entry and restoring it at
    SMM exit. On affected machines the TSCs run slowly out of sync up to the
    point where the clocksource watchdog (if available) detects it.

    The TSC_ADJUST MSR allows to detect the TSC modification before that and
    eventually restore it. This is also important for SoCs which have no
    watchdog clocksource and therefore TSC wreckage cannot be detected and
    acted upon.

    2) All threads in a package are required to have the same TSC_ADJUST
    value. Broken BIOSes break that and as a result the TSC synchronization
    check fails.

    The TSC_ADJUST MSR allows to detect the deviation when a CPU comes
    online. If detected set it to the value of an already online CPU in the
    same package. This also allows to reduce the number of sync tests
    because with that in place the test is only required for the first CPU
    in a package.

    In principle all CPUs in a system should have the same TSC_ADJUST value
    even across packages, but with physical CPU hotplug this assumption is
    not true because the TSC starts with power on, so physical hotplug has
    to do some trickery to bring the TSC into sync with already running
    packages, which requires to use an TSC_ADJUST value different from CPUs
    which got powered earlier.

    A final enhancement is the opportunity to compensate for unsynced TSCs
    accross nodes at boot time and make the TSC usable that way. It won't
    help for TSCs which run apart due to frequency skew between packages,
    but this gets detected by the clocksource watchdog later.

    This patch series implements all of the avove.

    Thanks,

    tglx

    ---
    include/asm/tsc.h | 8 +
    kernel/Makefile | 2
    kernel/process.c | 1
    kernel/tsc.c | 16 ++-
    kernel/tsc_sync.c | 237 +++++++++++++++++++++++++++++++++++++++++++++++++++---
    5 files changed, 244 insertions(+), 20 deletions(-)



    \
     
     \ /
      Last update: 2016-11-19 14:51    [W:4.310 / U:0.092 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site