linux/arch/x86/kernel/apic
Yinghai Lu 4797f6b021 x86: read apic ID in the !acpi_lapic case
Ed found that on 32-bit, boot_cpu_physical_apicid is not read right,
when the mptable is broken.

Interestingly, actually three paths use/set it:

 1. acpi: at that time that is already read from reg
 2. mptable: only read from mptable
 3. no madt, and no mptable, that use default apic id 0 for 64-bit, -1 for 32-bit

so we could read the apic id for the 2/3 path. We trust the hardware
register more than we trust a BIOS data structure (the mptable).

We can also avoid the double set_fixmap() when acpi_lapic
is used, and also need to move cpu_has_apic earlier and
call apic_disable().

Also when need to update the apic id, we'd better read and
set the apic version as well - so that quirks are applied precisely.

v2: make path 3 with 64bit, use -1 as apic id, so could read it later.
v3: fix whitespace problem pointed out by Ed Swierk
v5: fix boot crash

[ Impact: get correct apic id for bsp other than acpi path ]

Reported-by: Ed Swierk <eswierk@aristanetworks.com>
Signed-off-by: Yinghai Lu <yinghai@kernel.org>
Acked-by: Cyrill Gorcunov <gorcunov@openvz.org>
LKML-Reference: <49FC85A9.2070702@kernel.org>
[ v4: sanity-check in the ACPI case too ]
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-05-12 12:22:06 +02:00
..
apic_flat_64.c x86: apic: Check rev 3 fadt correctly for physical_apic bit 2009-05-11 10:52:40 +02:00
apic.c x86: read apic ID in the !acpi_lapic case 2009-05-12 12:22:06 +02:00
bigsmp_32.c cpumask: use new cpumask functions throughout x86 2009-03-13 14:49:54 +10:30
es7000_32.c x86: es7000, uv - use __cpuinit for kicking secondary cpus 2009-04-19 10:28:53 +02:00
io_apic.c x86: read apic ID in the !acpi_lapic case 2009-05-12 12:22:06 +02:00
ipi.c
Makefile
nmi.c x86: avoid theoretical spurious NMI backtraces with CONFIG_CPUMASK_OFFSTACK=y 2009-04-21 10:09:50 +02:00
numaq_32.c cpumask: remove x86 cpumask_t uses. 2009-03-13 14:49:57 +10:30
probe_32.c cpumask: remove cpumask_t assignment from vector_allocation_domain() 2009-03-13 14:49:56 +10:30
probe_64.c x86: x2apic, IR: Clean up X86_X2APIC and INTR_REMAP config checks 2009-04-21 09:08:25 +02:00
summit_32.c x86: apic: Remove duplicated macros 2009-04-27 09:13:36 +02:00
x2apic_cluster.c x86: add x2apic_wrmsr_fence() to x2apic flush tlb paths 2009-03-18 09:36:14 +01:00
x2apic_phys.c x86: add x2apic_wrmsr_fence() to x2apic flush tlb paths 2009-03-18 09:36:14 +01:00
x2apic_uv_x.c Merge commit 'v2.6.30-rc5' into x86/apic 2009-05-11 09:50:02 +02:00