Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[PATCH] adjust handle_IRR_event() return type

Correct the return type of handle_IRQ_event() (inconsistency noticed during
Xen development), and remove redundant declarations. The return type
adjustment required breaking out the definition of irqreturn_t into a
separate header, in order to satisfy current include order dependencies.

Signed-off-by: Jan Beulich <jbeulich@novell.com>

Cc: Richard Henderson <rth@twiddle.net>
Cc: Ivan Kokshaysky <ink@jurassic.park.msu.ru>
Cc: Russell King <rmk@arm.linux.org.uk>
Cc: Ian Molton <spyro@f2s.com>
Cc: Mikael Starvik <starvik@axis.com>
Cc: Yoshinori Sato <ysato@users.sourceforge.jp>
Cc: Hirokazu Takata <takata.hirokazu@renesas.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: William Lee Irwin III <wli@holomorphy.com>
Cc: "David S. Miller" <davem@davemloft.net>
Cc: Miles Bader <uclinux-v850@lsi.nec.co.jp>
Cc: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: Roman Zippel <zippel@linux-m68k.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by

Jan Beulich and committed by
Linus Torvalds
908dcecd a5d6839b

+31 -57
-4
include/asm-alpha/irq.h
··· 92 92 struct pt_regs; 93 93 extern void (*perf_irq)(unsigned long, struct pt_regs *); 94 94 95 - struct irqaction; 96 - int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *); 97 - 98 - 99 95 #endif /* _ALPHA_IRQ_H */
-4
include/asm-arm/irq.h
··· 47 47 void enable_irq_wake(unsigned int irq); 48 48 int setup_irq(unsigned int, struct irqaction *); 49 49 50 - struct irqaction; 51 - struct pt_regs; 52 - int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *); 53 - 54 50 extern void migrate_irqs(void); 55 51 #endif 56 52
-4
include/asm-arm26/irq.h
··· 44 44 45 45 int set_irq_type(unsigned int irq, unsigned int type); 46 46 47 - int setup_irq(unsigned int, struct irqaction *); 48 - struct pt_regs; 49 - int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *); 50 - 51 47 #endif 52 48
-4
include/asm-h8300/irq.h
··· 63 63 extern void disable_irq(unsigned int); 64 64 #define disable_irq_nosync(x) disable_irq(x) 65 65 66 - struct irqaction; 67 - struct pt_regs; 68 - int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *); 69 - 70 66 #endif /* _H8300_IRQ_H_ */
-4
include/asm-m68k/irq.h
··· 130 130 */ 131 131 extern irq_node_t *new_irq_node(void); 132 132 133 - struct irqaction; 134 - struct pt_regs; 135 - int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *); 136 - 137 133 #endif /* _M68K_IRQ_H_ */
-4
include/asm-m68knommu/irq.h
··· 87 87 #define disable_irq(x) do { } while (0) 88 88 #define disable_irq_nosync(x) disable_irq(x) 89 89 90 - struct irqaction; 91 - struct pt_regs; 92 - int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *); 93 - 94 90 #endif /* _M68K_IRQ_H_ */
-4
include/asm-s390/irq.h
··· 21 21 22 22 #define touch_nmi_watchdog() do { } while(0) 23 23 24 - struct irqaction; 25 - struct pt_regs; 26 - int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *); 27 - 28 24 #endif /* __KERNEL__ */ 29 25 #endif 30 26
-4
include/asm-sparc/irq.h
··· 181 181 #define SUN4M_INT_SBUS(x) (1 << (x+7)) 182 182 #define SUN4M_INT_VME(x) (1 << (x)) 183 183 184 - struct irqaction; 185 - struct pt_regs; 186 - int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *); 187 - 188 184 #endif
-2
include/asm-v850/irq.h
··· 62 62 /* Disable an irq without waiting. */ 63 63 extern void disable_irq_nosync (unsigned int irq); 64 64 65 - extern int handle_IRQ_event(unsigned int, struct pt_regs *, struct irqaction *); 66 - 67 65 #endif /* !__ASSEMBLY__ */ 68 66 69 67 #endif /* __V850_IRQ_H__ */
+1 -20
include/linux/interrupt.h
··· 7 7 #include <linux/bitops.h> 8 8 #include <linux/preempt.h> 9 9 #include <linux/cpumask.h> 10 + #include <linux/irqreturn.h> 10 11 #include <linux/hardirq.h> 11 12 #include <linux/sched.h> 12 13 #include <asm/atomic.h> 13 14 #include <asm/ptrace.h> 14 15 #include <asm/system.h> 15 - 16 - /* 17 - * For 2.4.x compatibility, 2.4.x can use 18 - * 19 - * typedef void irqreturn_t; 20 - * #define IRQ_NONE 21 - * #define IRQ_HANDLED 22 - * #define IRQ_RETVAL(x) 23 - * 24 - * To mix old-style and new-style irq handler returns. 25 - * 26 - * IRQ_NONE means we didn't handle it. 27 - * IRQ_HANDLED means that we did have a valid interrupt and handled it. 28 - * IRQ_RETVAL(x) selects on the two depending on x being non-zero (for handled) 29 - */ 30 - typedef int irqreturn_t; 31 - 32 - #define IRQ_NONE (0) 33 - #define IRQ_HANDLED (1) 34 - #define IRQ_RETVAL(x) ((x) != 0) 35 16 36 17 struct irqaction { 37 18 irqreturn_t (*handler)(int, void *, struct pt_regs *);
+2 -1
include/linux/irq.h
··· 17 17 #include <linux/cache.h> 18 18 #include <linux/spinlock.h> 19 19 #include <linux/cpumask.h> 20 + #include <linux/irqreturn.h> 20 21 21 22 #include <asm/irq.h> 22 23 #include <asm/ptrace.h> ··· 176 175 extern int no_irq_affinity; 177 176 extern int noirqdebug_setup(char *str); 178 177 179 - extern fastcall int handle_IRQ_event(unsigned int irq, struct pt_regs *regs, 178 + extern fastcall irqreturn_t handle_IRQ_event(unsigned int irq, struct pt_regs *regs, 180 179 struct irqaction *action); 181 180 extern fastcall unsigned int __do_IRQ(unsigned int irq, struct pt_regs *regs); 182 181 extern void note_interrupt(unsigned int irq, irq_desc_t *desc,
+25
include/linux/irqreturn.h
··· 1 + /* irqreturn.h */ 2 + #ifndef _LINUX_IRQRETURN_H 3 + #define _LINUX_IRQRETURN_H 4 + 5 + /* 6 + * For 2.4.x compatibility, 2.4.x can use 7 + * 8 + * typedef void irqreturn_t; 9 + * #define IRQ_NONE 10 + * #define IRQ_HANDLED 11 + * #define IRQ_RETVAL(x) 12 + * 13 + * To mix old-style and new-style irq handler returns. 14 + * 15 + * IRQ_NONE means we didn't handle it. 16 + * IRQ_HANDLED means that we did have a valid interrupt and handled it. 17 + * IRQ_RETVAL(x) selects on the two depending on x being non-zero (for handled) 18 + */ 19 + typedef int irqreturn_t; 20 + 21 + #define IRQ_NONE (0) 22 + #define IRQ_HANDLED (1) 23 + #define IRQ_RETVAL(x) ((x) != 0) 24 + 25 + #endif
+3 -2
kernel/irq/handle.c
··· 76 76 /* 77 77 * Have got an event to handle: 78 78 */ 79 - fastcall int handle_IRQ_event(unsigned int irq, struct pt_regs *regs, 79 + fastcall irqreturn_t handle_IRQ_event(unsigned int irq, struct pt_regs *regs, 80 80 struct irqaction *action) 81 81 { 82 - int ret, retval = 0, status = 0; 82 + irqreturn_t ret, retval = IRQ_NONE; 83 + unsigned int status = 0; 83 84 84 85 if (!(action->flags & SA_INTERRUPT)) 85 86 local_irq_enable();