powerpc: Check !irq instead of irq == NO_IRQ and remove NO_IRQ
authorChristophe Leroy <christophe.leroy@csgroup.eu>
Mon, 23 Jan 2023 12:26:46 +0000 (13:26 +0100)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 30 Jan 2023 06:53:05 +0000 (17:53 +1100)
NO_IRQ is a relic from the old days. It is not used anymore in core
functions. By the way, function irq_of_parse_and_map() returns value 0
on error.

In some drivers, NO_IRQ is erroneously used to check the return of
irq_of_parse_and_map().

It is not a real bug today because the only architectures using the
drivers being fixed by this patch define NO_IRQ as 0, but there are
architectures which define NO_IRQ as -1. If one day those
architectures start using the non fixed drivers, there will be a
problem.

Long time ago Linus advocated for not using NO_IRQ, see
https://lore.kernel.org/all/Pine.LNX.4.64.0511211150040.13959@g5.osdl.org

He re-iterated the same view recently in
https://lore.kernel.org/all/CAHk-=wg2Pkb9kbfbstbB91AJA2SF6cySbsgHG-iQMq56j3VTcA@mail.gmail.com

So test !irq instead of tesing irq == NO_IRQ.

All other usage of NO_IRQ for powerpc were removed in previous cycles so
the time has come to remove NO_IRQ completely for powerpc.

Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Link: https://lore.kernel.org/r/4b8d4f96140af01dec3a3330924dda8b2451c316.1674476798.git.christophe.leroy@csgroup.eu
arch/powerpc/include/asm/irq.h
arch/powerpc/platforms/44x/fsp2.c

index 5c1516a..deadd21 100644 (file)
@@ -16,9 +16,6 @@
 
 extern atomic_t ppc_n_lost_interrupts;
 
-/* This number is used when no interrupt has been assigned */
-#define NO_IRQ                 (0)
-
 /* Total number of virq in the platform */
 #define NR_IRQS                CONFIG_NR_IRQS
 
index e2e4f6d..56d91db 100644 (file)
@@ -205,7 +205,7 @@ static void __init node_irq_request(const char *compat, irq_handler_t errirq_han
 
        for_each_compatible_node(np, NULL, compat) {
                irq = irq_of_parse_and_map(np, 0);
-               if (irq == NO_IRQ) {
+               if (!irq) {
                        pr_err("device tree node %pOFn is missing a interrupt",
                              np);
                        of_node_put(np);