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