On 28/10/2015 17:00, Alex Williamson wrote: > > Alex, would it make sense to use the IRQ bypass infrastructure always, > > not just for VT-d, to do the MSI injection directly from the VFIO > > interrupt handler and bypass the eventfd? Basically this would add an > > RCU-protected list of consumers matching the token to struct > > irq_bypass_producer, and a > > > > int (*inject)(struct irq_bypass_consumer *); > > > > callback to struct irq_bypass_consumer. If any callback returns true, > > the eventfd is not signaled. > > Yeah, that might be a good idea, it's probably more plausible than > making the eventfd_signal() code friendly to call from hard interrupt > context. On the vfio side can we use request_threaded_irq() directly > for this? I don't know if that gives you a non-threaded IRQ with the real-time kernel... CCing Marcelo to get some insight. > Making the hard irq handler return IRQ_HANDLED if we can use > the irq bypass manager or IRQ_WAKE_THREAD if we need to use the eventfd. > I think we need some way to get back to irq thread context to use > eventfd_signal(). The irqfd is already able to schedule a work item, because it runs with interrupts disabled, so I think we can always return IRQ_HANDLED. There's another little complication. Right now, only x86 has kvm_set_msi_inatomic. We should merge kvm_set_msi_inatomic, kvm_set_irq_inatomic and kvm_arch_set_irq. Some cleanups are needed there; the flow between the functions is really badly structured because the API grew somewhat by accretion. I'll get to it next week or on the way back to Italy. > Would we ever not want to use the direct bypass > manager path if available? Thanks, I don't think so. KVM always registers itself as a consumer, even if there is no VT-d posted interrupts. add_producer simply returns -EINVAL then. Paolo -- 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