[PATCH v2 05/10] staging: axis-fifo: improve IRQ handler
From: Josh Law
Date: Sun Mar 01 2026 - 16:50:18 EST
From: Josh Law <objecting@xxxxxxxxxxxxx>
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