From: Thomas Gleixner <tglx@linutronix.de>
To: LKML <linux-kernel@vger.kernel.org>
Cc: Ingo Molnar <mingo@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
x86@kernel.org, Borislav Petkov <bp@alien8.de>,
Yinghai Lu <yinghai@kernel.org>
Subject: [patch 0/8] x86/tsc: Utilize TSC_ADJUST MSR
Date: Sat, 19 Nov 2016 13:47:32 -0000 [thread overview]
Message-ID: <20161119133816.633700010@linutronix.de> (raw)
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(-)
next reply other threads:[~2016-11-19 13:51 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-11-19 13:47 Thomas Gleixner [this message]
2016-11-19 13:47 ` [patch 1/8] x86/tsc: Use X86_FEATURE_TSC_ADJUST in detect_art() Thomas Gleixner
2016-11-29 16:46 ` [tip:x86/timers] " tip-bot for Thomas Gleixner
2016-11-29 18:28 ` tip-bot for Thomas Gleixner
2016-11-19 13:47 ` [patch 2/8] x86/tsc: Detect random warps Thomas Gleixner
2016-11-29 16:46 ` [tip:x86/timers] " tip-bot for Thomas Gleixner
2016-11-29 18:28 ` tip-bot for Thomas Gleixner
2016-11-19 13:47 ` [patch 3/8] x86/tsc: Store and check TSC ADJUST MSR Thomas Gleixner
2016-11-29 16:47 ` [tip:x86/timers] " tip-bot for Thomas Gleixner
2016-11-29 18:29 ` tip-bot for Thomas Gleixner
2017-01-27 13:36 ` [3/8] " Henning Schild
2017-01-30 10:20 ` Thomas Gleixner
2017-01-30 12:13 ` Henning Schild
2017-01-30 13:04 ` Thomas Gleixner
2017-01-30 15:58 ` Borislav Petkov
2016-11-19 13:47 ` [patch 4/8] x86/tsc: Verify TSC_ADJUST from idle Thomas Gleixner
2016-11-20 13:10 ` Peter Zijlstra
2016-11-21 8:16 ` Thomas Gleixner
2016-11-21 11:06 ` Peter Zijlstra
2016-11-29 9:17 ` Thomas Gleixner
2016-11-29 14:25 ` Ingo Molnar
2016-11-21 22:57 ` Andi Kleen
2016-11-29 16:47 ` [tip:x86/timers] " tip-bot for Thomas Gleixner
2016-11-29 18:29 ` tip-bot for Thomas Gleixner
2016-11-19 13:47 ` [patch 5/8] x86/tsc: Sync test only for the first cpu in a package Thomas Gleixner
2016-11-29 16:48 ` [tip:x86/timers] " tip-bot for Thomas Gleixner
2016-11-29 18:30 ` tip-bot for Thomas Gleixner
2016-11-19 13:47 ` [patch 6/8] x86/tsc: Move sync cleanup to a safe place Thomas Gleixner
2016-11-29 16:48 ` [tip:x86/timers] " tip-bot for Thomas Gleixner
2016-11-29 18:30 ` tip-bot for Thomas Gleixner
2016-11-19 13:47 ` [patch 7/8] x86/tsc: Prepare warp test for TSC adjustment Thomas Gleixner
2016-11-29 16:49 ` [tip:x86/timers] " tip-bot for Thomas Gleixner
2016-11-29 18:31 ` tip-bot for Thomas Gleixner
2016-11-19 13:47 ` [patch 8/8] x86/tsc: Try to adjust TSC if sync test fails Thomas Gleixner
2016-11-29 16:49 ` [tip:x86/timers] " tip-bot for Thomas Gleixner
2016-11-29 18:31 ` tip-bot for Thomas Gleixner
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20161119133816.633700010@linutronix.de \
--to=tglx@linutronix.de \
--cc=bp@alien8.de \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=x86@kernel.org \
--cc=yinghai@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome