Re: [RFC PATCH] VFIO: Add a parameter to force nonthread IRQ

From: Marcelo Tosatti
Date: Wed Oct 28 2015 - 19:57:12 EST


On Wed, Oct 28, 2015 at 06:05:00PM +0100, Paolo Bonzini wrote:
>
>
> 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.

The vfio interrupt handler (threaded or not) runs at a higher priority
than the vcpu thread. So don't worry about -RT.

About bypass: the smaller number of instructions between device ISR and
injection of interrupt to guest, the better, as that will translate
directly to reduction in interrupt latency times, which is important, as
it determines

1. how often you can switch from pollmode to ACPI C-states.
2. whether the realtime workload is virtualizable.

The answer to properties of request_threaded_irq() is: don't know.

> > 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 linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/