lkml.org 
[lkml]   [2023]   [Mar]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[tip: x86/apic] x86/smpboot: Remove early_gdt_descr on 64-bit
    The following commit has been merged into the x86/apic branch of tip:

    Commit-ID: c253b64020c7a7c7a1f6adf8922456614be0f665
    Gitweb: https://git.kernel.org/tip/c253b64020c7a7c7a1f6adf8922456614be0f665
    Author: Brian Gerst <brgerst@gmail.com>
    AuthorDate: Thu, 16 Mar 2023 22:21:04
    Committer: Thomas Gleixner <tglx@linutronix.de>
    CommitterDate: Tue, 21 Mar 2023 13:35:53 +01:00

    x86/smpboot: Remove early_gdt_descr on 64-bit

    Build the GDT descriptor on the stack instead.

    Signed-off-by: Brian Gerst <brgerst@gmail.com>
    Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
    Signed-off-by: Usama Arif <usama.arif@bytedance.com>
    Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
    Tested-by: Usama Arif <usama.arif@bytedance.com>
    Tested-by: Guilherme G. Piccoli <gpiccoli@igalia.com>
    Reviewed-by: David Woodhouse <dwmw@amazon.co.uk>
    Link: https://lore.kernel.org/r/20230316222109.1940300-8-usama.arif@bytedance.com

    ---
    arch/x86/kernel/acpi/sleep.c | 2 --
    arch/x86/kernel/head_64.S | 11 ++++++-----
    arch/x86/kernel/smpboot.c | 2 +-
    3 files changed, 7 insertions(+), 8 deletions(-)

    diff --git a/arch/x86/kernel/acpi/sleep.c b/arch/x86/kernel/acpi/sleep.c
    index 1b4c43d..de89bb4 100644
    --- a/arch/x86/kernel/acpi/sleep.c
    +++ b/arch/x86/kernel/acpi/sleep.c
    @@ -127,8 +127,6 @@ int x86_acpi_suspend_lowlevel(void)
    * value is in the actual %rsp register.
    */
    current->thread.sp = (unsigned long)temp_stack + sizeof(temp_stack);
    - early_gdt_descr.address =
    - (unsigned long)get_cpu_gdt_rw(smp_processor_id());
    initial_gs = per_cpu_offset(smp_processor_id());
    smpboot_control = smp_processor_id();
    #endif
    diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
    index cc1b145..a5b46c2 100644
    --- a/arch/x86/kernel/head_64.S
    +++ b/arch/x86/kernel/head_64.S
    @@ -265,7 +265,12 @@ SYM_INNER_LABEL(secondary_startup_64_no_verify, SYM_L_GLOBAL)
    * addresses where we're currently running on. We have to do that here
    * because in 32bit we couldn't load a 64bit linear address.
    */
    - lgdt early_gdt_descr(%rip)
    + subq $16, %rsp
    + movw $(GDT_SIZE-1), (%rsp)
    + leaq gdt_page(%rdx), %rax
    + movq %rax, 2(%rsp)
    + lgdt (%rsp)
    + addq $16, %rsp

    /* set up data segments */
    xorl %eax,%eax
    @@ -667,10 +672,6 @@ SYM_DATA_END(level1_fixmap_pgt)
    .data
    .align 16

    -SYM_DATA(early_gdt_descr, .word GDT_ENTRIES*8-1)
    -SYM_DATA_LOCAL(early_gdt_descr_base, .quad INIT_PER_CPU_VAR(gdt_page))
    -
    - .align 16
    SYM_DATA(smpboot_control, .long 0)

    .align 16
    diff --git a/arch/x86/kernel/smpboot.c b/arch/x86/kernel/smpboot.c
    index a1531cc..94e6c54 100644
    --- a/arch/x86/kernel/smpboot.c
    +++ b/arch/x86/kernel/smpboot.c
    @@ -1086,10 +1086,10 @@ static int do_boot_cpu(int apicid, int cpu, struct task_struct *idle,
    start_ip = real_mode_header->trampoline_start64;
    #endif
    idle->thread.sp = (unsigned long)task_pt_regs(idle);
    - early_gdt_descr.address = (unsigned long)get_cpu_gdt_rw(cpu);
    initial_code = (unsigned long)start_secondary;

    if (IS_ENABLED(CONFIG_X86_32)) {
    + early_gdt_descr.address = (unsigned long)get_cpu_gdt_rw(cpu);
    initial_stack = idle->thread.sp;
    } else {
    smpboot_control = cpu;
    \
     
     \ /
      Last update: 2023-03-27 01:11    [W:4.114 / U:0.064 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site