Re: [PATCH v3 03/12] KVM: SEV: Mark vCPU RUNNABLE after AP_CREATE, even if VMSA is unusable
From: Michael Roth
Date: Wed Jul 01 2026 - 18:51:37 EST
On Tue, Jun 30, 2026 at 03:25:58PM -0700, Sean Christopherson wrote:
> Always mark the vCPU as RUNNABLE after responding to AP_CREATE, even if the
> guest-specified VMSA is unusable, e.g. isn't backed by a memslot or doesn't
> have a backing guest_memfd page. If the VMSA is unusable, leaving the vCPU
> in a non-running state will effectively hang the vCPU instead of reporting
> an error to userspace. This will also allow retrying the VMSA load in the
> future, to fix a bug where KVM doesn't honor guest_memfd invalidation
> events, e.g. if AP_CREATION races with PUNCH_HOLE.
>
> Cc: stable@xxxxxxxxxxxxxxx # 6.12.x
> Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx>
Reviewed-by: Michael Roth <michael.roth@xxxxxxx>
> ---
> arch/x86/kvm/svm/sev.c | 12 +++++++++---
> 1 file changed, 9 insertions(+), 3 deletions(-)
>
> diff --git a/arch/x86/kvm/svm/sev.c b/arch/x86/kvm/svm/sev.c
> index d8ed00f76aa3..30792adcfc8e 100644
> --- a/arch/x86/kvm/svm/sev.c
> +++ b/arch/x86/kvm/svm/sev.c
> @@ -4028,9 +4028,6 @@ static void sev_snp_reload_vmsa(struct kvm_vcpu *vcpu, gpa_t gpa)
> svm->sev_es.snp_guest_vmsa_gpa = gpa;
> svm->vmcb->control.vmsa_pa = pfn_to_hpa(pfn);
>
> - /* Mark the vCPU as runnable */
> - kvm_set_mp_state(vcpu, KVM_MP_STATE_RUNNABLE);
> -
> /*
> * gmem pages aren't currently migratable, but if this ever changes
> * then care should be taken to ensure svm->sev_es.vmsa is pinned
> @@ -4062,6 +4059,15 @@ static void sev_snp_init_protected_guest_state(struct kvm_vcpu *vcpu)
> svm->sev_es.snp_pending_vmsa_gpa = INVALID_PAGE;
>
> sev_snp_reload_vmsa(vcpu, gpa);
> +
> + /*
> + * Mark the vCPU as runnable for CREATE requests, indicated by a valid
> + * VMSA GPA, even if installing the VMSA failed, so that KVM_RUN will
> + * fail instead of blocking indefinitely and hanging the vCPU, e.g. if
> + * the backing guest_memfd page is unavailable.
> + */
> + if (VALID_PAGE(gpa))
> + kvm_set_mp_state(vcpu, KVM_MP_STATE_RUNNABLE);
> }
>
> static int sev_snp_ap_creation(struct vcpu_svm *svm)
> --
> 2.55.0.rc0.799.gd6f94ed593-goog
>