qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH] Fix timer interrupt routing for non-ACPI guest


From: Beth Kon
Subject: Re: [Qemu-devel] [PATCH] Fix timer interrupt routing for non-ACPI guest
Date: Mon, 13 Apr 2009 12:21:50 -0400
User-agent: Thunderbird 2.0.0.21 (X11/20090318)

Ed Swierk wrote:
Qemu 0.10.2 is unable to boot a non-ACPI kernel due to a BIOS bug:

ENABLING IO-APIC IRQs ..TIMER: vector=0x31 apic1=0 pin1=0 apic2=-1 pin2=-1 ..MP-BIOS bug: 8254 timer not connected to IO-APIC ...trying to set up timer (IRQ0) through the 8259A ... ..... (found apic 0 pin 0) ... ....... failed. ...trying to set up timer as Virtual Wire IRQ...
The interrupt routing table in the MPTABLE needs to route the timer
interrupt (IRQ 0) to IOAPIC pin 2.

A similar bug was recently fixed in the ACPI table code.  This patch
fixes the problem for non-ACPI guests.

Signed-off-by: Ed Swierk <address@hidden>

---
diff --git a/bios/rombios32.c b/bios/rombios32.c
index 7be4216..13d5435 100644
--- a/bios/rombios32.c
+++ b/bios/rombios32.c
@@ -1173,7 +1173,7 @@ static void mptable_init(void)
         putb(&q, 0); /* flags: po=0, el=0 */
         putb(&q, 0);
         putb(&q, 0); /* source bus ID = ISA */
-        putb(&q, i); /* source bus IRQ */
+        putb(&q, i == 2 ? 0 : i); /* source bus IRQ */
         putb(&q, ioapic_id); /* dest I/O APIC ID */
         putb(&q, i); /* dest I/O APIC interrupt in */
     }



This was an oversight on my part when I submitted the HPET patches for qemu. I properly modified the ACPI configuration, but missed the non-ACPI case.

This patch is not quite correct and I will submit the necessary patch shortly.

A bit of the history...

This issue surfaced when I implemented the HPET and discovered that Win2k8 would only work if the HPET interrupt was routed to IOAPIC inti2. This is a common configuration (overriding irq0->inti2). The HPET spec states that "Timer 0 will be routed to IRQ0 in the Non-APIC or IRQ2 in the I/O APIC", and Windows appears to expect it regardless of how overrides are reported by the BIOS. So the decision was made to always have the override.






reply via email to

[Prev in Thread] Current Thread [Next in Thread]