Skip to content

Commit

Permalink
powerpc: Unconditionally enabled irq stacks
Browse files Browse the repository at this point in the history
Irq stacks provide an essential protection from stack overflows through
external interrupts, at the cost of two additionals stacks per CPU.

Enable them unconditionally to simplify the kernel build and prevent
people from accidentally disabling them.

Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
  • Loading branch information
Christoph Hellwig authored and Benjamin Herrenschmidt committed Jun 15, 2010
1 parent b636f13 commit f1ba9a5
Show file tree
Hide file tree
Showing 8 changed files with 0 additions and 42 deletions.
7 changes: 0 additions & 7 deletions arch/powerpc/Kconfig.debug
Original file line number Diff line number Diff line change
Expand Up @@ -135,13 +135,6 @@ config DEBUGGER
depends on KGDB || XMON
default y

config IRQSTACKS
bool "Use separate kernel stacks when processing interrupts"
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 VIRQ_DEBUG
bool "Expose hardware/virtual IRQ mapping via debugfs"
depends on DEBUG_FS
Expand Down
6 changes: 0 additions & 6 deletions arch/powerpc/include/asm/irq.h
Original file line number Diff line number Diff line change
Expand Up @@ -358,7 +358,6 @@ extern void exc_lvl_ctx_init(void);
#define exc_lvl_ctx_init()
#endif

#ifdef CONFIG_IRQSTACKS
/*
* Per-cpu stacks for handling hard and soft interrupts.
*/
Expand All @@ -369,11 +368,6 @@ extern void irq_ctx_init(void);
extern void call_do_softirq(struct thread_info *tp);
extern int call_handle_irq(int irq, void *p1,
struct thread_info *tp, void *func);
#else
#define irq_ctx_init()

#endif /* CONFIG_IRQSTACKS */

extern void do_IRQ(struct pt_regs *regs);

#endif /* _ASM_IRQ_H */
Expand Down
12 changes: 0 additions & 12 deletions arch/powerpc/kernel/irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -317,7 +317,6 @@ void fixup_irqs(const struct cpumask *map)
}
#endif

#ifdef CONFIG_IRQSTACKS
static inline void handle_one_irq(unsigned int irq)
{
struct thread_info *curtp, *irqtp;
Expand Down Expand Up @@ -358,12 +357,6 @@ static inline void handle_one_irq(unsigned int irq)
if (irqtp->flags)
set_bits(irqtp->flags, &curtp->flags);
}
#else
static inline void handle_one_irq(unsigned int irq)
{
generic_handle_irq(irq);
}
#endif

static inline void check_stack_overflow(void)
{
Expand Down Expand Up @@ -455,7 +448,6 @@ void exc_lvl_ctx_init(void)
}
#endif

#ifdef CONFIG_IRQSTACKS
struct thread_info *softirq_ctx[NR_CPUS] __read_mostly;
struct thread_info *hardirq_ctx[NR_CPUS] __read_mostly;

Expand Down Expand Up @@ -492,10 +484,6 @@ static inline void do_softirq_onstack(void)
irqtp->task = NULL;
}

#else
#define do_softirq_onstack() __do_softirq()
#endif /* CONFIG_IRQSTACKS */

void do_softirq(void)
{
unsigned long flags;
Expand Down
2 changes: 0 additions & 2 deletions arch/powerpc/kernel/misc_32.S
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,6 @@

.text

#ifdef CONFIG_IRQSTACKS
_GLOBAL(call_do_softirq)
mflr r0
stw r0,4(r1)
Expand All @@ -56,7 +55,6 @@ _GLOBAL(call_handle_irq)
lwz r0,4(r1)
mtlr r0
blr
#endif /* CONFIG_IRQSTACKS */

/*
* This returns the high 64 bits of the product of two 64-bit numbers.
Expand Down
2 changes: 0 additions & 2 deletions arch/powerpc/kernel/misc_64.S
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@

.text

#ifdef CONFIG_IRQSTACKS
_GLOBAL(call_do_softirq)
mflr r0
std r0,16(r1)
Expand All @@ -52,7 +51,6 @@ _GLOBAL(call_handle_irq)
ld r0,16(r1)
mtlr r0
blr
#endif /* CONFIG_IRQSTACKS */

.section ".toc","aw"
PPC64_CACHES:
Expand Down
5 changes: 0 additions & 5 deletions arch/powerpc/kernel/process.c
Original file line number Diff line number Diff line change
Expand Up @@ -1005,7 +1005,6 @@ int sys_execve(unsigned long a0, unsigned long a1, unsigned long a2,
return error;
}

#ifdef CONFIG_IRQSTACKS
static inline int valid_irq_stack(unsigned long sp, struct task_struct *p,
unsigned long nbytes)
{
Expand All @@ -1030,10 +1029,6 @@ static inline int valid_irq_stack(unsigned long sp, struct task_struct *p,
return 0;
}

#else
#define valid_irq_stack(sp, p, nb) 0
#endif /* CONFIG_IRQSTACKS */

int validate_sp(unsigned long sp, struct task_struct *p,
unsigned long nbytes)
{
Expand Down
4 changes: 0 additions & 4 deletions arch/powerpc/kernel/setup_32.c
Original file line number Diff line number Diff line change
Expand Up @@ -241,7 +241,6 @@ int __init ppc_init(void)

arch_initcall(ppc_init);

#ifdef CONFIG_IRQSTACKS
static void __init irqstack_early_init(void)
{
unsigned int i;
Expand All @@ -255,9 +254,6 @@ static void __init irqstack_early_init(void)
__va(lmb_alloc(THREAD_SIZE, THREAD_SIZE));
}
}
#else
#define irqstack_early_init()
#endif

#if defined(CONFIG_BOOKE) || defined(CONFIG_40x)
static void __init exc_lvl_early_init(void)
Expand Down
4 changes: 0 additions & 4 deletions arch/powerpc/kernel/setup_64.c
Original file line number Diff line number Diff line change
Expand Up @@ -432,7 +432,6 @@ static u64 slb0_limit(void)
return 1UL << SID_SHIFT;
}

#ifdef CONFIG_IRQSTACKS
static void __init irqstack_early_init(void)
{
u64 limit = slb0_limit();
Expand All @@ -451,9 +450,6 @@ static void __init irqstack_early_init(void)
THREAD_SIZE, limit));
}
}
#else
#define irqstack_early_init()
#endif

#ifdef CONFIG_PPC_BOOK3E
static void __init exc_lvl_early_init(void)
Expand Down

0 comments on commit f1ba9a5

Please sign in to comment.