x86/microcode: Handle "offline" CPUs correctly
authorThomas Gleixner <tglx@linutronix.de>
Mon, 2 Oct 2023 12:00:08 +0000 (14:00 +0200)
committerBorislav Petkov (AMD) <bp@alien8.de>
Tue, 24 Oct 2023 13:05:55 +0000 (15:05 +0200)
commit8f849ff63bcbc77670da03cb8f2b78b06257f455
treed53d92a3ca79ec251c1edaa3d046f6e15e3cfb1b
parent9cab5fb776d4367e26950cf759211e948335288e
x86/microcode: Handle "offline" CPUs correctly

Offline CPUs need to be parked in a safe loop when microcode update is
in progress on the primary CPU. Currently, offline CPUs are parked in
mwait_play_dead(), and for Intel CPUs, its not a safe instruction,
because the MWAIT instruction can be patched in the new microcode update
that can cause instability.

  - Add a new microcode state 'UCODE_OFFLINE' to report status on per-CPU
  basis.
  - Force NMI on the offline CPUs.

Wake up offline CPUs while the update is in progress and then return
them back to mwait_play_dead() after microcode update is complete.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Link: https://lore.kernel.org/r/20231002115903.660850472@linutronix.de
arch/x86/include/asm/microcode.h
arch/x86/kernel/cpu/microcode/core.c
arch/x86/kernel/cpu/microcode/internal.h
arch/x86/kernel/nmi.c