From 1ff8c6e289c78749c46d6497e6d7fac49347bb70 Mon Sep 17 00:00:00 2001 From: Andrew Cooper Date: Wed, 28 Jan 2026 18:10:45 +0000 Subject: [PATCH] x86/cpu: Rewrite initialize_cpu_data() for clarity Without passing opinion on the behaviour of this function, it is deceptive to read (I've twice now mistaken it for resetting boot_cpu_data), and inefficient. Instead of having a 256 byte object on the stack and a double copy, copy boot_cpu_data directly, then reset parts of cpu_data[cpu] in place. Leave some comments behind explaining what's happening. No functional change. Signed-off-by: Andrew Cooper Acked-by: Jan Beulich --- xen/arch/x86/smpboot.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/xen/arch/x86/smpboot.c b/xen/arch/x86/smpboot.c index 84e9e4beed..cede2b886f 100644 --- a/xen/arch/x86/smpboot.c +++ b/xen/arch/x86/smpboot.c @@ -94,12 +94,14 @@ void *stack_base[NR_CPUS]; void initialize_cpu_data(unsigned int cpu) { - struct cpuinfo_x86 c = boot_cpu_data; + struct cpuinfo_x86 *c = &cpu_data[cpu]; - /* Must not partially clear the BSP's collected data. */ + /* First, inherit from boot_cpu_data */ + *c = boot_cpu_data; + + /* Second, reset most of it, except if we're the BSP at early boot. */ if ( cpu || system_state > SYS_STATE_smp_boot ) - reset_cpuinfo(&c, true); - cpu_data[cpu] = c; + reset_cpuinfo(c, true); } static bool smp_store_cpu_info(unsigned int id)