lkml.org 
[lkml]   [2023]   [Mar]   [12]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v13 099/113] KVM: TDX: Handle TDG.VP.VMCALL<GetTdVmCallInfo> hypercall
    Date
    From: Isaku Yamahata <isaku.yamahata@intel.com>

    Implement TDG.VP.VMCALL<GetTdVmCallInfo> hypercall. If the input value is
    zero, return success code and zero in output registers.

    TDG.VP.VMCALL<GetTdVmCallInfo> hypercall is a subleaf of TDG.VP.VMCALL to
    enumerate which TDG.VP.VMCALL sub leaves are supported. This hypercall is
    for future enhancement of the Guest-Host-Communication Interface (GHCI)
    specification. The GHCI version of 344426-001US defines it to require
    input R12 to be zero and to return zero in output registers, R11, R12, R13,
    and R14 so that guest TD enumerates no enhancement.

    Signed-off-by: Isaku Yamahata <isaku.yamahata@intel.com>
    ---
    arch/x86/kvm/vmx/tdx.c | 16 ++++++++++++++++
    1 file changed, 16 insertions(+)

    diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c
    index 853cfda99fed..10bbac208a9c 100644
    --- a/arch/x86/kvm/vmx/tdx.c
    +++ b/arch/x86/kvm/vmx/tdx.c
    @@ -1216,6 +1216,20 @@ static int tdx_emulate_wrmsr(struct kvm_vcpu *vcpu)
    return 1;
    }

    +static int tdx_get_td_vm_call_info(struct kvm_vcpu *vcpu)
    +{
    + if (tdvmcall_a0_read(vcpu))
    + tdvmcall_set_return_code(vcpu, TDG_VP_VMCALL_INVALID_OPERAND);
    + else {
    + tdvmcall_set_return_code(vcpu, TDG_VP_VMCALL_SUCCESS);
    + kvm_r11_write(vcpu, 0);
    + tdvmcall_a0_write(vcpu, 0);
    + tdvmcall_a1_write(vcpu, 0);
    + tdvmcall_a2_write(vcpu, 0);
    + }
    + return 1;
    +}
    +
    static int tdx_map_gpa(struct kvm_vcpu *vcpu)
    {
    struct kvm *kvm = vcpu->kvm;
    @@ -1252,6 +1266,8 @@ static int handle_tdvmcall(struct kvm_vcpu *vcpu)
    return tdx_emulate_rdmsr(vcpu);
    case EXIT_REASON_MSR_WRITE:
    return tdx_emulate_wrmsr(vcpu);
    + case TDG_VP_VMCALL_GET_TD_VM_CALL_INFO:
    + return tdx_get_td_vm_call_info(vcpu);
    case TDG_VP_VMCALL_REPORT_FATAL_ERROR:
    /*
    * Exit to userspace device model for tear down.
    --
    2.25.1
    \
     
     \ /
      Last update: 2023-03-27 00:55    [W:7.456 / U:0.048 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site