Re: [RFC, v0 1/3] vfio/platform: add support for msi
From: Alex Williamson
Date: Mon Nov 09 2020 - 10:28:34 EST
On Mon, 9 Nov 2020 12:11:15 +0530
Vikas Gupta <vikas.gupta@xxxxxxxxxxxx> wrote:
> Hi Alex,
>
> On Fri, Nov 6, 2020 at 8:42 AM Alex Williamson
> <alex.williamson@xxxxxxxxxx> wrote:
> >
> > On Fri, 6 Nov 2020 08:24:26 +0530
> > Vikas Gupta <vikas.gupta@xxxxxxxxxxxx> wrote:
> >
> > > Hi Alex,
> > >
> > > On Thu, Nov 5, 2020 at 12:38 PM Alex Williamson
> > > <alex.williamson@xxxxxxxxxx> wrote:
> > > >
> > > > On Thu, 5 Nov 2020 11:32:55 +0530
> > > > Vikas Gupta <vikas.gupta@xxxxxxxxxxxx> wrote:
> > > >
> > > > > diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h
> > > > > index 2f313a238a8f..aab051e8338d 100644
> > > > > --- a/include/uapi/linux/vfio.h
> > > > > +++ b/include/uapi/linux/vfio.h
> > > > > @@ -203,6 +203,7 @@ struct vfio_device_info {
> > > > > #define VFIO_DEVICE_FLAGS_AP (1 << 5) /* vfio-ap device */
> > > > > #define VFIO_DEVICE_FLAGS_FSL_MC (1 << 6) /* vfio-fsl-mc device */
> > > > > #define VFIO_DEVICE_FLAGS_CAPS (1 << 7) /* Info supports caps */
> > > > > +#define VFIO_DEVICE_FLAGS_MSI (1 << 8) /* Device supports msi */
> > > > > __u32 num_regions; /* Max region index + 1 */
> > > > > __u32 num_irqs; /* Max IRQ index + 1 */
> > > > > __u32 cap_offset; /* Offset within info struct of first cap */
> > > >
> > > > This doesn't make any sense to me, MSIs are just edge triggered
> > > > interrupts to userspace, so why isn't this fully described via
> > > > VFIO_DEVICE_GET_IRQ_INFO? If we do need something new to describe it,
> > > > this seems incomplete, which indexes are MSI (IRQ_INFO can describe
> > > > that)? We also already support MSI with vfio-pci, so a global flag for
> > > > the device advertising this still seems wrong. Thanks,
> > > >
> > > > Alex
> > > >
> > > Since VFIO platform uses indexes for IRQ numbers so I think MSI(s)
> > > cannot be described using indexes.
> >
> > That would be news for vfio-pci which has been describing MSIs with
> > sub-indexes within indexes since vfio started.
> >
> > > In the patch set there is no difference between MSI and normal
> > > interrupt for VFIO_DEVICE_GET_IRQ_INFO.
> >
> > Then what exactly is a global device flag indicating? Does it indicate
> > all IRQs are MSI?
>
> No, it's not indicating that all are MSI.
> The rationale behind adding the flag to tell user-space that platform
> device supports MSI as well. As you mentioned recently added
> capabilities can help on this, I`ll go through that.
It still seems questionable to me to use a device info capability to
describe an interrupt index specific feature. The scope seems wrong.
Why does userspace need to know that this IRQ is MSI rather than
indicating it's simply an edge triggered interrupt? That can be done
using only vfio_irq_info.flags.
> > > The patch set adds MSI(s), say as an extension, to the normal
> > > interrupts and handled accordingly.
> >
> > So we have both "normal" IRQs and MSIs? How does the user know which
> > indexes are which?
>
> With this patch set, I think this is missing and user space cannot
> know that particular index is MSI interrupt.
> For platform devices there is no such mechanism, like index and
> sub-indexes to differentiate between legacy, MSI or MSIX as it’s there
> in PCI.
Indexes and sub-indexes are a grouping mechanism of vfio to describe
related interrupts. That terminology doesn't exist on PCI either, it's
meant to be used generically. It's left to the vfio bus driver how
userspace associates a given index to a device feature.
> I believe for a particular IRQ index if the flag
> VFIO_IRQ_INFO_NORESIZE is used then user space can know which IRQ
> index has MSI(s). Does it make sense?
No, no-resize is an implementation detail, not an indication of the
interrupt mechanism. It's still not clear to me why it's important to
expose to userspace that a given interrupt is MSI versus simply
exposing it as an edge interrupt (ie. automasked = false). If it is
necessary, the most direct approach might be to expose a capability
extension in the vfio_irq_info structure to describe it. Even then
though, I don't think simply exposing a index as MSI is very
meaningful. What is userspace intended to do differently based on this
information? Thanks,
Alex