lkml.org 
[lkml]   [2009]   [Jan]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 04/10] x86: set %fs to __KERNEL_PERCPU unconditionally for x86_32
    Date
    From: Brian Gerst <brgerst@gmail.com>

    Impact: cleanup

    %fs is currently set to __KERNEL_DS at boot, and conditionally
    switched to __KERNEL_PERCPU for secondary cpus. Instead, initialize
    GDT_ENTRY_PERCPU to the same attributes as GDT_ENTRY_KERNEL_DS and
    set %fs to __KERNEL_PERCPU unconditionally.

    Signed-off-by: Brian Gerst <brgerst@gmail.com>
    Signed-off-by: Tejun Heo <tj@kernel.org>
    ---
    arch/x86/kernel/cpu/common.c | 2 +-
    arch/x86/kernel/head_32.S | 6 +++---
    2 files changed, 4 insertions(+), 4 deletions(-)

    diff --git a/arch/x86/kernel/cpu/common.c b/arch/x86/kernel/cpu/common.c
    index a8f0ded..fbebbce 100644
    --- a/arch/x86/kernel/cpu/common.c
    +++ b/arch/x86/kernel/cpu/common.c
    @@ -111,7 +111,7 @@ DEFINE_PER_CPU_PAGE_ALIGNED(struct gdt_page, gdt_page) = { .gdt = {
    [GDT_ENTRY_APMBIOS_BASE+2] = { { { 0x0000ffff, 0x00409200 } } },

    [GDT_ENTRY_ESPFIX_SS] = { { { 0x00000000, 0x00c09200 } } },
    - [GDT_ENTRY_PERCPU] = { { { 0x00000000, 0x00000000 } } },
    + [GDT_ENTRY_PERCPU] = { { { 0x0000ffff, 0x00cf9200 } } },
    #endif
    } };
    EXPORT_PER_CPU_SYMBOL_GPL(gdt_page);
    diff --git a/arch/x86/kernel/head_32.S b/arch/x86/kernel/head_32.S
    index e835b4e..24c0e5c 100644
    --- a/arch/x86/kernel/head_32.S
    +++ b/arch/x86/kernel/head_32.S
    @@ -429,12 +429,14 @@ is386: movl $2,%ecx # set MP
    ljmp $(__KERNEL_CS),$1f
    1: movl $(__KERNEL_DS),%eax # reload all the segment registers
    movl %eax,%ss # after changing gdt.
    - movl %eax,%fs # gets reset once there's real percpu

    movl $(__USER_DS),%eax # DS/ES contains default USER segment
    movl %eax,%ds
    movl %eax,%es

    + movl $(__KERNEL_PERCPU), %eax
    + movl %eax,%fs # set this cpu's percpu
    +
    xorl %eax,%eax # Clear GS and LDT
    movl %eax,%gs
    lldt %ax
    @@ -446,8 +448,6 @@ is386: movl $2,%ecx # set MP
    movb $1, ready
    cmpb $0,%cl # the first CPU calls start_kernel
    je 1f
    - movl $(__KERNEL_PERCPU), %eax
    - movl %eax,%fs # set this cpu's percpu
    movl (stack_start), %esp
    1:
    #endif /* CONFIG_SMP */
    --
    1.6.0.2


    \
     
     \ /
      Last update: 2009-01-21 09:51    [W:0.020 / U:8.052 seconds]
    ©2003-2017 Jasper Spaans. hosted at Digital OceanAdvertise on this site