path: root/arch/Kconfig
diff options
authorFrederic Weisbecker <>2013-09-24 17:17:47 +0200
committerFrederic Weisbecker <>2013-10-01 12:53:27 +0200
commitcc1f027454929924471bea2f362431072e3c71be (patch)
treed5e732927b0a7ad19f9d1a3f4aa30c4bce6ebbba /arch/Kconfig
parent0bed698a334766ed07bacd6cb33f0228003a7f61 (diff)
irq: Optimize softirq stack selection in irq exit
If irq_exit() is called on the arch's specified irq stack, it should be safe to run softirqs inline under that same irq stack as it is near empty by the time we call irq_exit(). For example if we use the same stack for both hard and soft irqs here, the worst case scenario is: hardirq -> softirq -> hardirq. But then the softirq supersedes the first hardirq as the stack user since irq_exit() is called in a mostly empty stack. So the stack merge in this case looks acceptable. Stack overrun still have a chance to happen if hardirqs have more opportunities to nest, but then it's another problem to solve. So lets adapt the irq exit's softirq stack on top of a new Kconfig symbol that can be defined when irq_exit() runs on the irq stack. That way we can spare some stack switch on irq processing and all the cache issues that come along. Acked-by: Linus Torvalds <> Signed-off-by: Frederic Weisbecker <> Cc: Benjamin Herrenschmidt <> Cc: Paul Mackerras <> Cc: Ingo Molnar <> Cc: Thomas Gleixner <> Cc: Peter Zijlstra <> Cc: H. Peter Anvin <> Cc: Linus Torvalds <> Cc: Paul Mackerras <> Cc: James Hogan <> Cc: James E.J. Bottomley <> Cc: Helge Deller <> Cc: Martin Schwidefsky <> Cc: Heiko Carstens <> Cc: David S. Miller <> Cc: Andrew Morton <>
Diffstat (limited to 'arch/Kconfig')
1 files changed, 10 insertions, 0 deletions
diff --git a/arch/Kconfig b/arch/Kconfig
index af2cc6eabcc7..ad95133f8fae 100644
--- a/arch/Kconfig
+++ b/arch/Kconfig
@@ -390,6 +390,16 @@ config HAVE_UNDERSCORE_SYMBOL_PREFIX
Some architectures generate an _ in front of C symbols; things like
module loading and assembly files need to know about this.
+ bool
+ help
+ Architecture doesn't only execute the irq handler on the irq stack
+ but also irq_exit(). This way we can process softirqs on this irq
+ stack instead of switching to a new one when we call __do_softirq()
+ in the end of an hardirq.
+ This spares a stack switch and improves cache usage on softirq
+ processing.
# ABI hall of shame