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 /arch/parisc/kernel | |
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 'arch/parisc/kernel')
-rw-r--r-- | arch/parisc/kernel/irq.c | 17 |
1 files changed, 2 insertions, 15 deletions
diff --git a/arch/parisc/kernel/irq.c b/arch/parisc/kernel/irq.c index 2e6443b1e922..ef5927685299 100644 --- a/arch/parisc/kernel/irq.c +++ b/arch/parisc/kernel/irq.c | |||
@@ -499,22 +499,9 @@ static void execute_on_irq_stack(void *func, unsigned long param1) | |||
499 | *irq_stack_in_use = 1; | 499 | *irq_stack_in_use = 1; |
500 | } | 500 | } |
501 | 501 | ||
502 | asmlinkage void do_softirq(void) | 502 | void do_softirq_own_stack(void) |
503 | { | 503 | { |
504 | __u32 pending; | 504 | execute_on_irq_stack(__do_softirq, 0); |
505 | unsigned long flags; | ||
506 | |||
507 | if (in_interrupt()) | ||
508 | return; | ||
509 | |||
510 | local_irq_save(flags); | ||
511 | |||
512 | pending = local_softirq_pending(); | ||
513 | |||
514 | if (pending) | ||
515 | execute_on_irq_stack(__do_softirq, 0); | ||
516 | |||
517 | local_irq_restore(flags); | ||
518 | } | 505 | } |
519 | #endif /* CONFIG_IRQSTACKS */ | 506 | #endif /* CONFIG_IRQSTACKS */ |
520 | 507 | ||