On Wed, Sep 05, 2012 at 06:22:57PM +0300, Avi Kivity wrote: > On 09/05/2012 06:13 PM, Michael S. Tsirkin wrote: > > On Wed, Sep 05, 2012 at 05:59:46PM +0300, Avi Kivity wrote: > >> On 09/05/2012 05:51 PM, Michael S. Tsirkin wrote: > >> > On Wed, Sep 05, 2012 at 05:35:43PM +0300, Avi Kivity wrote: > >> >> On 08/22/2012 03:41 AM, Michael S. Tsirkin wrote: > >> >> >> > >> >> >> I assumed you were pointing out the level vs edge interaction. If we > >> >> >> call that a userspace bug, I can just drop this. Thanks, > >> >> >> > >> >> >> Alex > >> >> > > >> >> > level is userspace bug I think :) > >> >> > >> >> I don't see how it's a bug. Suppose we have a vfio device that shares a > >> >> gsi with an emulated device. The emulated device naturally uses > >> >> KVM_IRQ_LINE (it has no need to re-sample on ADN), while vfio naturally > >> >> has to use irqfd. > >> > > >> > Absolutely. But vfio needs to use irqfd with the new flag. > >> > Using existing irqfd for level is a bug. > >> > >> I see we're not reusing this irq source id for level irqfd. But I think > >> we should, there's no need for per-gsi irq source id. > > > > I agree. All resample irqfds are deasserted at the same time, > > tracking them separately gets us nothing. > > That's not the reason. Separate irq source ids only have meanings > within a gsi. We could have two lines (gsi 3 isid 4) and (gsi 4 isid 4) > that can be toggled independently with no effect on the other gsi. > Within a gsi we do need a separate irq source id usually, but as 2/2 > recognizes, AODNs are a special case since we clear all inputs anyway. > The end result is that all AODNs can share a single isid. > > > > >> Plus I'd like to > >> fix the theoretical bug even if it doesn't bite in practice. > >> > > > > I'm not sure what the bug is, for edge, and how a separate ID fixes it. > > Could you clarify? > > gsi 3 is configured as edge in the ioapic. It has (unusually) two > inputs: one driven by userspace, the other by irqfd. > > cpu 0 cpu 1 > ------------------------ ------------------------- > irqfd: set to 1 > ioapic: recognize edge > inject irq > EOI > KVM_IRQ_LINE: set to 1 > ioapic: ignore > KVM_IRQ_LINE: set to 0 > irqfd: set to 0 > > We had two edges with an EOI between them, but injected just on interrupt. I see. Makes sense, ACK this patch. > -- > error compiling committee.c: too many arguments to function -- 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