On Mon, Jun 18, 2012 at 12:33:01PM +0300, Avi Kivity wrote: > On 06/18/2012 11:52 AM, Jan Kiszka wrote: > >> > >> I don't understand how this works. A level IRQ isn't de-asserted by the > >> EOI, it's de-asserted by its source. > >> > >> Consider the following sequence: > >> > >> device guest > >> > >> event > >> assert > >> interrupt > >> interrupt handler > >> handle event > >> clear ISR bit > >> deassert > >> event > >> assert > >> EOI > >> > >> What should happen is that the interrupt will be redelivered > >> immmediately after the EOI, but that won't happen with your API since > >> the EOI ack notifier will deassert the interrupt and nothing will > >> re-assert it. > > > > As it's level triggered and we unmask the physical source, another > > host-side interrupt will be triggered and then reported to the guest. > > That works for real devices. What about emulated devices It's broken for userspace too. I guess it should track the logical state of the device per source id. On ack, it should clear it for assigned devices only, do the logical OR over all source IDs and set level to that. > (vhost, > msi-less ivshmem clone)? I guess vhost can poll eventfd and reinject an interrupt. Of course to bypass qemu completely we also need to support reads over ioeventfd somehow. > -- > 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