[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [RFC 5/5] spapr: Work around spurious warnings from vfio INTx initia
From: |
Cédric Le Goater |
Subject: |
Re: [RFC 5/5] spapr: Work around spurious warnings from vfio INTx initialization |
Date: |
Thu, 17 Oct 2019 10:43:11 +0200 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.1.0 |
On 17/10/2019 07:42, David Gibson 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.
>
> 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 45544b8976..bb91c61fa0 100644
> --- a/hw/ppc/spapr_irq.c
> +++ b/hw/ppc/spapr_irq.c
> @@ -345,6 +345,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);
This will call the de/activate hooks of the irq chip very early
before reset and CAS, and won't call them at reset if the intc
pointers are the same (xive only for instance). It breaks very
obviously the emulated XIVE device which won't reset the OS CAM
line with the CPU id values and CPU notification will be broken.
We have to find something else.
> }
>
> int spapr_irq_claim(SpaprMachineState *spapr, int irq, bool lsi, Error
> **errp)
> @@ -500,7 +508,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)) {
This change can go in another patch.
C.
> new_intc = SPAPR_INTC(spapr->xive);
> } else {
> new_intc = SPAPR_INTC(spapr->ics);
>
- [RFC 0/5] Handle PAPR irq chip changes for VFIO devices, David Gibson, 2019/10/17
- [RFC 1/5] kvm: Introduce KVM irqchip change notifier, David Gibson, 2019/10/17
- [RFC 3/5] vfio/pci: Respond to KVM irqchip change notifier, David Gibson, 2019/10/17
- [RFC 2/5] vfio/pci: Split vfio_intx_update(), David Gibson, 2019/10/17
- [RFC 4/5] spapr: Handle irq backend changes with VFIO PCI devices, David Gibson, 2019/10/17
- [RFC 5/5] spapr: Work around spurious warnings from vfio INTx initialization, David Gibson, 2019/10/17
- Re: [RFC 5/5] spapr: Work around spurious warnings from vfio INTx initialization,
Cédric Le Goater <=