From a3fdfb7110bcc4edb489184bba209a6b1838a5bc Mon Sep 17 00:00:00 2001 From: Paul Mundt Date: Fri, 2 Nov 2007 12:16:51 +0900 Subject: [PATCH] --- yaml --- r: 73082 b: refs/heads/master c: 110ed28246a0063a5984d7f72ba5c97f154a51cf h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/sh/Kconfig.debug | 8 ++++++++ trunk/arch/sh/kernel/irq.c | 8 ++++---- trunk/include/asm-sh/irq.h | 2 +- 4 files changed, 14 insertions(+), 6 deletions(-) diff --git a/[refs] b/[refs] index 2521bd73ceaa..5ca0ef860532 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 0e670685e4925930000a678c74eb1cbf23b415fa +refs/heads/master: 110ed28246a0063a5984d7f72ba5c97f154a51cf diff --git a/trunk/arch/sh/Kconfig.debug b/trunk/arch/sh/Kconfig.debug index b507b501f0cf..ab2f9f3c354c 100644 --- a/trunk/arch/sh/Kconfig.debug +++ b/trunk/arch/sh/Kconfig.debug @@ -86,6 +86,14 @@ config 4KSTACKS on the VM subsystem for higher order allocations. This option will also use IRQ stacks to compensate for the reduced stackspace. +config IRQSTACKS + bool "Use separate kernel stacks when processing interrupts" + depends on DEBUG_KERNEL + help + If you say Y here the kernel will use separate kernel stacks + for handling hard and soft interrupts. This can help avoid + overflowing the process kernel stacks. + config SH_KGDB bool "Include KGDB kernel debugger" select FRAME_POINTER diff --git a/trunk/arch/sh/kernel/irq.c b/trunk/arch/sh/kernel/irq.c index 4b49d03ffbd2..348da194ec99 100644 --- a/trunk/arch/sh/kernel/irq.c +++ b/trunk/arch/sh/kernel/irq.c @@ -69,7 +69,7 @@ int show_interrupts(struct seq_file *p, void *v) } #endif -#ifdef CONFIG_4KSTACKS +#ifdef CONFIG_IRQSTACKS /* * per-CPU IRQ handling contexts (thread information and stack) */ @@ -85,7 +85,7 @@ static union irq_ctx *softirq_ctx[NR_CPUS] __read_mostly; asmlinkage int do_IRQ(unsigned int irq, struct pt_regs *regs) { struct pt_regs *old_regs = set_irq_regs(regs); -#ifdef CONFIG_4KSTACKS +#ifdef CONFIG_IRQSTACKS union irq_ctx *curctx, *irqctx; #endif @@ -109,7 +109,7 @@ asmlinkage int do_IRQ(unsigned int irq, struct pt_regs *regs) irq = irq_demux(evt2irq(irq)); -#ifdef CONFIG_4KSTACKS +#ifdef CONFIG_IRQSTACKS curctx = (union irq_ctx *)current_thread_info(); irqctx = hardirq_ctx[smp_processor_id()]; @@ -157,7 +157,7 @@ asmlinkage int do_IRQ(unsigned int irq, struct pt_regs *regs) return 1; } -#ifdef CONFIG_4KSTACKS +#ifdef CONFIG_IRQSTACKS static char softirq_stack[NR_CPUS * THREAD_SIZE] __attribute__((__section__(".bss.page_aligned"))); diff --git a/trunk/include/asm-sh/irq.h b/trunk/include/asm-sh/irq.h index c61d902b8bff..11850f65c922 100644 --- a/trunk/include/asm-sh/irq.h +++ b/trunk/include/asm-sh/irq.h @@ -41,7 +41,7 @@ static inline int generic_irq_demux(int irq) #define irq_canonicalize(irq) (irq) #define irq_demux(irq) sh_mv.mv_irq_demux(irq) -#ifdef CONFIG_4KSTACKS +#ifdef CONFIG_IRQSTACKS extern void irq_ctx_init(int cpu); extern void irq_ctx_exit(int cpu); # define __ARCH_HAS_DO_SOFTIRQ