lkml.org 
[lkml]   [2012]   [May]   [5]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 05/18] x86: Use common threadinfo allocator
    The only difference is the free_thread_info function, which frees
    xstate.

    Use the new arch_release_task_struct() function instead and switch
    over to the core allocator.

    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Cc: x86@kernel.org
    ---
    arch/x86/include/asm/boot.h | 2 +-
    arch/x86/include/asm/page_32_types.h | 4 ++--
    arch/x86/include/asm/page_64_types.h | 4 ++--
    arch/x86/include/asm/thread_info.h | 20 +-------------------
    arch/x86/kernel/irq_32.c | 8 ++++----
    arch/x86/kernel/process.c | 5 ++---
    6 files changed, 12 insertions(+), 31 deletions(-)

    Index: tip/arch/x86/include/asm/boot.h
    ===================================================================
    --- tip.orig/arch/x86/include/asm/boot.h
    +++ tip/arch/x86/include/asm/boot.h
    @@ -19,7 +19,7 @@
    #ifdef CONFIG_X86_64
    #define MIN_KERNEL_ALIGN_LG2 PMD_SHIFT
    #else
    -#define MIN_KERNEL_ALIGN_LG2 (PAGE_SHIFT + THREAD_ORDER)
    +#define MIN_KERNEL_ALIGN_LG2 (PAGE_SHIFT + THREAD_SIZE_ORDER)
    #endif
    #define MIN_KERNEL_ALIGN (_AC(1, UL) << MIN_KERNEL_ALIGN_LG2)

    Index: tip/arch/x86/include/asm/page_32_types.h
    ===================================================================
    --- tip.orig/arch/x86/include/asm/page_32_types.h
    +++ tip/arch/x86/include/asm/page_32_types.h
    @@ -15,8 +15,8 @@
    */
    #define __PAGE_OFFSET _AC(CONFIG_PAGE_OFFSET, UL)

    -#define THREAD_ORDER 1
    -#define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER)
    +#define THREAD_SIZE_ORDER 1
    +#define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)

    #define STACKFAULT_STACK 0
    #define DOUBLEFAULT_STACK 1
    Index: tip/arch/x86/include/asm/page_64_types.h
    ===================================================================
    --- tip.orig/arch/x86/include/asm/page_64_types.h
    +++ tip/arch/x86/include/asm/page_64_types.h
    @@ -1,8 +1,8 @@
    #ifndef _ASM_X86_PAGE_64_DEFS_H
    #define _ASM_X86_PAGE_64_DEFS_H

    -#define THREAD_ORDER 1
    -#define THREAD_SIZE (PAGE_SIZE << THREAD_ORDER)
    +#define THREAD_SIZE_ORDER 1
    +#define THREAD_SIZE (PAGE_SIZE << THREAD_SIZE_ORDER)
    #define CURRENT_MASK (~(THREAD_SIZE - 1))

    #define EXCEPTION_STACK_ORDER 0
    Index: tip/arch/x86/include/asm/thread_info.h
    ===================================================================
    --- tip.orig/arch/x86/include/asm/thread_info.h
    +++ tip/arch/x86/include/asm/thread_info.h
    @@ -155,24 +155,6 @@ struct thread_info {

    #define PREEMPT_ACTIVE 0x10000000

    -/* thread information allocation */
    -#ifdef CONFIG_DEBUG_STACK_USAGE
    -#define THREAD_FLAGS (GFP_KERNEL | __GFP_NOTRACK | __GFP_ZERO)
    -#else
    -#define THREAD_FLAGS (GFP_KERNEL | __GFP_NOTRACK)
    -#endif
    -
    -#define __HAVE_ARCH_THREAD_INFO_ALLOCATOR
    -
    -#define alloc_thread_info_node(tsk, node) \
    -({ \
    - struct page *page = alloc_pages_node(node, THREAD_FLAGS, \
    - THREAD_ORDER); \
    - struct thread_info *ret = page ? page_address(page) : NULL; \
    - \
    - ret; \
    -})
    -
    #ifdef CONFIG_X86_32

    #define STACK_WARN (THREAD_SIZE/8)
    @@ -282,7 +264,7 @@ static inline bool is_ia32_task(void)

    #ifndef __ASSEMBLY__
    extern void arch_task_cache_init(void);
    -extern void free_thread_info(struct thread_info *ti);
    extern int arch_dup_task_struct(struct task_struct *dst, struct task_struct *src);
    +extern void arch_release_task_struct(struct task_struct *tsk);
    #endif
    #endif /* _ASM_X86_THREAD_INFO_H */
    Index: tip/arch/x86/kernel/irq_32.c
    ===================================================================
    --- tip.orig/arch/x86/kernel/irq_32.c
    +++ tip/arch/x86/kernel/irq_32.c
    @@ -127,8 +127,8 @@ void __cpuinit irq_ctx_init(int cpu)
    return;

    irqctx = page_address(alloc_pages_node(cpu_to_node(cpu),
    - THREAD_FLAGS,
    - THREAD_ORDER));
    + THREADINFO_GFP,
    + THREAD_SIZE_ORDER));
    memset(&irqctx->tinfo, 0, sizeof(struct thread_info));
    irqctx->tinfo.cpu = cpu;
    irqctx->tinfo.preempt_count = HARDIRQ_OFFSET;
    @@ -137,8 +137,8 @@ void __cpuinit irq_ctx_init(int cpu)
    per_cpu(hardirq_ctx, cpu) = irqctx;

    irqctx = page_address(alloc_pages_node(cpu_to_node(cpu),
    - THREAD_FLAGS,
    - THREAD_ORDER));
    + THREADINFO_GFP,
    + THREAD_SIZE_ORDER));
    memset(&irqctx->tinfo, 0, sizeof(struct thread_info));
    irqctx->tinfo.cpu = cpu;
    irqctx->tinfo.addr_limit = MAKE_MM_SEG(0);
    Index: tip/arch/x86/kernel/process.c
    ===================================================================
    --- tip.orig/arch/x86/kernel/process.c
    +++ tip/arch/x86/kernel/process.c
    @@ -76,10 +76,9 @@ void free_thread_xstate(struct task_stru
    fpu_free(&tsk->thread.fpu);
    }

    -void free_thread_info(struct thread_info *ti)
    +void arch_release_task_struct(struct task_struct *tsk)
    {
    - free_thread_xstate(ti->task);
    - free_pages((unsigned long)ti, THREAD_ORDER);
    + free_thread_xstate(tsk);
    }

    void arch_task_cache_init(void)



    \
     
     \ /
      Last update: 2012-05-05 17:21    [W:0.027 / U:30.120 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site