[PATCH net 03/10] net: pse-pd: do not keep a failed IRQ in pcdev->irq

From: Carlo Szelinsky

Date: Sun Oct 18 2026 - 04:26:28 EST


devm_pse_irq_helper() keeps the IRQ number in pcdev->irq even when the
IRQ request failed. The failed probe then runs
pse_controller_unregister(), which calls disable_irq() on that line. If
another device owns it, that device stops getting interrupts.

Clear pcdev->irq when the request fails. It is now set before the
request, because pse_isr() can run as soon as the IRQ is enabled and
pse_pw_d_is_sw_pw_control() reads it.

Fixes: ffef61d6d273 ("net: pse-pd: Add support for budget evaluation strategies")
Signed-off-by: Carlo Szelinsky <github@xxxxxxxxxxxx>
---
drivers/net/pse-pd/pse_core.c | 12 +++++++++---
1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/drivers/net/pse-pd/pse_core.c b/drivers/net/pse-pd/pse_core.c
index 1710f9bb7d27..65a41c517b35 100644
--- a/drivers/net/pse-pd/pse_core.c
+++ b/drivers/net/pse-pd/pse_core.c
@@ -1348,14 +1348,20 @@ int devm_pse_irq_helper(struct pse_controller_dev *pcdev, int irq,
if (!h->notifs_mask)
return -ENOMEM;

+ /* pse_isr() can run as soon as the IRQ is enabled, and
+ * pse_pw_d_is_sw_pw_control() reads pcdev->irq.
+ */
+ pcdev->irq = irq;
ret = devm_request_threaded_irq(dev, irq, NULL, pse_isr,
IRQF_ONESHOT | irq_flags,
irq_name, h);
- if (ret)
+ if (ret) {
+ pcdev->irq = 0;
dev_err(pcdev->dev, "Failed to request IRQ %d\n", irq);
+ return ret;
+ }

- pcdev->irq = irq;
- return ret;
+ return 0;
}
EXPORT_SYMBOL_GPL(devm_pse_irq_helper);

--
2.43.0