[PATCH 3/3] staging: axis-fifo: improve IRQ handler
From: Josh Law
Date: Sat Feb 28 2026 - 19:58:38 EST
Return IRQ_NONE when no interrupts were triggered to avoid spurious interrupt storms, and only clear the active interrupts instead of blindly clearing all interrupts by writing 'intr' to the ISR instead of XLLF_INT_CLEAR_ALL.
Signed-off-by: Josh Law <objecting@xxxxxxxxxxxxx>
---
drivers/staging/axis-fifo/axis-fifo.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/staging/axis-fifo/axis-fifo.c b/drivers/staging/axis-fifo/axis-fifo.c
index 28268881cda2..aad2206b481a 100644
--- a/drivers/staging/axis-fifo/axis-fifo.c
+++ b/drivers/staging/axis-fifo/axis-fifo.c
@@ -302,6 +302,9 @@ static irqreturn_t axis_fifo_irq(int irq, void *dw)
isr = ioread32(fifo->base_addr + XLLF_ISR_OFFSET);
intr = ier & isr;
+ if (!intr)
+ return IRQ_NONE;
+
if (intr & XLLF_INT_RC_MASK)
wake_up(&fifo->read_queue);
@@ -324,7 +327,7 @@ static irqreturn_t axis_fifo_irq(int irq, void *dw)
dev_err(fifo->dt_device,
"transmit length mismatch error interrupt\n");
- iowrite32(XLLF_INT_CLEAR_ALL, fifo->base_addr + XLLF_ISR_OFFSET);
+ iowrite32(intr, fifo->base_addr + XLLF_ISR_OFFSET);
return IRQ_HANDLED;
}
--
2.43.0