Ver Fonte

[PATCH] x86-64: Use largest APIC number, not number of CPUs to decide on physflat mode

Handles case where BIOS gives CPUs very large APIC numbers correctly.

Signed-off-by: Andi Kleen <ak@suse.de>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Andi Kleen há 20 anos atrás
pai
commit
7055646348
1 ficheiros alterados com 4 adições e 3 exclusões
  1. 4 3
      arch/x86_64/kernel/genapic.c

+ 4 - 3
arch/x86_64/kernel/genapic.c

@@ -45,7 +45,7 @@ void __init clustered_apic_check(void)
 	u8 clusters, max_cluster;
 	u8 clusters, max_cluster;
 	u8 id;
 	u8 id;
 	u8 cluster_cnt[NUM_APIC_CLUSTERS];
 	u8 cluster_cnt[NUM_APIC_CLUSTERS];
-	int num_cpus = 0;
+	int max_apic = 0;
 
 
 #if defined(CONFIG_ACPI)
 #if defined(CONFIG_ACPI)
 	/*
 	/*
@@ -64,7 +64,8 @@ void __init clustered_apic_check(void)
 		id = bios_cpu_apicid[i];
 		id = bios_cpu_apicid[i];
 		if (id == BAD_APICID)
 		if (id == BAD_APICID)
 			continue;
 			continue;
-		num_cpus++;
+		if (id > max_apic)
+			max_apic = id;
 		cluster_cnt[APIC_CLUSTERID(id)]++;
 		cluster_cnt[APIC_CLUSTERID(id)]++;
 	}
 	}
 
 
@@ -79,7 +80,7 @@ void __init clustered_apic_check(void)
 		   we have ACPI platform support for CPU hotplug
 		   we have ACPI platform support for CPU hotplug
 		   we should detect hotplug capablity from ACPI tables and
 		   we should detect hotplug capablity from ACPI tables and
 		   only do this when really needed. -AK */
 		   only do this when really needed. -AK */
-		if (num_cpus <= 8)
+		if (max_apic <= 8)
 			genapic = &apic_flat;
 			genapic = &apic_flat;
 #endif
 #endif
  		goto print;
  		goto print;