From eb89595d45ca268ebe6c0cb88f0ae17dba08d8f6 Mon Sep 17 00:00:00 2001 From: David Marchand Date: Fri, 29 Oct 2021 09:38:19 +0200 Subject: [PATCH] bus/pci: resize interrupt event list only for MSIX Resizing event list only makes sense in MSIX case. Besides, event list has always been RTE_MAX_RXTX_INTR_VEC_ID large. Let's restore this assumption for code that might rely on this property and only enlarge the event list when necessary. Bugzilla ID: 843, 865 Fixes: 8cb5d08db940 ("interrupts: extend event list") Signed-off-by: David Marchand Acked-by: Harman Kalra --- drivers/bus/pci/linux/pci_vfio.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/drivers/bus/pci/linux/pci_vfio.c b/drivers/bus/pci/linux/pci_vfio.c index f622e7f8e6..edcee92556 100644 --- a/drivers/bus/pci/linux/pci_vfio.c +++ b/drivers/bus/pci/linux/pci_vfio.c @@ -266,12 +266,6 @@ pci_vfio_setup_interrupts(struct rte_pci_device *dev, int vfio_dev_fd) return -1; } - /* Reallocate the efds and elist fields of intr_handle based - * on PCI device MSIX size. - */ - if (rte_intr_event_list_update(dev->intr_handle, irq.count)) - return -1; - /* if this vector cannot be used with eventfd, fail if we explicitly * specified interrupt type, otherwise continue */ if ((irq.flags & VFIO_IRQ_INFO_EVENTFD) == 0) { @@ -283,6 +277,14 @@ pci_vfio_setup_interrupts(struct rte_pci_device *dev, int vfio_dev_fd) continue; } + /* Reallocate the efds and elist fields of intr_handle based + * on PCI device MSIX size. + */ + if (i == VFIO_PCI_MSIX_IRQ_INDEX && + (uint32_t)rte_intr_nb_intr_get(dev->intr_handle) < irq.count && + rte_intr_event_list_update(dev->intr_handle, irq.count)) + return -1; + /* set up an eventfd for interrupts */ fd = eventfd(0, EFD_NONBLOCK | EFD_CLOEXEC); if (fd < 0) { -- 2.39.5