x86/smp: Initialize cpu_primary_thread_mask late
authorThomas Gleixner <tglx@linutronix.de>
Fri, 26 May 2023 19:38:47 +0000 (21:38 +0200)
committerThomas Gleixner <tglx@linutronix.de>
Mon, 29 May 2023 19:31:23 +0000 (21:31 +0200)
commit5da80b28bf25c3458c7beb23794ff53622ce7eb4
tree4f10ef1dd94ba5a568b689f16d9cdf591d92fae3
parent06c6796e0304234da65e70577f354cb194086521
x86/smp: Initialize cpu_primary_thread_mask late

Marking primary threads in the cpumask during early boot is only correct in
certain configurations, but broken e.g. for the legacy hyperthreading
detection.

This is due to the complete mess in the CPUID evaluation code which
initializes smp_num_siblings only half during early init and fixes it up
later when identify_boot_cpu() is invoked.

So using smp_num_siblings before identify_boot_cpu() leads to incorrect
results.

Fixing the early CPU init code to provide the proper data is a larger scale
surgery as the code has dependencies on data structures which are not
initialized during early boot.

Move the initialization of cpu_primary_thread_mask wich depends on
smp_num_siblings being correct to an early initcall so that it is set up
correctly before SMP bringup.

Fixes: f54d4434c281 ("x86/apic: Provide cpu_primary_thread mask")
Reported-by: "Kirill A. Shutemov" <kirill@shutemov.name>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
Link: https://lore.kernel.org/r/87sfbhlwp9.ffs@tglx
arch/x86/kernel/apic/apic.c