|
@@ -275,13 +275,23 @@ acpi_table_parse_srat(enum acpi_srat_type id,
|
|
|
int __init acpi_numa_init(void)
|
|
|
{
|
|
|
int ret = 0;
|
|
|
+ int nr_cpu_entries = nr_cpu_ids;
|
|
|
+
|
|
|
+#ifdef CONFIG_X86
|
|
|
+ /*
|
|
|
+ * Should not limit number with cpu num that is from NR_CPUS or nr_cpus=
|
|
|
+ * SRAT cpu entries could have different order with that in MADT.
|
|
|
+ * So go over all cpu entries in SRAT to get apicid to node mapping.
|
|
|
+ */
|
|
|
+ nr_cpu_entries = MAX_LOCAL_APIC;
|
|
|
+#endif
|
|
|
|
|
|
/* SRAT: Static Resource Affinity Table */
|
|
|
if (!acpi_table_parse(ACPI_SIG_SRAT, acpi_parse_srat)) {
|
|
|
acpi_table_parse_srat(ACPI_SRAT_TYPE_X2APIC_CPU_AFFINITY,
|
|
|
- acpi_parse_x2apic_affinity, nr_cpu_ids);
|
|
|
+ acpi_parse_x2apic_affinity, nr_cpu_entries);
|
|
|
acpi_table_parse_srat(ACPI_SRAT_TYPE_CPU_AFFINITY,
|
|
|
- acpi_parse_processor_affinity, nr_cpu_ids);
|
|
|
+ acpi_parse_processor_affinity, nr_cpu_entries);
|
|
|
ret = acpi_table_parse_srat(ACPI_SRAT_TYPE_MEMORY_AFFINITY,
|
|
|
acpi_parse_memory_affinity,
|
|
|
NR_NODE_MEMBLKS);
|