Alexander Graf wrote:
Avi Kivity wrote:
Xu, Anthony wrote:
In kvm-ia64, we use the same guest firmware (GFW)as in Xen, GFW uses PRT to present PCI interrupt routing, all PCI devices'
interrupt pins
connect to IOAPIC, which doesn't match with kvm-ia64 Qemu PCI interrupt
routing.

This patch modify Qemu PCI interupt routing code to match with GFW, Then PCI devices in qemu can work in kvm-ia64, for exmaple, NIC


Signed-off-by: Anthony Xu < [EMAIL PROTECTED] >


diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c
index 99a1736..80c116c 100644
--- a/virt/kvm/ioapic.c
+++ b/virt/kvm/ioapic.c
@@ -272,7 +272,11 @@ void kvm_ioapic_set_irq(struct kvm_ioapic *ioapic,
int irq, int level)

        if (irq >= 0 && irq < IOAPIC_NUM_PINS) {
                entry = ioapic->redirtbl[irq];
-               level ^= entry.fields.polarity;
+// polarity of all devices in qemu is active high
+//  regardless of ioapic setting
+
+//             level ^= entry.fields.polarity;
+

There are two errors in this patch:

- kvm is not there just for qemu; it should be possible to use kvm with some other userspace, which would assume that kvm correctly emulates ioapic polarity
- you are modifying shared code and so affect x86 as well

Apparently this is broken on x86 too. I was just trying this patch with Mac OS X as target and magically the in-kernel APIC starts working, so I guess something is going wrong already here. Btw, according to the ACPI tables, all PCI interrupts are currently defined Active-Low.

Sorry, ActiveHigh that is. Nevertheless I am having trouble with this since the very first time I used osx inside KVM. Does PCI allow Active

> Interrupt (, Level, ActiveHigh, Shared)

According to the PCI 3.0 Spec, "Interrupts on PCI are optional and defined as 'level sensitive,' asserted low (negative true)".

Alex
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to