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);