x86/cpu: Ensure that CPU info updates are propagated on UP
authorThomas Gleixner <tglx@linutronix.de>
Fri, 22 Mar 2024 18:56:35 +0000 (19:56 +0100)
committerBorislav Petkov (AMD) <bp@alien8.de>
Sat, 23 Mar 2024 11:22:04 +0000 (12:22 +0100)
commitc90399fbd74a0713d5972a6d931e4a9918621e88
treeb9d8d57bdd113baceba3b973b88c0e9bd68a1332
parent4e51653d5d871f40f1bd5cf95cc7f2d8b33d063b
x86/cpu: Ensure that CPU info updates are propagated on UP

The boot sequence evaluates CPUID information twice:

  1) During early boot

  2) When finalizing the early setup right before
     mitigations are selected and alternatives are patched.

In both cases the evaluation is stored in boot_cpu_data, but on UP the
copying of boot_cpu_data to the per CPU info of the boot CPU happens
between #1 and #2. So any update which happens in #2 is never propagated to
the per CPU info instance.

Consolidate the whole logic and copy boot_cpu_data right before applying
alternatives as that's the point where boot_cpu_data is in it's final
state and not supposed to change anymore.

This also removes the voodoo mb() from smp_prepare_cpus_common() which
had absolutely no purpose.

Fixes: 71eb4893cfaf ("x86/percpu: Cure per CPU madness on UP")
Reported-by: Guenter Roeck <linux@roeck-us.net>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de>
Tested-by: Guenter Roeck <linux@roeck-us.net>
Link: https://lore.kernel.org/r/20240322185305.127642785@linutronix.de
arch/x86/kernel/cpu/common.c
arch/x86/kernel/setup.c
arch/x86/kernel/smpboot.c