Commit e9cb6105 authored by Jim Mattson's avatar Jim Mattson Committed by Sean Christopherson
Browse files

KVM: x86: Clear pv_unhalted on all transitions to KVM_MP_STATE_RUNNABLE



In kvm_set_mp_state(), ensure that vcpu->arch.pv.pv_unhalted is always
cleared on a transition to KVM_MP_STATE_RUNNABLE, so that the next HLT
instruction will be respected.

Fixes: 6aef266c ("kvm hypervisor : Add a hypercall to KVM hypervisor to support pv-ticketlocks")
Fixes: b6b8a145 ("KVM: nVMX: Rework interception of IRQs and NMIs")
Fixes: 38c0b192 ("KVM: SVM: leave halted state on vmexit")
Fixes: 1a65105a ("KVM: x86/xen: handle PV spinlocks slowpath")
Signed-off-by: default avatarJim Mattson <jmattson@google.com>
Link: https://lore.kernel.org/r/20250113200150.487409-3-jmattson@google.com


[sean: add Xen PV spinlocks to the list of Fixes, tweak changelog]
Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
parent c9e5f3fa
Loading
Loading
Loading
Loading
+0 −1
Original line number Diff line number Diff line
@@ -3883,7 +3883,6 @@ static int __sev_snp_update_protected_guest_state(struct kvm_vcpu *vcpu)
		svm->vmcb->control.vmsa_pa = pfn_to_hpa(pfn);

		/* Mark the vCPU as runnable */
		vcpu->arch.pv.pv_unhalted = false;
		kvm_set_mp_state(vcpu, KVM_MP_STATE_RUNNABLE);

		svm->sev_es.snp_vmsa_gpa = INVALID_PAGE;
+0 −1
Original line number Diff line number Diff line
@@ -11215,7 +11215,6 @@ static inline int vcpu_block(struct kvm_vcpu *vcpu)
	switch(vcpu->arch.mp_state) {
	case KVM_MP_STATE_HALTED:
	case KVM_MP_STATE_AP_RESET_HOLD:
		vcpu->arch.pv.pv_unhalted = false;
		kvm_set_mp_state(vcpu, KVM_MP_STATE_RUNNABLE);
		fallthrough;
	case KVM_MP_STATE_RUNNABLE:
+2 −0
Original line number Diff line number Diff line
@@ -124,6 +124,8 @@ static inline bool kvm_vcpu_has_run(struct kvm_vcpu *vcpu)
static inline void kvm_set_mp_state(struct kvm_vcpu *vcpu, int mp_state)
{
	vcpu->arch.mp_state = mp_state;
	if (mp_state == KVM_MP_STATE_RUNNABLE)
		vcpu->arch.pv.pv_unhalted = false;
}

static inline bool kvm_is_exception_pending(struct kvm_vcpu *vcpu)