rte_intr_enable/rte_intr_disable configure the interrupt context on the kernel side (either uio or vfio). In VFIO case, calling it from the interrupt handlers triggers an unneeded interrupt handlers reconfiguration. During this reconfiguration window, the device can trigger interrupts which are left unserviced.
Reported-at: https://bugzilla.redhat.com/show_bug.cgi?id=1654824 Fixes: 245aec289338 ("net/qede: fix legacy interrupt mode") Fixes: 2ea6f76aff40 ("qede: add core driver") Cc: sta...@dpdk.org Signed-off-by: David Marchand <david.march...@redhat.com> --- drivers/net/qede/qede_ethdev.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/drivers/net/qede/qede_ethdev.c b/drivers/net/qede/qede_ethdev.c index 82363e6..807016a 100644 --- a/drivers/net/qede/qede_ethdev.c +++ b/drivers/net/qede/qede_ethdev.c @@ -245,12 +245,8 @@ static void qede_interrupt_action(struct ecore_hwfn *p_hwfn) /* Check if our device actually raised an interrupt */ status = ecore_int_igu_read_sisr_reg(ECORE_LEADING_HWFN(edev)); - if (status & 0x1) { + if (status & 0x1) qede_interrupt_action(ECORE_LEADING_HWFN(edev)); - - if (rte_intr_enable(eth_dev->intr_handle)) - DP_ERR(edev, "rte_intr_enable failed\n"); - } } static void @@ -261,8 +257,6 @@ static void qede_interrupt_action(struct ecore_hwfn *p_hwfn) struct ecore_dev *edev = &qdev->edev; qede_interrupt_action(ECORE_LEADING_HWFN(edev)); - if (rte_intr_enable(eth_dev->intr_handle)) - DP_ERR(edev, "rte_intr_enable failed\n"); } static void -- 1.8.3.1