x86: Cleanup generic_processor_info()
PATCH 1/1 x86: Cleanup generic_processor_info()
Found version print out pass version instead of cpu index, if the version is not valid.
Move version validation down after We get right cpu index.
--- arch/x86/kernel/apic/apic.c | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-)
arch/x86/kernel/apic/apic.c +18 -18
@@ -1947,17 +1947,6 @@ void __cpuinit generic_processor_info(in {int cpu; -/* -* Validate version -*/ -if (version ==0x0 ) { -pr_warning ("BIOS bug, APIC version is 0 for CPU#%d! " -"fixing up to 0x10. (tell your hw vendor)\n" , - version); - version =0x10 ; - } - apic_version[apicid] = version; -if (num_processors >= nr_cpu_ids) {int max = nr_cpu_ids;int thiscpu = max + disabled_cpus;
@@ -1972,13 +1961,6 @@ void __cpuinit generic_processor_info(in num_processors++; cpu =cpumask_next_zero (-1 , cpu_present_mask); - -if (version != apic_version[boot_cpu_physical_apicid]) -WARN_ONCE (1 , -"ACPI: apic version mismatch, bootcpu: %x cpu %d: %x\n" , - apic_version[boot_cpu_physical_apicid], cpu, version); - -physid_set (apicid, phys_cpu_present_map);if (apicid == boot_cpu_physical_apicid) {/* * x86_bios_cpu_apicid is required to have processors listed
@@ -1987,6 +1969,24 @@ void __cpuinit generic_processor_info(in*/ cpu =0 ; } + +/* +* Validate version +*/ +if (version ==0x0 ) { +pr_warning ("BIOS bug, APIC version is 0 for Processor %d/0x%x " +"fixing up to 0x10. (tell your hw vendor)\n" , + cpu, apicid); + version =0x10 ; + } + apic_version[apicid] = version; + +if (version != apic_version[boot_cpu_physical_apicid]) +WARN_ONCE (1 , +"ACPI: apic version mismatch, bootcpu: %x cpu %d: %x\n" , + apic_version[boot_cpu_physical_apicid], cpu, version); + +physid_set (apicid, phys_cpu_present_map);if (apicid > max_physical_apicid) max_physical_apicid = apicid;
PATCH 1/1 x86: Cleanup generic_processor_info()
Found version print out pass version instead of cpu index, if the version is not valid.
Move version validation down, after We get right cpu index.
-v2: add comments about reason why we can cpu=0 there.
--- arch/x86/kernel/apic/apic.c | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-)
arch/x86/kernel/apic/apic.c +21 -19
@@ -1947,17 +1947,6 @@ void __cpuinit generic_processor_info(in {int cpu; -/* -* Validate version -*/ -if (version ==0x0 ) { -pr_warning ("BIOS bug, APIC version is 0 for CPU#%d! " -"fixing up to 0x10. (tell your hw vendor)\n" , - version); - version =0x10 ; - } - apic_version[apicid] = version; -if (num_processors >= nr_cpu_ids) {int max = nr_cpu_ids;int thiscpu = max + disabled_cpus;
@@ -1971,22 +1960,35 @@ void __cpuinit generic_processor_info(in } num_processors++; - cpu =cpumask_next_zero (-1 , cpu_present_mask); - -if (version != apic_version[boot_cpu_physical_apicid]) -WARN_ONCE (1 , -"ACPI: apic version mismatch, bootcpu: %x cpu %d: %x\n" , - apic_version[boot_cpu_physical_apicid], cpu, version); - -physid_set (apicid, phys_cpu_present_map);if (apicid == boot_cpu_physical_apicid) {/* * x86_bios_cpu_apicid is required to have processors listed * in same order as logical cpu numbers. Hence the first * entry is BSP, and so on. +* boot_cpu_init() already hold bit 0 in cpu_present_mask +* for BSP. */ cpu =0 ; + }else + cpu =cpumask_next_zero (-1 , cpu_present_mask); + +/* +* Validate version +*/ +if (version ==0x0 ) { +pr_warning ("BIOS bug, APIC version is 0 for Processor %d/0x%x " +"fixing up to 0x10. (tell your hw vendor)\n" , + cpu, apicid); + version =0x10 ; } + apic_version[apicid] = version; + +if (version != apic_version[boot_cpu_physical_apicid]) +WARN_ONCE (1 , +"ACPI: apic version mismatch, bootcpu: %x cpu %d: %x\n" , + apic_version[boot_cpu_physical_apicid], cpu, version); + +physid_set (apicid, phys_cpu_present_map);if (apicid > max_physical_apicid) max_physical_apicid = apicid;
[tip:x86/cpu] x86: Fix and clean up generic_processor_info()
Commit-ID: e5fea868e6c04343e501176a373d568c1c0094aa Gitweb: http://git.kernel.org/tip/e5fea868e6c04343e501176a373d568c1c0094aa Author: Yinghai Lu <[email protected]> AuthorDate: Tue, 8 Feb 2011 23:22:17 -0800 Committer: Ingo Molnar <[email protected]> CommitDate: Mon, 14 Feb 2011 13:23:51 +0100
x86: Fix and clean up generic_processor_info()
One of the error printouts in generic_processor_info() prints out the APIC version instead of the cpu index the warning text describes.
Move version validation down, after we get the right cpu index.
-v2: add comments about reason why we can have cpu=0 there.
LKML-Reference: <[email protected]>
--- arch/x86/kernel/apic/apic.c | 39 ++++++++++++++++++++------------------- 1 files changed, 20 insertions(+), 19 deletions(-)
arch/x86/kernel/apic/apic.c +20 -19
@@ -1925,17 +1925,6 @@ void __cpuinit generic_processor_info(int apicid, int version) {int cpu; -/* -* Validate version -*/ -if (version ==0x0 ) { -pr_warning ("BIOS bug, APIC version is 0 for CPU#%d! " -"fixing up to 0x10. (tell your hw vendor)\n" , - version); - version =0x10 ; - } - apic_version[apicid] = version; -if (num_processors >= nr_cpu_ids) {int max = nr_cpu_ids;int thiscpu = max + disabled_cpus;
@@ -1949,22 +1938,34 @@ void __cpuinit generic_processor_info(int apicid, int version) } num_processors++; - cpu =cpumask_next_zero (-1 , cpu_present_mask); - -if (version != apic_version[boot_cpu_physical_apicid]) -WARN_ONCE (1 , -"ACPI: apic version mismatch, bootcpu: %x cpu %d: %x\n" , - apic_version[boot_cpu_physical_apicid], cpu, version); - -physid_set (apicid, phys_cpu_present_map);if (apicid == boot_cpu_physical_apicid) {/* * x86_bios_cpu_apicid is required to have processors listed * in same order as logical cpu numbers. Hence the first * entry is BSP, and so on. +* boot_cpu_init() already hold bit 0 in cpu_present_mask +* for BSP. */ cpu =0 ; + }else + cpu =cpumask_next_zero (-1 , cpu_present_mask); + +/* +* Validate version +*/ +if (version ==0x0 ) { +pr_warning ("BIOS bug: APIC version is 0 for CPU %d/0x%x, fixing up to 0x10\n" , + cpu, apicid); + version =0x10 ; } + apic_version[apicid] = version; + +if (version != apic_version[boot_cpu_physical_apicid]) { +pr_warning ("BIOS bug: APIC version mismatch, boot CPU: %x, CPU %d: version %x\n" , + apic_version[boot_cpu_physical_apicid], cpu, version); + } + +physid_set (apicid, phys_cpu_present_map);if (apicid > max_physical_apicid) max_physical_apicid = apicid;