Re: [PATCH] kvm-ia64 irq assignment 1/2 kernel

Alexander Graf
2008-06-09T09:00:24Z

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@intel.com >
>>
>>
>> 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.

Alex

>
> I suggest modifying the firmware to report the interrupts as active
> high. Since Xen does not emulate polarity, the change will not affect
> it and the firmware can continue to be shared. I'd also recommend
> fixing Xen to emulate the polarity correctly, if possible.
>