Re: [dpdk-dev] [EXT] [PATCH] interrupts: do not resize event list for non MSIX
From: Harman Kalra <hidden>
Date: 2021-10-29 09:38:53
-----Original Message-----
From: David Marchand <redacted>
Sent: Friday, October 29, 2021 1:08 PM
To: dev@dpdk.org
Cc: Anatoly Burakov <redacted>; Dmitry Kozlyuk
[off-list ref]; Harman Kalra [off-list ref]
Subject: [EXT] [PATCH] interrupts: do not resize event list for non MSIX
External Email
----------------------------------------------------------------------
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")Thanks David for fixing this. Acked-by: Harman Kalra <redacted> Thanks Harman
quoted hunk ↗ jump to hunk
Signed-off-by: David Marchand <redacted> --- 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-quoted
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.23.0