mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-11 00:09:30 -04:00
vfio: selftests: Enable asserting MSI eventfds not firing
Make it possible to assert that a given MSI eventfd did _not_ fire by adding a helper to mark an eventfd non-blocking. Demonstrate this in vfio_pci_device_test by asserting the MSI eventfd did not fire before vfio_pci_irq_trigger(). Acked-by: Shuah Khan <skhan@linuxfoundation.org> Signed-off-by: David Matlack <dmatlack@google.com> Link: https://lore.kernel.org/r/20250822212518.4156428-11-dmatlack@google.com Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
This commit is contained in:
committed by
Alex Williamson
parent
346cd58f1f
commit
924947804f
@@ -2,6 +2,7 @@
|
||||
#ifndef SELFTESTS_VFIO_LIB_INCLUDE_VFIO_UTIL_H
|
||||
#define SELFTESTS_VFIO_LIB_INCLUDE_VFIO_UTIL_H
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <string.h>
|
||||
#include <linux/vfio.h>
|
||||
#include <linux/list.h>
|
||||
@@ -130,6 +131,17 @@ void vfio_pci_irq_enable(struct vfio_pci_device *device, u32 index,
|
||||
void vfio_pci_irq_disable(struct vfio_pci_device *device, u32 index);
|
||||
void vfio_pci_irq_trigger(struct vfio_pci_device *device, u32 index, u32 vector);
|
||||
|
||||
static inline void fcntl_set_nonblock(int fd)
|
||||
{
|
||||
int r;
|
||||
|
||||
r = fcntl(fd, F_GETFL, 0);
|
||||
VFIO_ASSERT_NE(r, -1, "F_GETFL failed for fd %d\n", fd);
|
||||
|
||||
r = fcntl(fd, F_SETFL, r | O_NONBLOCK);
|
||||
VFIO_ASSERT_NE(r, -1, "F_SETFL O_NONBLOCK failed for fd %d\n", fd);
|
||||
}
|
||||
|
||||
static inline void vfio_pci_msi_enable(struct vfio_pci_device *device,
|
||||
u32 vector, int count)
|
||||
{
|
||||
|
||||
@@ -129,6 +129,7 @@ FIXTURE_TEARDOWN(vfio_pci_irq_test)
|
||||
TEST_F(vfio_pci_irq_test, enable_trigger_disable)
|
||||
{
|
||||
bool msix = variant->irq_index == VFIO_PCI_MSIX_IRQ_INDEX;
|
||||
int msi_eventfd;
|
||||
u32 count;
|
||||
u64 value;
|
||||
int i;
|
||||
@@ -147,8 +148,15 @@ TEST_F(vfio_pci_irq_test, enable_trigger_disable)
|
||||
printf("MSI%s: enabled %d interrupts\n", msix ? "-x" : "", count);
|
||||
|
||||
for (i = 0; i < count; i++) {
|
||||
msi_eventfd = self->device->msi_eventfds[i];
|
||||
|
||||
fcntl_set_nonblock(msi_eventfd);
|
||||
ASSERT_EQ(-1, read(msi_eventfd, &value, 8));
|
||||
ASSERT_EQ(EAGAIN, errno);
|
||||
|
||||
vfio_pci_irq_trigger(self->device, variant->irq_index, i);
|
||||
ASSERT_EQ(8, read(self->device->msi_eventfds[i], &value, 8));
|
||||
|
||||
ASSERT_EQ(8, read(msi_eventfd, &value, 8));
|
||||
ASSERT_EQ(1, value);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user