Package: xen-hypervisor-3.0-i386
Version: 3.0.2+hg9697-1
Severity: important
Tags: patch
Xen 3.0 hypervisor does not boot on my Acer TravelMate 2403 at all
unless IOAPIC is disabled with noapic or acpi=noirq boot parameter.
However, with IOAPIC disabled, some important devices, like network
adapter, do not work (because of interrupt problems, I guess).
The problem is smimiliar to the one I have experienced trying to run
linux kernels prior to 2.6.16 on this machine.
I have corrected the problem by manually applying the changes
found in the respective linux kernel patch available at
http://www.unmuted.de/travelmate/i915_ioapic_2.6.11.patch.
The resulting patch is enclosed, it works for me.
-- System Information:
Debian Release: 3.1
APT prefers testing
APT policy: (600, 'testing'), (300, 'unstable')
Architecture: i386 (i686)
Kernel: Linux 2.6.16-2-xen-686
Locale: LANG=pl_PL, LC_CTYPE=pl_PL (charmap=ISO-8859-2)
-- no debconf information
--- xen-3.0-3.0.2+hg9697/xen/arch/x86/io_apic.c 2006-05-31 10:49:41.000000000 +0200
+++ xen-3.0-3.0.2+hg9697.i915_ioapic_patch/xen/arch/x86/io_apic.c 2006-07-29 11:23:15.000000000 +0200
@@ -1847,7 +1847,8 @@
/* Sanity check */
if (reg_00.bits.ID != apic_id)
- panic("IOAPIC[%d]: Unable change apic_id!\n", ioapic);
+ printk("IOAPIC[%d]: Unable to change apic_id!\n", ioapic);
+ return -1;
}
apic_printk(APIC_VERBOSE, KERN_INFO
--- xen-3.0-3.0.2+hg9697/xen/arch/x86/mpparse.c 2006-05-31 10:49:41.000000000 +0200
+++ xen-3.0-3.0.2+hg9697.i915_ioapic_patch/xen/arch/x86/mpparse.c 2006-07-29 11:17:33.000000000 +0200
@@ -935,8 +935,14 @@
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))
- mp_ioapics[idx].mpc_apicid = io_apic_get_unique_id(idx, id);
+ if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL) && (boot_cpu_data.x86 < 15)) {
+ int tmpid = 0;
+ if ((tmpid = io_apic_get_unique_id(idx, id)) == -1) {
+ nr_ioapics--;
+ return;
+ }
+ mp_ioapics[idx].mpc_apicid = (u8)(tmpid);
+ }
else
mp_ioapics[idx].mpc_apicid = id;
mp_ioapics[idx].mpc_apicver = io_apic_get_version(idx);