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

Reply via email to