]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
irqchip/gic-v3: Print a warning for out-of-range interrupt numbers
authorGeert Uytterhoeven <geert+renesas@glider.be>
Fri, 6 Mar 2026 12:13:32 +0000 (13:13 +0100)
committerThomas Gleixner <tglx@kernel.org>
Thu, 26 Mar 2026 16:26:14 +0000 (17:26 +0100)
gic_irq_domain_translate() does not check if an interrupt number lies
within the valid range of the specified interrupt type.  Add these checks,
and print a warning if the interrupt number is out of range.

This can help flagging incorrectly described Extended SPI and PPI
interrupts in DT.

Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
Signed-off-by: Thomas Gleixner <tglx@kernel.org>
Acked-by: Marc Zyngier <maz@kernel.org>
Link: https://patch.msgid.link/ce695ea46decc816974179314a86f2b9b5cad6a9.1772799134.git.geert+renesas@glider.be
drivers/irqchip/irq-gic-v3.c

index 6dc9827357a21ae05dd838fb717871c73f3c7562..99444a1b2ffa2fd252521ab028239e7c276ece49 100644 (file)
@@ -1603,15 +1603,23 @@ static int gic_irq_domain_translate(struct irq_domain *d,
 
                switch (fwspec->param[0]) {
                case 0:                 /* SPI */
+                       if (fwspec->param[1] > 987)
+                               pr_warn_once("SPI %u out of range (use ESPI?)\n", fwspec->param[1]);
                        *hwirq = fwspec->param[1] + 32;
                        break;
                case 1:                 /* PPI */
+                       if (fwspec->param[1] > 15)
+                               pr_warn_once("PPI %u out of range (use EPPI?)\n", fwspec->param[1]);
                        *hwirq = fwspec->param[1] + 16;
                        break;
                case 2:                 /* ESPI */
+                       if (fwspec->param[1] > 1023)
+                               pr_warn_once("ESPI %u out of range\n", fwspec->param[1]);
                        *hwirq = fwspec->param[1] + ESPI_BASE_INTID;
                        break;
                case 3:                 /* EPPI */
+                       if (fwspec->param[1] > 63)
+                               pr_warn_once("EPPI %u out of range\n", fwspec->param[1]);
                        *hwirq = fwspec->param[1] + EPPI_BASE_INTID;
                        break;
                case GIC_IRQ_TYPE_LPI:  /* LPI */