]> Git Repo - J-linux.git/commitdiff
KVM: SEV: Add GHCB handling for termination requests
authorMichael Roth <[email protected]>
Wed, 1 May 2024 07:10:47 +0000 (02:10 -0500)
committerPaolo Bonzini <[email protected]>
Tue, 7 May 2024 17:28:04 +0000 (13:28 -0400)
GHCB version 2 adds support for a GHCB-based termination request that
a guest can issue when it reaches an error state and wishes to inform
the hypervisor that it should be terminated. Implement support for that
similarly to GHCB MSR-based termination requests that are already
available to SEV-ES guests via earlier versions of the GHCB protocol.

See 'Termination Request' in the 'Invoking VMGEXIT' section of the GHCB
specification for more details.

Signed-off-by: Michael Roth <[email protected]>
Message-ID: <20240501071048.2208265[email protected]>
Signed-off-by: Paolo Bonzini <[email protected]>
arch/x86/kvm/svm/sev.c

index 37d396636b717d9351dfb10970510d8c328ae972..01baa8aa7e129a900e30d68ceb344359e3390fc9 100644 (file)
@@ -2704,6 +2704,7 @@ static int sev_es_validate_vmgexit(struct vcpu_svm *svm)
        case SVM_VMGEXIT_AP_JUMP_TABLE:
        case SVM_VMGEXIT_UNSUPPORTED_EVENT:
        case SVM_VMGEXIT_HV_FEATURES:
+       case SVM_VMGEXIT_TERM_REQUEST:
                break;
        default:
                reason = GHCB_ERR_INVALID_EVENT;
@@ -3099,6 +3100,14 @@ int sev_handle_vmgexit(struct kvm_vcpu *vcpu)
 
                ret = 1;
                break;
+       case SVM_VMGEXIT_TERM_REQUEST:
+               pr_info("SEV-ES guest requested termination: reason %#llx info %#llx\n",
+                       control->exit_info_1, control->exit_info_2);
+               vcpu->run->exit_reason = KVM_EXIT_SYSTEM_EVENT;
+               vcpu->run->system_event.type = KVM_SYSTEM_EVENT_SEV_TERM;
+               vcpu->run->system_event.ndata = 1;
+               vcpu->run->system_event.data[0] = control->ghcb_gpa;
+               break;
        case SVM_VMGEXIT_UNSUPPORTED_EVENT:
                vcpu_unimpl(vcpu,
                            "vmgexit: unsupported event - exit_info_1=%#llx, exit_info_2=%#llx\n",
This page took 0.053767 seconds and 4 git commands to generate.