From 39ac394aa7a8dd4ece414e49b7521501d7d44d04 Mon Sep 17 00:00:00 2001 From: Harman Kalra Date: Wed, 3 Nov 2021 13:29:14 +0530 Subject: [PATCH] common/cnxk: fix device MSI-X greater than default value Handling the case where number of MSIX interrupts are greater than default value i.e. PLT_MAX_RXTX_INTR_VEC_ID. On PCI probe device is queried for supported MSIX interrupts, and respective interrupt resources are reallocated with this value. Same MSIX count should be used while registering new interrupt vectors. Fixes: 8cb5d08db940 ("interrupts: extend event list") Signed-off-by: Harman Kalra Acked-by: Jerin Jacob --- drivers/common/cnxk/roc_irq.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/drivers/common/cnxk/roc_irq.c b/drivers/common/cnxk/roc_irq.c index 3b34467b96..7a24297d72 100644 --- a/drivers/common/cnxk/roc_irq.c +++ b/drivers/common/cnxk/roc_irq.c @@ -14,7 +14,8 @@ #include #define MSIX_IRQ_SET_BUF_LEN \ - (sizeof(struct vfio_irq_set) + sizeof(int) * (PLT_MAX_RXTX_INTR_VEC_ID)) + (sizeof(struct vfio_irq_set) + sizeof(int) * \ + (plt_intr_max_intr_get(intr_handle))) static int irq_get_info(struct plt_intr_handle *intr_handle) @@ -34,7 +35,7 @@ irq_get_info(struct plt_intr_handle *intr_handle) plt_base_dbg("Flags=0x%x index=0x%x count=0x%x max_intr_vec_id=0x%x", irq.flags, irq.index, irq.count, PLT_MAX_RXTX_INTR_VEC_ID); - if (irq.count > PLT_MAX_RXTX_INTR_VEC_ID) { + if (irq.count == 0) { plt_err("HW max=%d > PLT_MAX_RXTX_INTR_VEC_ID: %d", irq.count, PLT_MAX_RXTX_INTR_VEC_ID); plt_intr_max_intr_set(intr_handle, PLT_MAX_RXTX_INTR_VEC_ID); @@ -92,14 +93,6 @@ irq_init(struct plt_intr_handle *intr_handle) int32_t *fd_ptr; uint32_t i; - if (plt_intr_max_intr_get(intr_handle) > - PLT_MAX_RXTX_INTR_VEC_ID) { - plt_err("Max_intr=%d greater than PLT_MAX_RXTX_INTR_VEC_ID=%d", - plt_intr_max_intr_get(intr_handle), - PLT_MAX_RXTX_INTR_VEC_ID); - return -ERANGE; - } - len = sizeof(struct vfio_irq_set) + sizeof(int32_t) * plt_intr_max_intr_get(intr_handle); -- 2.39.5