On Thu, 2014-02-27 at 19:05 +0200, Michael S. Tsirkin wrote: > apic polarity in KVM does not work: too many things assume active high. > Let's not pretend it works, let's just ignore polarity flag. If we ever > want to emulate it exactly, this will need a feature flag anyway. > > Also report this to userspace: this makes it > possible to report the interrupt active-low > in ACPI, this way we are closer to real hardware. > > This patch fixes OSX running on KVM. > > Reported-by: "Gabriel L. Somlo" <gsomlo@xxxxxxxxx> > Signed-off-by: Michael S. Tsirkin <mst@xxxxxxxxxx> > > --- > > Gabriel, could you confirm this fixes OSX for you? > If you can play with linux tweaking interrupt > to active low, that would be very nice too: > it's weekend here. > > diff --git a/include/uapi/linux/kvm.h b/include/uapi/linux/kvm.h > index 902f124..db29b27 100644 > --- a/include/uapi/linux/kvm.h > +++ b/include/uapi/linux/kvm.h > @@ -674,6 +676,7 @@ struct kvm_ppc_smmu_info { > #define KVM_CAP_ARM_EL1_32BIT 93 > #define KVM_CAP_SPAPR_MULTITCE 94 > #define KVM_CAP_EXT_EMUL_CPUID 95 > +#define KVM_CAP_X86_IOAPIC_POLARITY_IGNORED 96 > > #ifdef KVM_CAP_IRQ_ROUTING > > diff --git a/virt/kvm/ioapic.c b/virt/kvm/ioapic.c > index 2d68297..ad170b4 100644 > --- a/virt/kvm/ioapic.c > +++ b/virt/kvm/ioapic.c > @@ -328,7 +328,6 @@ int kvm_ioapic_set_irq(struct kvm_ioapic *ioapic, int irq, int irq_source_id, > irq_level = __kvm_irq_line_state(&ioapic->irq_states[irq], > irq_source_id, level); > entry = ioapic->redirtbl[irq]; > - irq_level ^= entry.fields.polarity; > if (!irq_level) { > ioapic->irr &= ~mask; > ret = 1; I've run Windows and Linux guests with vfio assigned devices with this change and all the interrupt types seem to work. Tested-by: Alex Williamson <alex.williamson@xxxxxxxxxx> -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html