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 <andrew.cooper3@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
This commit is contained in:
Andrew Cooper committed 2026-09-09 18:07:32 +01:00
1 parent cd68e5bc02
commit 1ff8c6e289
1 file changed
+6 -4
+6 -4
View File
@@ -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)
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.