Re: [PATCH v2 7/7] vfio/fsl-mc: Block calling interrupt handler without trigger

From: Eric Auger
Date: Mon Mar 11 2024 - 05:30:20 EST


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;