mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-16 16:54:20 +08:00
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. Signed-off-by: Yinghai Lu <yinghai@kernel.org> LKML-Reference: <4D5240A9.4080703@kernel.org> [ Cleaned up and made the BIOS bug printouts more consistent ] Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
parent
91e04ec058
commit
e5fea868e6
@ -1925,17 +1925,6 @@ void __cpuinit generic_processor_info(int apicid, int version)
|
|||||||
{
|
{
|
||||||
int cpu;
|
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) {
|
if (num_processors >= nr_cpu_ids) {
|
||||||
int max = nr_cpu_ids;
|
int max = nr_cpu_ids;
|
||||||
int thiscpu = max + disabled_cpus;
|
int thiscpu = max + disabled_cpus;
|
||||||
@ -1949,22 +1938,34 @@ void __cpuinit generic_processor_info(int apicid, int version)
|
|||||||
}
|
}
|
||||||
|
|
||||||
num_processors++;
|
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) {
|
if (apicid == boot_cpu_physical_apicid) {
|
||||||
/*
|
/*
|
||||||
* x86_bios_cpu_apicid is required to have processors listed
|
* x86_bios_cpu_apicid is required to have processors listed
|
||||||
* in same order as logical cpu numbers. Hence the first
|
* in same order as logical cpu numbers. Hence the first
|
||||||
* entry is BSP, and so on.
|
* entry is BSP, and so on.
|
||||||
|
* boot_cpu_init() already hold bit 0 in cpu_present_mask
|
||||||
|
* for BSP.
|
||||||
*/
|
*/
|
||||||
cpu = 0;
|
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)
|
if (apicid > max_physical_apicid)
|
||||||
max_physical_apicid = apicid;
|
max_physical_apicid = apicid;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user