Skip to content

Commit 78f4e93

Browse files
committed
x86/microcode, cpuhotplug: Add a microcode loader CPU hotplug callback
Adric Blake reported the following warning during suspend-resume: Enabling non-boot CPUs ... x86: Booting SMP configuration: smpboot: Booting Node 0 Processor 1 APIC 0x2 unchecked MSR access error: WRMSR to 0x10f (tried to write 0x0000000000000000) \ at rIP: 0xffffffff8d267924 (native_write_msr+0x4/0x20) Call Trace: intel_set_tfa intel_pmu_cpu_starting ? x86_pmu_dead_cpu x86_pmu_starting_cpu cpuhp_invoke_callback ? _raw_spin_lock_irqsave notify_cpu_starting start_secondary secondary_startup_64 microcode: sig=0x806ea, pf=0x80, revision=0x96 microcode: updated to revision 0xb4, date = 2019-04-01 CPU1 is up The MSR in question is MSR_TFA_RTM_FORCE_ABORT and that MSR is emulated by microcode. The log above shows that the microcode loader callback happens after the PMU restoration, leading to the conjecture that because the microcode hasn't been updated yet, that MSR is not present yet, leading to the #GP. Add a microcode loader-specific hotplug vector which comes before the PERF vectors and thus executes earlier and makes sure the MSR is present. Fixes: 400816f ("perf/x86/intel: Implement support for TSX Force Abort") Reported-by: Adric Blake <[email protected]> Signed-off-by: Borislav Petkov <[email protected]> Reviewed-by: Thomas Gleixner <[email protected]> Cc: Peter Zijlstra <[email protected]> Cc: <[email protected]> Cc: [email protected] Link: https://bugzilla.kernel.org/show_bug.cgi?id=203637
1 parent f3176ec commit 78f4e93

File tree

2 files changed

+2
-1
lines changed

2 files changed

+2
-1
lines changed

arch/x86/kernel/cpu/microcode/core.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -872,7 +872,7 @@ int __init microcode_init(void)
872872
goto out_ucode_group;
873873

874874
register_syscore_ops(&mc_syscore_ops);
875-
cpuhp_setup_state_nocalls(CPUHP_AP_ONLINE_DYN, "x86/microcode:online",
875+
cpuhp_setup_state_nocalls(CPUHP_AP_MICROCODE_LOADER, "x86/microcode:online",
876876
mc_cpu_online, mc_cpu_down_prep);
877877

878878
pr_info("Microcode Update Driver: v%s.", DRIVER_VERSION);

include/linux/cpuhotplug.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,7 @@ enum cpuhp_state {
101101
CPUHP_AP_IRQ_BCM2836_STARTING,
102102
CPUHP_AP_IRQ_MIPS_GIC_STARTING,
103103
CPUHP_AP_ARM_MVEBU_COHERENCY,
104+
CPUHP_AP_MICROCODE_LOADER,
104105
CPUHP_AP_PERF_X86_AMD_UNCORE_STARTING,
105106
CPUHP_AP_PERF_X86_STARTING,
106107
CPUHP_AP_PERF_X86_AMD_IBS_STARTING,

0 commit comments

Comments
 (0)