[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v4 19/19] spapr: Work around spurious warnings from vfio INTx
From: |
Greg Kurz |
Subject: |
Re: [PATCH v4 19/19] spapr: Work around spurious warnings from vfio INTx initialization |
Date: |
Wed, 9 Oct 2019 19:16:39 +0200 |
On Wed, 9 Oct 2019 19:52:59 +1100
David Gibson <address@hidden> wrote:
> On Wed, Oct 09, 2019 at 10:37:38AM +0200, Greg Kurz wrote:
> > On Wed, 9 Oct 2019 17:08:18 +1100
> > David Gibson <address@hidden> wrote:
> >
> > > Traditional PCI INTx for vfio devices can only perform well if using
> > > an in-kernel irqchip. Therefore, vfio_intx_update() issues a warning
> > > if an in kernel irqchip is not available.
> >
> > Can you elaborate on what doesn't "perform well" without an
> > in-kernel irqchip ?
>
> Not really, no, but Alex Williamson tells me it is soo.
>
> > Is it a matter of performance or is it
> > actually broken or something else ?
>
> I believe it's a matter of performance, but such a big one that it
> makes using it without kernel irqchip infeasible in many cases.
>
> > What is the impact on -machine accel=kvm,kernel-irqchip=off which
> > always spit this warning ?
>
> It should still spit that warning.
>
Yeah of course it does, but it is expected that we cannot setup
the irqfd since we deliberately don't have an in-kernel irqchip,
isn't it ? Why spit a warning in this case ? Or is it just a not
very user friendly way of saying "you will have poor performance
if the VFIO device uses PCI INTx" ?
> > > We usually do have an in-kernel irqchip available for pseries machines
> > > on POWER hosts. However, because the platform allows feature
> > > negotiation of what interrupt controller model to use, we don't
> > > currently initialize it until machine reset. vfio_intx_update() is
> > > called (first) from vfio_realize() before that, so it can issue a
> > > spurious warning, even if we will have an in kernel irqchip by the
> > > time we need it.
> > >
> > > To workaround this, make a call to spapr_irq_update_active_intc() from
> > > spapr_irq_init() which is called at machine realize time, before the
> > > vfio realize. This call will be pretty much obsoleted by the later
> > > call at reset time, but it serves to suppress the spurious warning
> > > from VFIO.
> > >
> > > Cc: Alex Williamson <address@hidden>
> > > Cc: Alexey Kardashevskiy <address@hidden>
> > >
> > > Signed-off-by: David Gibson <address@hidden>
> > > ---
> > > hw/ppc/spapr_irq.c | 11 ++++++++++-
> > > 1 file changed, 10 insertions(+), 1 deletion(-)
> > >
> > > diff --git a/hw/ppc/spapr_irq.c b/hw/ppc/spapr_irq.c
> > > index 7964e4a1b8..3aeb523f3e 100644
> > > --- a/hw/ppc/spapr_irq.c
> > > +++ b/hw/ppc/spapr_irq.c
> > > @@ -274,6 +274,14 @@ void spapr_irq_init(SpaprMachineState *spapr, Error
> > > **errp)
> > >
> > > spapr->qirqs = qemu_allocate_irqs(spapr_set_irq, spapr,
> > > smc->nr_xirqs + SPAPR_XIRQ_BASE);
> > > +
> > > + /*
> > > + * Mostly we don't actually need this until reset, except that not
> > > + * having this set up can cause VFIO devices to issue a
> > > + * false-positive warning during realize(), because they don't yet
> > > + * have an in-kernel irq chip.
> > > + */
> > > + spapr_irq_update_active_intc(spapr);
> > > }
> > >
> > > int spapr_irq_claim(SpaprMachineState *spapr, int irq, bool lsi, Error
> > > **errp)
> > > @@ -429,7 +437,8 @@ void spapr_irq_update_active_intc(SpaprMachineState
> > > *spapr)
> > > * this.
> > > */
> > > new_intc = SPAPR_INTC(spapr->xive);
> > > - } else if (spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) {
> > > + } else if (spapr->ov5_cas
> > > + && spapr_ovec_test(spapr->ov5_cas, OV5_XIVE_EXPLOIT)) {
> > > new_intc = SPAPR_INTC(spapr->xive);
> > > } else {
> > > new_intc = SPAPR_INTC(spapr->ics);
> >
>
pgpwf0X3zGRfO.pgp
Description: OpenPGP digital signature
- Re: [PATCH v4 18/19] spapr: Handle irq backend changes with VFIO PCI devices, (continued)
- [PATCH v4 06/19] spapr, xics, xive: Move irq claim and free from SpaprIrq to SpaprInterruptController, David Gibson, 2019/10/09
- [PATCH v4 14/19] spapr, xics, xive: Move SpaprIrq::post_load hook to backends, David Gibson, 2019/10/09
- [PATCH v4 16/19] spapr: Move SpaprIrq::nr_xirqs to SpaprMachineClass, David Gibson, 2019/10/09
- [PATCH v4 05/19] spapr, xics, xive: Move cpu_intc_create from SpaprIrq to SpaprInterruptController, David Gibson, 2019/10/09
- [PATCH v4 19/19] spapr: Work around spurious warnings from vfio INTx initialization, David Gibson, 2019/10/09
[PATCH v4 15/19] spapr: Remove SpaprIrq::nr_msis, David Gibson, 2019/10/09
[PATCH v4 01/19] xive: Make some device types not user creatable, David Gibson, 2019/10/09
[PATCH v4 08/19] spapr, xics, xive: Move set_irq from SpaprIrq to SpaprInterruptController, David Gibson, 2019/10/09
[PATCH v4 07/19] spapr: Formalize notion of active interrupt controller, David Gibson, 2019/10/09