From 18c4537358bd6f641cadcc4157daae037f7f7d48 Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Mon, 27 May 2024 20:18:25 +0200 Subject: [PATCH] 5.4-stable patches added patches: x86-tsc-trust-initial-offset-in-architectural-tsc-adjust-msrs.patch --- queue-5.4/series | 1 + ...set-in-architectural-tsc-adjust-msrs.patch | 46 +++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 queue-5.4/x86-tsc-trust-initial-offset-in-architectural-tsc-adjust-msrs.patch diff --git a/queue-5.4/series b/queue-5.4/series index 741c8a72422..8ccb891951b 100644 --- a/queue-5.4/series +++ b/queue-5.4/series @@ -1,3 +1,4 @@ +x86-tsc-trust-initial-offset-in-architectural-tsc-adjust-msrs.patch tty-n_gsm-fix-possible-out-of-bounds-in-gsm0_receive.patch speakup-fix-sizeof-vs-array_size-bug.patch ring-buffer-fix-a-race-between-readers-and-resize-checks.patch diff --git a/queue-5.4/x86-tsc-trust-initial-offset-in-architectural-tsc-adjust-msrs.patch b/queue-5.4/x86-tsc-trust-initial-offset-in-architectural-tsc-adjust-msrs.patch new file mode 100644 index 00000000000..928977314eb --- /dev/null +++ b/queue-5.4/x86-tsc-trust-initial-offset-in-architectural-tsc-adjust-msrs.patch @@ -0,0 +1,46 @@ +From 455f9075f14484f358b3c1d6845b4a438de198a7 Mon Sep 17 00:00:00 2001 +From: Daniel J Blueman +Date: Fri, 19 Apr 2024 16:51:46 +0800 +Subject: x86/tsc: Trust initial offset in architectural TSC-adjust MSRs + +From: Daniel J Blueman + +commit 455f9075f14484f358b3c1d6845b4a438de198a7 upstream. + +When the BIOS configures the architectural TSC-adjust MSRs on secondary +sockets to correct a constant inter-chassis offset, after Linux brings the +cores online, the TSC sync check later resets the core-local MSR to 0, +triggering HPET fallback and leading to performance loss. + +Fix this by unconditionally using the initial adjust values read from the +MSRs. Trusting the initial offsets in this architectural mechanism is a +better approach than special-casing workarounds for specific platforms. + +Signed-off-by: Daniel J Blueman +Signed-off-by: Thomas Gleixner +Reviewed-by: Steffen Persvold +Reviewed-by: James Cleverdon +Reviewed-by: Dimitri Sivanich +Reviewed-by: Prarit Bhargava +Link: https://lore.kernel.org/r/20240419085146.175665-1-daniel@quora.org +Signed-off-by: Greg Kroah-Hartman +--- + arch/x86/kernel/tsc_sync.c | 6 ++---- + 1 file changed, 2 insertions(+), 4 deletions(-) + +--- a/arch/x86/kernel/tsc_sync.c ++++ b/arch/x86/kernel/tsc_sync.c +@@ -192,11 +192,9 @@ bool tsc_store_and_check_tsc_adjust(bool + cur->warned = false; + + /* +- * If a non-zero TSC value for socket 0 may be valid then the default +- * adjusted value cannot assumed to be zero either. ++ * The default adjust value cannot be assumed to be zero on any socket. + */ +- if (tsc_async_resets) +- cur->adjusted = bootval; ++ cur->adjusted = bootval; + + /* + * Check whether this CPU is the first in a package to come up. In -- 2.47.3