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 < anthony.xu@xxxxxxxxx >
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-ia64" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html