diff options
author | Frederic Weisbecker <fweisbec@gmail.com> | 2013-09-05 09:49:45 -0400 |
---|---|---|
committer | Frederic Weisbecker <fweisbec@gmail.com> | 2013-10-01 06:53:25 -0400 |
commit | 7d65f4a6553203da6a22097821d151fbbe7e4956 (patch) | |
tree | 4ac4162ca37756530112c29e8dbf1d2568313d81 /include/linux/interrupt.h | |
parent | ded797547548a5b8e7b92383a41e4c0e6b0ecb7f (diff) |
irq: Consolidate do_softirq() arch overriden implementations
All arch overriden implementations of do_softirq() share the following
common code: disable irqs (to avoid races with the pending check),
check if there are softirqs pending, then execute __do_softirq() on
a specific stack.
Consolidate the common parts such that archs only worry about the
stack switch.
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Cc: Paul Mackerras <paulus@au1.ibm.com>
Cc: Ingo Molnar <mingo@kernel.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Paul Mackerras <paulus@au1.ibm.com>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: James E.J. Bottomley <jejb@parisc-linux.org>
Cc: Helge Deller <deller@gmx.de>
Cc: Martin Schwidefsky <schwidefsky@de.ibm.com>
Cc: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Andrew Morton <akpm@linux-foundation.org>
Diffstat (limited to 'include/linux/interrupt.h')
-rw-r--r-- | include/linux/interrupt.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/interrupt.h b/include/linux/interrupt.h index 5e865b554940..c9e831dc80bc 100644 --- a/include/linux/interrupt.h +++ b/include/linux/interrupt.h | |||
@@ -19,6 +19,7 @@ | |||
19 | 19 | ||
20 | #include <linux/atomic.h> | 20 | #include <linux/atomic.h> |
21 | #include <asm/ptrace.h> | 21 | #include <asm/ptrace.h> |
22 | #include <asm/irq.h> | ||
22 | 23 | ||
23 | /* | 24 | /* |
24 | * These correspond to the IORESOURCE_IRQ_* defines in | 25 | * These correspond to the IORESOURCE_IRQ_* defines in |
@@ -374,6 +375,16 @@ struct softirq_action | |||
374 | 375 | ||
375 | asmlinkage void do_softirq(void); | 376 | asmlinkage void do_softirq(void); |
376 | asmlinkage void __do_softirq(void); | 377 | asmlinkage void __do_softirq(void); |
378 | |||
379 | #ifdef __ARCH_HAS_DO_SOFTIRQ | ||
380 | void do_softirq_own_stack(void); | ||
381 | #else | ||
382 | static inline void do_softirq_own_stack(void) | ||
383 | { | ||
384 | __do_softirq(); | ||
385 | } | ||
386 | #endif | ||
387 | |||
377 | extern void open_softirq(int nr, void (*action)(struct softirq_action *)); | 388 | extern void open_softirq(int nr, void (*action)(struct softirq_action *)); |
378 | extern void softirq_init(void); | 389 | extern void softirq_init(void); |
379 | extern void __raise_softirq_irqoff(unsigned int nr); | 390 | extern void __raise_softirq_irqoff(unsigned int nr); |