In case of QINT interrupt occurrence, SW fails to clear the QINT line resulting in recursive interrupts because currently interrupt handler gets the cause of the interrupt by reading NIX_LF_RQ[SQ/CQ/AURA/POOL]_OP_INT but does not write 1 to clear RQ[SQ/CQ/ERR]_INT field in respective NIX_LF_RQ[SQ/CQ/AURA/POOL]_OP_INT registers.
Fixes: dc47ba15f645 ("net/octeontx2: handle queue specific error interrupts") Fixes: 50b95c3ea7af ("mempool/octeontx2: add NPA IRQ handler") Signed-off-by: Harman Kalra <hka...@marvell.com> --- drivers/mempool/octeontx2/otx2_mempool_irq.c | 2 +- drivers/net/octeontx2/otx2_ethdev_irq.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/mempool/octeontx2/otx2_mempool_irq.c b/drivers/mempool/octeontx2/otx2_mempool_irq.c index ce4104453..5fa22b961 100644 --- a/drivers/mempool/octeontx2/otx2_mempool_irq.c +++ b/drivers/mempool/octeontx2/otx2_mempool_irq.c @@ -123,7 +123,7 @@ npa_lf_q_irq_get_and_clear(struct otx2_npa_lf *lf, uint32_t q, qint = reg & 0xff; wdata &= mask; - otx2_write64(wdata, lf->base + off); + otx2_write64(wdata | qint, lf->base + off); return qint; } diff --git a/drivers/net/octeontx2/otx2_ethdev_irq.c b/drivers/net/octeontx2/otx2_ethdev_irq.c index 9006e5c8b..2256e40b6 100644 --- a/drivers/net/octeontx2/otx2_ethdev_irq.c +++ b/drivers/net/octeontx2/otx2_ethdev_irq.c @@ -138,7 +138,7 @@ nix_lf_q_irq_get_and_clear(struct otx2_eth_dev *dev, uint16_t q, qint = reg & 0xff; wdata &= mask; - otx2_write64(wdata, dev->base + off); + otx2_write64(wdata | qint, dev->base + off); return qint; } -- 2.18.0