]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
x86/smpboot: Remove early_gdt_descr on 64-bit
authorBrian Gerst <brgerst@gmail.com>
Fri, 24 Feb 2023 15:42:32 +0000 (10:42 -0500)
committerDavid Woodhouse <dwmw@amazon.co.uk>
Sat, 25 Feb 2023 07:59:57 +0000 (07:59 +0000)
Build the GDT descriptor on the stack instead.

Signed-off-by: Brian Gerst <brgerst@gmail.com>
Reviewed-by: David Woodhouse <dwmw@amazon.co.uk>
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
Tested-by: Usama Arif <usama.arif@bytedance.com>
Signed-off-by: Usama Arif <usama.arif@bytedance.com>
Signed-off-by: David Woodhouse <dwmw@amazon.co.uk>
arch/x86/kernel/acpi/sleep.c
arch/x86/kernel/head_64.S

index 008fda8b1982d56983d18265abb05a1b35c22b8a..6538ddb55f288b43970353412e5da6a32ec4d263 100644 (file)
@@ -114,8 +114,6 @@ int x86_acpi_suspend_lowlevel(void)
 #else /* CONFIG_64BIT */
 #ifdef CONFIG_SMP
        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());
        /* Force the startup into boot mode */
        saved_smpboot_ctrl = xchg(&smpboot_control, 0);
index f7905ba4b992902118aceb403165c07fb86c48b4..0dd57d573a0ec738465bae1b75a102108afd94ac 100644 (file)
@@ -245,7 +245,7 @@ SYM_INNER_LABEL(secondary_startup_64_no_verify, SYM_L_GLOBAL)
 #ifdef CONFIG_SMP
        /*
         * Is this the boot CPU coming up? If so everything is available
-        * in initial_gs and early_gdt_descr.
+        * in initial_gs.
         */
        movl    smpboot_control(%rip), %edx
        testl   $STARTUP_SECONDARY, %edx
@@ -313,11 +313,6 @@ SYM_INNER_LABEL(secondary_startup_64_no_verify, SYM_L_GLOBAL)
        /* Save it for GS BASE setup */
        movq    %rbx, initial_gs(%rip)
 
-       /* Calculate the GDT address */
-       movq    $gdt_page, %rcx
-       addq    %rbx, %rcx
-       movq    %rcx, early_gdt_descr_base(%rip)
-
        movq    %rbx, %rdx
 #else
        xorl    %edx, %edx
@@ -339,7 +334,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
@@ -754,11 +754,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