Hi Alex, On 3/9/24 00:05, Alex Williamson wrote: > The eventfd_ctx trigger pointer of the vfio_fsl_mc_irq object is > initially NULL and may become NULL if the user sets the trigger > eventfd to -1. The interrupt handler itself is guaranteed that > trigger is always valid between request_irq() and free_irq(), but > the loopback testing mechanisms to invoke the handler function > need to test the trigger. The triggering and setting ioctl paths > both make use of igate and are therefore mutually exclusive. > > The vfio-fsl-mc driver does not make use of irqfds, nor does it > support any sort of masking operations, therefore unlike vfio-pci > and vfio-platform, the flow can remain essentially unchanged. > > Cc: Diana Craciun <diana.craciun@xxxxxxxxxxx> > Cc: stable@xxxxxxxxxxxxxxx > Fixes: cc0ee20bd969 ("vfio/fsl-mc: trigger an interrupt via eventfd") > Signed-off-by: Alex Williamson <alex.williamson@xxxxxxxxxx> Reviewed-by: Eric Auger <eric.auger@xxxxxxxxxx> Eric > --- > drivers/vfio/fsl-mc/vfio_fsl_mc_intr.c | 7 ++++--- > 1 file changed, 4 insertions(+), 3 deletions(-) > > diff --git a/drivers/vfio/fsl-mc/vfio_fsl_mc_intr.c b/drivers/vfio/fsl-mc/vfio_fsl_mc_intr.c > index d62fbfff20b8..82b2afa9b7e3 100644 > --- a/drivers/vfio/fsl-mc/vfio_fsl_mc_intr.c > +++ b/drivers/vfio/fsl-mc/vfio_fsl_mc_intr.c > @@ -141,13 +141,14 @@ static int vfio_fsl_mc_set_irq_trigger(struct vfio_fsl_mc_device *vdev, > irq = &vdev->mc_irqs[index]; > > if (flags & VFIO_IRQ_SET_DATA_NONE) { > - vfio_fsl_mc_irq_handler(hwirq, irq); > + if (irq->trigger) > + eventfd_signal(irq->trigger); > > } else if (flags & VFIO_IRQ_SET_DATA_BOOL) { > u8 trigger = *(u8 *)data; > > - if (trigger) > - vfio_fsl_mc_irq_handler(hwirq, irq); > + if (trigger && irq->trigger) > + eventfd_signal(irq->trigger); > } > > return 0;