Re: [RFC PATCH v4 2/6] vfio: Introduce vGPU display irq type

From: Alex Williamson
Date: Fri Aug 02 2019 - 10:39:05 EST


On Fri, 2 Aug 2019 15:35:31 +0200
"kraxel@xxxxxxxxxx" <kraxel@xxxxxxxxxx> wrote:

> Hi,
>
> > > > Couldn't you expose this as another capability within the IRQ_INFO return
> > > > data? If you were to define it as a macro, I assume that means it would be
> > > > hard coded, in which case this probably becomes an Intel specific IRQ, rather
> > > > than what appears to be framed as a generic graphics IRQ extension. A new
> > > > capability could instead allow the vendor to specify their own value, where
> > > > we could define how userspace should interpret and make use of this value.
> > > > Thanks,
> > > Good suggestion. Currently, vfio_irq_info is used to save one irq
> > > info. What we need here is to use it to save several events info.
> > > Maybe we could figure out a general layout of this capability so that
> > > it can be leveraged by others, not only for display irq/events.
> >
> > You could also expose a device specific IRQ with count > 1 (ie. similar
> > to MSI/X) and avoid munging the eventfd value, which is not something
> > we do elsewhere, at least in vfio. Thanks,
>
> Well, the basic idea is to use the eventfd value to signal the kind of
> changes which did happen, simliar to IRQ status register bits.
>
> So, when the guest changes the primary plane, the mdev driver notes
> this. Same with the cursor plane. On vblank (when the guests update
> is actually applied) the mdev driver wakes the eventfd and uses eventfd
> value to signal whenever primary plane or cursor plane or both did
> change.
>
> Then userspace knows which planes need an update without an extra
> VFIO_DEVICE_QUERY_GFX_PLANE roundtrip to the kernel.
>
> Alternatively we could have one eventfd for each change type. But given
> that these changes are typically applied at the same time (vblank) we
> would have multiple eventfds being signaled at the same time. Which
> doesn't look ideal to me ...

Good point, looking at the bits in the eventfd value seems better than
a flood of concurrent interrupts. Thanks,

Alex