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

Alexander Graf
2008-06-09T09:18:32Z

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

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