]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
macro for realmode stack parallel-6.2-rc8-brfirst
authorDavid Woodhouse <dwmw@amazon.co.uk>
Sat, 25 Feb 2023 13:48:34 +0000 (13:48 +0000)
committerDavid Woodhouse <dwmw@amazon.co.uk>
Sat, 25 Feb 2023 13:48:34 +0000 (13:48 +0000)
arch/x86/realmode/rm/trampoline_64.S

index 49ebc1636ffde1ae88d3709113292e9ef4778b10..da4ecf0fa9a84455e48b7348a97a2bb3c6ae63fc 100644 (file)
        .text
        .code16
 
+.macro LOAD_REALMODE_ESP
+       /*
+         * Make sure only one CPU fiddles with the realmode stack
+         */
+.Llock_rm\@:
+       btl     $0, tr_lock
+       jnc     2f
+       pause
+       jmp     .Llock_rm\@
+2:
+       lock
+       btsl    $0, tr_lock
+       jc      .Llock_rm\@
+
+       # Setup stack
+       movl    $rm_stack_end, %esp
+.endm
+
        .balign PAGE_SIZE
 SYM_CODE_START(trampoline_start)
        cli                     # We should be safe anyway
@@ -49,21 +67,7 @@ SYM_CODE_START(trampoline_start)
        mov     %ax, %es
        mov     %ax, %ss
 
-       /*
-        * Make sure only one CPU fiddles with the realmode stack
-        */
-.Llock_rm:
-       btl     $0, tr_lock
-       jnc     2f
-       pause
-       jmp     .Llock_rm
-2:
-       lock
-       btsl    $0, tr_lock
-       jc      .Llock_rm
-
-       # Setup stack
-       movl    $rm_stack_end, %esp
+       LOAD_REALMODE_ESP
 
        call    verify_cpu              # Verify the cpu supports long mode
        testl   %eax, %eax              # Check for return code
@@ -106,8 +110,7 @@ SYM_CODE_START(sev_es_trampoline_start)
        mov     %ax, %es
        mov     %ax, %ss
 
-       # Setup stack
-       movl    $rm_stack_end, %esp
+       LOAD_REALMODE_ESP
 
        jmp     .Lswitch_to_protected
 SYM_CODE_END(sev_es_trampoline_start)
@@ -190,7 +193,7 @@ SYM_CODE_START(pa_trampoline_compat)
         * In compatibility mode.  Prep ESP and DX for startup_32, then disable
         * paging and complete the switch to legacy 32-bit mode.
         */
-       movl    $rm_stack_end, %esp
+       LOAD_REALMODE_ESP
        movw    $__KERNEL_DS, %dx
 
        movl    $(CR0_STATE & ~X86_CR0_PG), %eax