lkml.org 
[lkml]   [2020]   [Jul]   [14]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v4 33/75] x86/head/64: Switch to initial stack earlier
    Date
    From: Joerg Roedel <jroedel@suse.de>

    Make sure there is a stack once the kernel runs from virual addresses.
    At this stage any secondary CPU which boots will have lost its stack
    because the kernel switched to a new page-table which does not map the
    real-mode stack anymore.

    This is needed for handling early #VC exceptions caused by instructions
    like CPUID.

    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    ---
    arch/x86/kernel/head_64.S | 9 ++++++---
    1 file changed, 6 insertions(+), 3 deletions(-)

    diff --git a/arch/x86/kernel/head_64.S b/arch/x86/kernel/head_64.S
    index 61aa1e56fc9c..fcaa5dbd728a 100644
    --- a/arch/x86/kernel/head_64.S
    +++ b/arch/x86/kernel/head_64.S
    @@ -195,6 +195,12 @@ SYM_CODE_START(secondary_startup_64)
    movl initial_gs+4(%rip),%edx
    wrmsr

    + /*
    + * Setup a boot time stack - Any secondary CPU will have lost its stack
    + * by now because the cr3-switch above unmaps the real-mode stack
    + */
    + movq initial_stack(%rip), %rsp
    +
    /* Check if nx is implemented */
    movl $0x80000001, %eax
    cpuid
    @@ -215,9 +221,6 @@ SYM_CODE_START(secondary_startup_64)
    /* Make changes effective */
    movq %rax, %cr0

    - /* Setup a boot time stack */
    - movq initial_stack(%rip), %rsp
    -
    /* zero EFLAGS after setting rsp */
    pushq $0
    popfq
    --
    2.27.0
    \
     
     \ /
      Last update: 2020-07-14 14:16    [W:4.088 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site