lkml.org 
[lkml]   [2018]   [Apr]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 12/37] x86/32: Use tss.sp1 as cpu_current_top_of_stack
    Date
    From: Joerg Roedel <jroedel@suse.de>

    Now that we store the task-stack in tss.sp1 we can also use
    it as cpu_current_top_of_stack. This unifies the handling
    with x86-64.

    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    ---
    arch/x86/include/asm/processor.h | 4 ----
    arch/x86/include/asm/thread_info.h | 2 --
    arch/x86/kernel/cpu/common.c | 4 ----
    arch/x86/kernel/process_32.c | 6 ------
    4 files changed, 16 deletions(-)

    diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
    index 21a1149..d65e852 100644
    --- a/arch/x86/include/asm/processor.h
    +++ b/arch/x86/include/asm/processor.h
    @@ -374,12 +374,8 @@ DECLARE_PER_CPU_PAGE_ALIGNED(struct tss_struct, cpu_tss_rw);
    #define __KERNEL_TSS_LIMIT \
    (IO_BITMAP_OFFSET + IO_BITMAP_BYTES + sizeof(unsigned long) - 1)

    -#ifdef CONFIG_X86_32
    -DECLARE_PER_CPU(unsigned long, cpu_current_top_of_stack);
    -#else
    /* The RO copy can't be accessed with this_cpu_xyz(), so use the RW copy. */
    #define cpu_current_top_of_stack cpu_tss_rw.x86_tss.sp1
    -#endif

    /*
    * Save the original ist values for checking stack pointers during debugging
    diff --git a/arch/x86/include/asm/thread_info.h b/arch/x86/include/asm/thread_info.h
    index a5d9521..943c673 100644
    --- a/arch/x86/include/asm/thread_info.h
    +++ b/arch/x86/include/asm/thread_info.h
    @@ -205,9 +205,7 @@ static inline int arch_within_stack_frames(const void * const stack,

    #else /* !__ASSEMBLY__ */

    -#ifdef CONFIG_X86_64
    # define cpu_current_top_of_stack (cpu_tss_rw + TSS_sp1)
    -#endif

    #endif

    diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
    index 311e988..2d67ad0 100644
    --- a/arch/x86/kernel/cpu/common.c
    +++ b/arch/x86/kernel/cpu/common.c
    @@ -1512,10 +1512,6 @@ EXPORT_PER_CPU_SYMBOL(__preempt_count);
    * the top of the kernel stack. Use an extra percpu variable to track the
    * top of the kernel stack directly.
    */
    -DEFINE_PER_CPU(unsigned long, cpu_current_top_of_stack) =
    - (unsigned long)&init_thread_union + THREAD_SIZE;
    -EXPORT_PER_CPU_SYMBOL(cpu_current_top_of_stack);
    -
    #ifdef CONFIG_CC_STACKPROTECTOR
    DEFINE_PER_CPU_ALIGNED(struct stack_canary, stack_canary);
    #endif
    diff --git a/arch/x86/kernel/process_32.c b/arch/x86/kernel/process_32.c
    index 3f3a8c6..8c29fd5 100644
    --- a/arch/x86/kernel/process_32.c
    +++ b/arch/x86/kernel/process_32.c
    @@ -290,12 +290,6 @@ __switch_to(struct task_struct *prev_p, struct task_struct *next_p)
    update_sp0(next_p);
    refresh_sysenter_cs(next);
    this_cpu_write(cpu_current_top_of_stack, task_top_of_stack(next_p));
    - /*
    - * TODO: Find a way to let cpu_current_top_of_stack point to
    - * cpu_tss_rw.x86_tss.sp1. Doing so now results in stack corruption with
    - * iret exceptions.
    - */
    - this_cpu_write(cpu_tss_rw.x86_tss.sp1, next_p->thread.sp0);

    /*
    * Restore %gs if needed (which is common)
    --
    2.7.4
    \
     
     \ /
      Last update: 2018-04-23 17:49    [W:2.397 / U:0.172 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site