The original code only calls io_apic_get_unique_id() for P4
or earlier processors by checking for CPU family < 15. However, this
check does not apply to Yonah family of processors whose CPU family value is
6. This caused io_apic_get_unique_id() being called in Xen but not in
Dom0 since the code in Dom0 has been ifdef’ed out. The end result
is IOAPIC ID mismatch between Xen and Dom0 - which caused IOAPIC not being
programmed at all. This patch generalizes earlier code by checking for
LAPIC version number < 0x14 instead of CPU family - hence covers both P4 and
new P6 family processors such as Yonah.
Signed-Off-By: Allen M. Kay <allen.m.kay@xxxxxxxxx>
diff -r 0807931dfa54 xen/arch/x86/mpparse.c
--- a/xen/arch/x86/mpparse.c Fri Feb 24
15:37:09 2006
+++ b/xen/arch/x86/mpparse.c Thu Mar
2 17:24:12 2006
@@ -935,7 +935,9 @@
mp_ioapics[idx].mpc_apicaddr = address;
set_fixmap_nocache(FIX_IO_APIC_BASE_0 + idx, address);
- if
((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && (boot_cpu_data.x86
< 15))
+ if
((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) &&
+
(GET_APIC_VERSION(apic_read(APIC_LVR)) < 0x14))
+
mp_ioapics[idx].mpc_apicid
= io_apic_get_unique_id(idx, id);
else
mp_ioapics[idx].mpc_apicid = id;