diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c index 81e6a432f23cb64286e837ae0f3227d2c302ca29..b2c99f811c3ff437ddfb45c7c4a56ed73101eccd 100644 --- a/arch/x86/kernel/smpboot.c +++ b/arch/x86/kernel/smpboot.c @@ -325,9 +325,14 @@ static void __init smp_init_package_map(void) * By not including this we'll sometimes over-estimate the number of * logical packages by the amount of !present siblings, but this is * still better than MAX_LOCAL_APIC. + * + * We use total_cpus not nr_cpu_ids because nr_cpu_ids can be limited + * on the command line leading to a similar issue as the HT disable + * problem because the hyperthreads are usually enumerated after the + * primary cores. */ ncpus = boot_cpu_data.x86_max_cores; - __max_logical_packages = DIV_ROUND_UP(nr_cpu_ids, ncpus); + __max_logical_packages = DIV_ROUND_UP(total_cpus, ncpus); /* * Possibly larger than what we need as the number of apic ids per