]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
x86/smpboot: Remove initial_gs
authorBrian Gerst <brgerst@gmail.com>
Fri, 24 Feb 2023 15:42:33 +0000 (10:42 -0500)
committerDavid Woodhouse <dwmw@amazon.co.uk>
Sat, 25 Feb 2023 07:59:57 +0000 (07:59 +0000)
Use the percpu offset directly to set GSBASE.

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/include/asm/realmode.h
arch/x86/kernel/acpi/sleep.c
arch/x86/kernel/head_64.S

index f0357cfe2fb04d694a1d7052f94e6afc6842e2ee..87e5482acd0dca56c4169a8c5321057447bbf6a5 100644 (file)
@@ -60,7 +60,6 @@ extern struct real_mode_header *real_mode_header;
 extern unsigned char real_mode_blob_end[];
 
 extern unsigned long initial_code;
-extern unsigned long initial_gs;
 extern unsigned long initial_stack;
 #ifdef CONFIG_AMD_MEM_ENCRYPT
 extern unsigned long initial_vc_handler;
index 6538ddb55f288b43970353412e5da6a32ec4d263..214dd4a79860e2c95fa8f915c294df7ddd285d9a 100644 (file)
@@ -114,7 +114,6 @@ int x86_acpi_suspend_lowlevel(void)
 #else /* CONFIG_64BIT */
 #ifdef CONFIG_SMP
        current->thread.sp = (unsigned long)temp_stack + sizeof(temp_stack);
-       initial_gs = per_cpu_offset(smp_processor_id());
        /* Force the startup into boot mode */
        saved_smpboot_ctrl = xchg(&smpboot_control, 0);
 #endif
index 0dd57d573a0ec738465bae1b75a102108afd94ac..9ed87ba0609f9f319e09fbd9db302d5ae71f66cf 100644 (file)
@@ -67,18 +67,10 @@ SYM_CODE_START_NOALIGN(startup_64)
 
        leaq    _text(%rip), %rdi
 
-       /*
-        * initial_gs points to initial fixed_percpu_data struct with storage for
-        * the stack protector canary. Global pointer fixups are needed at this
-        * stage, so apply them as is done in fixup_pointer(), and initialize %gs
-        * such that the canary can be accessed at %gs:40 for subsequent C calls.
-        */
+       /* Setup GSBASE to allow stack canary access for C code */
        movl    $MSR_GS_BASE, %ecx
-       movq    initial_gs(%rip), %rax
-       movq    $_text, %rdx
-       subq    %rdx, %rax
-       addq    %rdi, %rax
-       movq    %rax, %rdx
+       leaq    INIT_PER_CPU_VAR(fixed_percpu_data)(%rip), %rdx
+       movl    %edx, %eax
        shrq    $32,  %rdx
        wrmsr
 
@@ -243,10 +235,7 @@ SYM_INNER_LABEL(secondary_startup_64_no_verify, SYM_L_GLOBAL)
        ANNOTATE_NOENDBR // above
 
 #ifdef CONFIG_SMP
-       /*
-        * Is this the boot CPU coming up? If so everything is available
-        * in initial_gs.
-        */
+       /* Is this the boot CPU coming up? */
        movl    smpboot_control(%rip), %edx
        testl   $STARTUP_SECONDARY, %edx
        jz      .Linit_cpu0_data
@@ -308,12 +297,7 @@ SYM_INNER_LABEL(secondary_startup_64_no_verify, SYM_L_GLOBAL)
 
 .Linit_cpu_data:
        /* Get the per cpu offset for the given CPU# which is in ECX */
-       leaq    __per_cpu_offset(%rip), %rbx
-       movq    (%rbx,%rcx,8), %rbx
-       /* Save it for GS BASE setup */
-       movq    %rbx, initial_gs(%rip)
-
-       movq    %rbx, %rdx
+       movq    __per_cpu_offset(,%rcx,8), %rdx
 #else
        xorl    %edx, %edx
 #endif /* CONFIG_SMP */
@@ -363,8 +347,11 @@ SYM_INNER_LABEL(secondary_startup_64_no_verify, SYM_L_GLOBAL)
         * the per cpu areas are set up.
         */
        movl    $MSR_GS_BASE,%ecx
-       movl    initial_gs(%rip),%eax
-       movl    initial_gs+4(%rip),%edx
+#ifndef CONFIG_SMP
+       leaq    INIT_PER_CPU_VAR(fixed_percpu_data)(%rip), %rdx
+#endif
+       movl    %edx, %eax
+       shrq    $32, %rdx
        wrmsr
 
        /* Drop the realmode protection. For the boot CPU the pointer is NULL! */
@@ -514,7 +501,6 @@ SYM_CODE_END(vc_boot_ghcb)
        __REFDATA
        .balign 8
 SYM_DATA(initial_code, .quad x86_64_start_kernel)
-SYM_DATA(initial_gs,   .quad INIT_PER_CPU_VAR(fixed_percpu_data))
 #ifdef CONFIG_AMD_MEM_ENCRYPT
 SYM_DATA(initial_vc_handler,   .quad handle_vc_boot_ghcb)
 #endif