qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] RFC: ioapic polarity vs. qemu os-x guest


From: Gabriel L. Somlo
Subject: Re: [Qemu-devel] RFC: ioapic polarity vs. qemu os-x guest
Date: Mon, 17 Feb 2014 12:57:00 -0500
User-agent: Mutt/1.5.21 (2010-09-15)

On Sun, Feb 16, 2014 at 06:23:11PM +0200, Michael S. Tsirkin wrote:
> Well there is a bigger issue: any interrupt with
> multiple sources is broken.
> 
> __kvm_irq_line_state does a logical OR of all sources,
> before XOR with polarity.
> 
> This makes no sense if polarity is active low.

So, do you think something like this would make sense, to address
active-low polarity in __kvm_irq_line_state ?
(this would be independent of the subsequent xor in
kvm_ioapic_set_irq()):

-static inline int __kvm_irq_line_state(unsigned long *irq_state,
+static inline int __kvm_irq_line_state(unsigned long *irq_state, int polarity,
                                        int irq_source_id, int level)
{
-        /* Logical OR for level trig interrupt */
        if (level)
                __set_bit(irq_source_id, irq_state);
        else
                __clear_bit(irq_source_id, irq_state);

-       return !!(*irq_state);
+       if (polarity) {
+               /* Logical OR for level trig interrupt, active-high */
+               return !!(*irq_state);
+       } else { // active-low
+               /* Logical AND for level trig interrupt, active-low */
+               return !~(*irq_state);
+       }
}

Thanks,
--Gabriel



reply via email to

[Prev in Thread] Current Thread [Next in Thread]