vfio: fix interrupts race condition
authorDavid Marchand <david.marchand@redhat.com>
Wed, 10 Jul 2019 12:33:40 +0000 (14:33 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Wed, 10 Jul 2019 16:53:47 +0000 (18:53 +0200)
commit89aac60e0be9ed95a87b16e3595f102f9faaffb4
treea087bc966c5e4b344a07376e50ee236c79ddfa77
parentd34b50181d188a17b6273ea9fcd86897a9c98872
vfio: fix interrupts race condition

Populating the eventfd in rte_intr_enable in each request to vfio
triggers a reconfiguration of the interrupt handler on the kernel side.
The problem is that rte_intr_enable is often used to re-enable masked
interrupts from drivers interrupt handlers.

This reconfiguration leaves a window during which a device could send
an interrupt and then the kernel logs this (unsolicited from the kernel
point of view) interrupt:
[158764.159833] do_IRQ: 9.34 No irq handler for vector

VFIO api makes it possible to set the fd at setup time.
Make use of this and then we only need to ask for masking/unmasking
legacy interrupts and we have nothing to do for MSI/MSIX.

"rxtx" interrupts are left untouched but are most likely subject to the
same issue.

Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=1654824
Fixes: 5c782b3928b8 ("vfio: interrupts")
Cc: stable@dpdk.org
Signed-off-by: David Marchand <david.marchand@redhat.com>
Tested-by: Shahed Shaikh <shshaikh@marvell.com>
drivers/bus/pci/linux/pci_vfio.c
lib/librte_eal/linux/eal/eal_interrupts.c