lkml.org 
[lkml]   [2005]   [Dec]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patches in this message
    /
    Date
    From
    Subject[2.6 patch] i386: always use 4k stacks
    It seems most problems with 4k stacks are already resolved at least
    in -mm.

    I'd like to see this patch to always use 4k stacks in -mm now for
    finding any remaining problems before submitting this patch for Linus'
    tree.


    Signed-off-by: Adrian Bunk <bunk@stusta.de>
    Acked-by: Arjan van de Ven <arjan@infradead.org>

    ---

    This patch was already sent on:
    - 11 Dec 2005
    - 5 Dec 2005
    - 30 Nov 2005
    - 23 Nov 2005
    - 14 Nov 2005

    arch/i386/Kconfig.debug | 10 ----------
    arch/i386/kernel/irq.c | 10 ----------
    include/asm-i386/irq.h | 11 +++--------
    include/asm-i386/module.h | 8 +-------
    include/asm-i386/thread_info.h | 6 +-----
    5 files changed, 5 insertions(+), 40 deletions(-)

    --- linux-2.6.14-mm2-full/arch/i386/Kconfig.debug.old 2005-11-14 01:30:54.000000000 +0100
    +++ linux-2.6.14-mm2-full/arch/i386/Kconfig.debug 2005-11-14 01:31:06.000000000 +0100
    @@ -52,16 +52,6 @@
    portion of the kernel code won't be covered by a 2MB TLB anymore.
    If in doubt, say "N".

    -config 4KSTACKS
    - bool "Use 4Kb for kernel stacks instead of 8Kb"
    - depends on DEBUG_KERNEL
    - help
    - If you say Y here the kernel will use a 4Kb stacksize for the
    - kernel stack attached to each process/thread. This facilitates
    - running more threads on a system and also reduces the pressure
    - on the VM subsystem for higher order allocations. This option
    - will also use IRQ stacks to compensate for the reduced stackspace.
    -
    config X86_FIND_SMP_CONFIG
    bool
    depends on X86_LOCAL_APIC || X86_VOYAGER
    --- linux-2.6.14-mm2-full/include/asm-i386/irq.h.old 2005-11-14 01:31:18.000000000 +0100
    +++ linux-2.6.14-mm2-full/include/asm-i386/irq.h 2005-11-14 01:31:29.000000000 +0100
    @@ -27,14 +27,9 @@
    # define ARCH_HAS_NMI_WATCHDOG /* See include/linux/nmi.h */
    #endif

    -#ifdef CONFIG_4KSTACKS
    - extern void irq_ctx_init(int cpu);
    - extern void irq_ctx_exit(int cpu);
    -# define __ARCH_HAS_DO_SOFTIRQ
    -#else
    -# define irq_ctx_init(cpu) do { } while (0)
    -# define irq_ctx_exit(cpu) do { } while (0)
    -#endif
    +extern void irq_ctx_init(int cpu);
    +extern void irq_ctx_exit(int cpu);
    +#define __ARCH_HAS_DO_SOFTIRQ

    #ifdef CONFIG_IRQBALANCE
    extern int irqbalance_disable(char *str);
    --- linux-2.6.14-mm2-full/include/asm-i386/thread_info.h.old 2005-11-14 01:31:45.000000000 +0100
    +++ linux-2.6.14-mm2-full/include/asm-i386/thread_info.h 2005-11-14 01:32:11.000000000 +0100
    @@ -53,11 +53,7 @@
    #endif

    #define PREEMPT_ACTIVE 0x10000000
    -#ifdef CONFIG_4KSTACKS
    -#define THREAD_SIZE (4096)
    -#else
    -#define THREAD_SIZE (8192)
    -#endif
    +#define THREAD_SIZE (4096)

    #define STACK_WARN (THREAD_SIZE/8)
    /*
    --- linux-2.6.14-mm2-full/include/asm-i386/module.h.old 2005-11-14 01:32:18.000000000 +0100
    +++ linux-2.6.14-mm2-full/include/asm-i386/module.h 2005-11-14 01:32:42.000000000 +0100
    @@ -64,12 +64,6 @@
    #define MODULE_REGPARM ""
    #endif

    -#ifdef CONFIG_4KSTACKS
    -#define MODULE_STACKSIZE "4KSTACKS "
    -#else
    -#define MODULE_STACKSIZE ""
    -#endif
    -
    -#define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY MODULE_REGPARM MODULE_STACKSIZE
    +#define MODULE_ARCH_VERMAGIC MODULE_PROC_FAMILY MODULE_REGPARM

    #endif /* _ASM_I386_MODULE_H */
    --- linux-2.6.15-rc5-mm2-full/arch/i386/kernel/irq.c.old 2005-12-11 15:10:27.000000000 +0100
    +++ linux-2.6.15-rc5-mm2-full/arch/i386/kernel/irq.c 2005-12-11 15:11:29.000000000 +0100
    @@ -33,7 +33,6 @@
    }
    #endif

    -#ifdef CONFIG_4KSTACKS
    /*
    * per-CPU IRQ handling contexts (thread information and stack)
    */
    @@ -44,7 +43,6 @@

    static union irq_ctx *hardirq_ctx[NR_CPUS];
    static union irq_ctx *softirq_ctx[NR_CPUS];
    -#endif

    /*
    * do_IRQ handles all normal device IRQ's (the special
    @@ -55,10 +53,8 @@
    {
    /* high bits used in ret_from_ code */
    int irq = regs->orig_eax & 0xff;
    -#ifdef CONFIG_4KSTACKS
    union irq_ctx *curctx, *irqctx;
    u32 *isp;
    -#endif

    irq_enter();
    #ifdef CONFIG_DEBUG_STACKOVERFLOW
    @@ -76,8 +72,6 @@
    }
    #endif

    -#ifdef CONFIG_4KSTACKS
    -
    curctx = (union irq_ctx *) current_thread_info();
    irqctx = hardirq_ctx[smp_processor_id()];

    @@ -104,7 +98,6 @@
    : "memory", "cc", "ecx"
    );
    } else
    -#endif
    __do_IRQ(irq, regs);

    irq_exit();
    @@ -114,8 +107,6 @@
    return 1;
    }

    -#ifdef CONFIG_4KSTACKS
    -
    /*
    * These should really be __section__(".bss.page_aligned") as well, but
    * gcc's 3.0 and earlier don't handle that correctly.
    @@ -200,7 +191,6 @@
    }

    EXPORT_SYMBOL(do_softirq);
    -#endif

    /*
    * Interrupt statistics:
    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/
    \
     
     \ /
      Last update: 2005-12-15 22:27    [W:0.024 / U:33.328 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site