lkml.org 
[lkml]   [2021]   [Feb]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 7/7] x86/sev-es: Replace open-coded hlt-loops with sev_es_terminate()
    Date
    From: Joerg Roedel <jroedel@suse.de>

    There are a few places left in the SEV-ES C code where hlt loops and/or
    terminate requests are implemented. Replace them all with calls to
    sev_es_terminate().

    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    ---
    arch/x86/boot/compressed/sev-es.c | 12 +++---------
    arch/x86/kernel/sev-es-shared.c | 10 +++-------
    2 files changed, 6 insertions(+), 16 deletions(-)

    diff --git a/arch/x86/boot/compressed/sev-es.c b/arch/x86/boot/compressed/sev-es.c
    index 27826c265aab..d904bd56b3e3 100644
    --- a/arch/x86/boot/compressed/sev-es.c
    +++ b/arch/x86/boot/compressed/sev-es.c
    @@ -200,14 +200,8 @@ void do_boot_stage2_vc(struct pt_regs *regs, unsigned long exit_code)
    }

    finish:
    - if (result == ES_OK) {
    + if (result == ES_OK)
    vc_finish_insn(&ctxt);
    - } else if (result != ES_RETRY) {
    - /*
    - * For now, just halt the machine. That makes debugging easier,
    - * later we just call sev_es_terminate() here.
    - */
    - while (true)
    - asm volatile("hlt\n");
    - }
    + else if (result != ES_RETRY)
    + sev_es_terminate(GHCB_SEV_ES_REASON_GENERAL_REQUEST);
    }
    diff --git a/arch/x86/kernel/sev-es-shared.c b/arch/x86/kernel/sev-es-shared.c
    index cdc04d091242..7c34be61258e 100644
    --- a/arch/x86/kernel/sev-es-shared.c
    +++ b/arch/x86/kernel/sev-es-shared.c
    @@ -24,7 +24,7 @@ static bool __init sev_es_check_cpu_features(void)
    return true;
    }

    -static void sev_es_terminate(unsigned int reason)
    +static void __noreturn sev_es_terminate(unsigned int reason)
    {
    u64 val = GHCB_SEV_TERMINATE;

    @@ -210,12 +210,8 @@ void __init do_vc_no_ghcb(struct pt_regs *regs, unsigned long exit_code)
    return;

    fail:
    - sev_es_wr_ghcb_msr(GHCB_SEV_TERMINATE);
    - VMGEXIT();
    -
    - /* Shouldn't get here - if we do halt the machine */
    - while (true)
    - asm volatile("hlt\n");
    + /* Terminate the guest */
    + sev_es_terminate(GHCB_SEV_ES_REASON_GENERAL_REQUEST);
    }

    static enum es_result vc_insn_string_read(struct es_em_ctxt *ctxt,
    --
    2.30.0
    \
     
     \ /
      Last update: 2021-02-10 11:34    [W:3.110 / U:0.460 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site