From: David Marchand Date: Fri, 29 Oct 2021 07:38:19 +0000 (+0200) Subject: bus/pci: resize interrupt event list only for MSIX X-Git-Url: http://git.droids-corp.org/?a=commitdiff_plain;h=eb89595d45ca268ebe6c0cb88f0ae17dba08d8f6;p=dpdk.git 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 --- 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) {