powerpc: Unconditionally enabled irq stacks
authorChristoph Hellwig <hch@lst.de>
Wed, 2 Jun 2010 22:24:26 +0000 (22:24 +0000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Tue, 15 Jun 2010 05:02:37 +0000 (15:02 +1000)
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>
arch/powerpc/Kconfig.debug
arch/powerpc/include/asm/irq.h
arch/powerpc/kernel/irq.c
arch/powerpc/kernel/misc_32.S
arch/powerpc/kernel/misc_64.S
arch/powerpc/kernel/process.c
arch/powerpc/kernel/setup_32.c
arch/powerpc/kernel/setup_64.c

index 53696da4518f9569aabf9a4b668cb725f1a5c4a1..2d38a50e66ba45c5ca0779bbec98efb39cb7fdcf 100644 (file)
@@ -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
index e054baef184599f2c13703ed688afb1d8fe0d3f6..ecba37a91749a1e869ed26afff90563b85813cb6 100644 (file)
@@ -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.
  */
@@ -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 */
index 30817d9b20cb59ecb12741edee7d0dacf5366dc3..3333bbdd23efaffce914c4b64c24ac766aba1fc3 100644 (file)
@@ -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;
@@ -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)
 {
@@ -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;
 
@@ -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;
index dc66d52dcff56b8be102b6ed25f160d9b44eaf87..6bbd7a604d243c9f8f9f906d683a9a20df2f9a43 100644 (file)
@@ -33,7 +33,6 @@
 
        .text
 
-#ifdef CONFIG_IRQSTACKS
 _GLOBAL(call_do_softirq)
        mflr    r0
        stw     r0,4(r1)
@@ -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.
index a2b18dffa03e4266a402aa58f8118e45fdffa74f..e5144906a56da692d1151db9e55db00ebdc73b2a 100644 (file)
@@ -28,7 +28,6 @@
 
        .text
 
-#ifdef CONFIG_IRQSTACKS
 _GLOBAL(call_do_softirq)
        mflr    r0
        std     r0,16(r1)
@@ -52,7 +51,6 @@ _GLOBAL(call_handle_irq)
        ld      r0,16(r1)
        mtlr    r0
        blr
-#endif /* CONFIG_IRQSTACKS */
 
        .section        ".toc","aw"
 PPC64_CACHES:
index 9d255b4f0a0ec72678bbad3787d596a8c6be13d1..773424df828a393d9a2860ded0b380978cfdd9cc 100644 (file)
@@ -1005,7 +1005,6 @@ out:
        return error;
 }
 
-#ifdef CONFIG_IRQSTACKS
 static inline int valid_irq_stack(unsigned long sp, struct task_struct *p,
                                  unsigned long nbytes)
 {
@@ -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)
 {
index 8f58986c2ad9a7c56117f24bee6fd089333b80b6..7d84b210f1680de8a41fb23d0ad09a7e19ce905b 100644 (file)
@@ -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;
@@ -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)
index f3fb5a79de52bfecc41d1f42237c10c1bf5168d0..643dcac40fcbc56c8cc3102a74e76a6aae4381eb 100644 (file)
@@ -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();
@@ -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)