diff options
Diffstat (limited to 'arch/sh')
-rw-r--r-- | arch/sh/Kconfig.debug | 8 | ||||
-rw-r--r-- | arch/sh/kernel/irq.c | 8 |
2 files changed, 12 insertions, 4 deletions
diff --git a/arch/sh/Kconfig.debug b/arch/sh/Kconfig.debug index b507b501f0cf..ab2f9f3c354c 100644 --- a/arch/sh/Kconfig.debug +++ b/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/arch/sh/kernel/irq.c b/arch/sh/kernel/irq.c index 4b49d03ffbd2..348da194ec99 100644 --- a/arch/sh/kernel/irq.c +++ b/arch/sh/kernel/irq.c @@ -69,7 +69,7 @@ unlock: } #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"))); |