[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH 10/25] spapr: add MMIO handlers for the XIVE int
From: |
Benjamin Herrenschmidt |
Subject: |
Re: [Qemu-devel] [PATCH 10/25] spapr: add MMIO handlers for the XIVE interrupt sources |
Date: |
Sat, 02 Dec 2017 08:28:50 -0600 |
On Wed, 2017-11-29 at 17:23 +0100, Cédric Le Goater wrote:
> On 11/29/2017 02:56 PM, Cédric Le Goater wrote:
> > > > > > + switch (offset) {
> > > > > > + case 0:
> > > > > > + spapr_xive_source_eoi(xive, lisn);
> > > > >
> > > > > Hrm. I don't love that you're dealing with clearing that LSI bit
> > > > > here, but setting it at a different level.
> > > > >
> > > > > The state machines are doing my head in a bit, is there any way
> > > > > you could derive the STATUS_SENT bit from the PQ bits?
> > > >
> > > > Yes. I should.
> > > >
> > > > I am also lacking a guest driver to exercise these LSIs so I didn't
> > > > pay a lot of attention to level interrupts. Any idea ?
> > >
> > > How about an old-school emulated PCI device? Maybe rtl8139?
> >
> > Perfect. The current model is working but I will see how I can
> > improve it to use the PQ bits instead.
>
> Using the PQ bits is simplifying the model but we still have to
> maintain an array to store the IRQ type.
>
> There are 3 unused bits in the IVE descriptor, bits[1-3]:
>
> #define IVE_VALID PPC_BIT(0)
> #define IVE_EQ_BLOCK PPC_BITMASK(4, 7) /* Destination EQ block# */
> #define IVE_EQ_INDEX PPC_BITMASK(8, 31) /* Destination EQ index */
> #define IVE_MASKED PPC_BIT(32) /* Masked */
> #define IVE_EQ_DATA PPC_BITMASK(33, 63) /* Data written to the EQ
> */
>
> We could hijack one of them to store the LSI type and get rid of
> the type array. Would you object to that ?
This won't work well if/when you implement a real HW XIVE.
Another option is to have different source objects for LSIs and MSIs.
Cheers,
Ben.
>
> C.