lkml.org 
[lkml]   [2009]   [Jan]   [18]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/5] x86-64: Rework __per_cpu_load adjustments
    Date
    Use cpu_number to determine if the adjustment is necessary.

    Signed-off-by: Brian Gerst <brgerst@gmail.com>
    ---
    arch/x86/kernel/head_64.S | 24 ++++++++----------------
    1 files changed, 8 insertions(+), 16 deletions(-)

    diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
    index c8ace88..98ea26a 100644
    --- a/arch/x86/kernel/head_64.S
    +++ b/arch/x86/kernel/head_64.S
    @@ -207,19 +207,15 @@ ENTRY(secondary_startup_64)

    #ifdef CONFIG_SMP
    /*
    - * early_gdt_base should point to the gdt_page in static percpu init
    - * data area. Computing this requires two symbols - __per_cpu_load
    - * and per_cpu__gdt_page. As linker can't do no such relocation, do
    - * it by hand. As early_gdt_descr is manipulated by C code for
    - * secondary CPUs, this should be done only once for the boot CPU
    - * when early_gdt_descr_base contains zero.
    + * Fix up static pointers that need __per_cpu_load added. The assembler
    + * is unable to do this directly. This is only needed for the boot cpu.
    + * These values are set up with the correct base addresses by C code for
    + * secondary cpus.
    */
    - movq early_gdt_descr_base(%rip), %rax
    - testq %rax, %rax
    - jnz 1f
    - movq $__per_cpu_load, %rax
    - addq $per_cpu__gdt_page, %rax
    - movq %rax, early_gdt_descr_base(%rip)
    + movq initial_gs(%rip), %rax
    + cmpl $0, per_cpu__cpu_number(%rax)
    + jne 1f
    + addq %rax, early_gdt_descr_base(%rip)
    1:
    #endif
    /*
    @@ -431,12 +427,8 @@ NEXT_PAGE(level2_spare_pgt)
    .globl early_gdt_descr
    early_gdt_descr:
    .word GDT_ENTRIES*8-1
    -#ifdef CONFIG_SMP
    early_gdt_descr_base:
    - .quad 0x0000000000000000
    -#else
    .quad per_cpu__gdt_page
    -#endif

    ENTRY(phys_base)
    /* This must match the first entry in level2_kernel_pgt */
    --
    1.6.1.rc1


    \
     
     \ /
      Last update: 2009-01-19 01:55    [W:0.023 / U:95.416 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site