lkml.org 
[lkml]   [2020]   [Apr]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v3 66/75] x86/kvm: Add KVM specific VMMCALL handling under SEV-ES
    Date
    From: Tom Lendacky <thomas.lendacky@amd.com>

    Implement the callbacks to copy the processor state required by KVM to
    the GHCB.

    Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com>
    [ jroedel@suse.de: - Split out of a larger patch
    - Adapt to different callback functions ]
    Co-developed-by: Joerg Roedel <jroedel@suse.de>
    Signed-off-by: Joerg Roedel <jroedel@suse.de>
    ---
    arch/x86/kernel/kvm.c | 35 +++++++++++++++++++++++++++++------
    1 file changed, 29 insertions(+), 6 deletions(-)

    diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c
    index 6efe0410fb72..0e3fc798d719 100644
    --- a/arch/x86/kernel/kvm.c
    +++ b/arch/x86/kernel/kvm.c
    @@ -34,6 +34,8 @@
    #include <asm/hypervisor.h>
    #include <asm/tlb.h>
    #include <asm/cpuidle_haltpoll.h>
    +#include <asm/ptrace.h>
    +#include <asm/svm.h>

    static int kvmapf = 1;

    @@ -729,13 +731,34 @@ static void __init kvm_init_platform(void)
    x86_platform.apic_post_init = kvm_apic_init;
    }

    +#if defined(CONFIG_AMD_MEM_ENCRYPT)
    +static void kvm_sev_es_hcall_prepare(struct ghcb *ghcb, struct pt_regs *regs)
    +{
    + /* RAX and CPL are already in the GHCB */
    + ghcb_set_rbx(ghcb, regs->bx);
    + ghcb_set_rcx(ghcb, regs->cx);
    + ghcb_set_rdx(ghcb, regs->dx);
    + ghcb_set_rsi(ghcb, regs->si);
    +}
    +
    +static bool kvm_sev_es_hcall_finish(struct ghcb *ghcb, struct pt_regs *regs)
    +{
    + /* No checking of the return state needed */
    + return true;
    +}
    +#endif
    +
    const __initconst struct hypervisor_x86 x86_hyper_kvm = {
    - .name = "KVM",
    - .detect = kvm_detect,
    - .type = X86_HYPER_KVM,
    - .init.guest_late_init = kvm_guest_init,
    - .init.x2apic_available = kvm_para_available,
    - .init.init_platform = kvm_init_platform,
    + .name = "KVM",
    + .detect = kvm_detect,
    + .type = X86_HYPER_KVM,
    + .init.guest_late_init = kvm_guest_init,
    + .init.x2apic_available = kvm_para_available,
    + .init.init_platform = kvm_init_platform,
    +#if defined(CONFIG_AMD_MEM_ENCRYPT)
    + .runtime.sev_es_hcall_prepare = kvm_sev_es_hcall_prepare,
    + .runtime.sev_es_hcall_finish = kvm_sev_es_hcall_finish,
    +#endif
    };

    static __init int activate_jump_labels(void)
    --
    2.17.1
    \
     
     \ /
      Last update: 2020-04-28 17:20    [W:2.508 / U:0.112 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site