]> www.infradead.org Git - users/jedix/linux-maple.git/commit
KVM: x86: Always set mp_state to RUNNABLE on wakeup from HLT
authorSean Christopherson <seanjc@google.com>
Mon, 24 Feb 2025 17:41:56 +0000 (09:41 -0800)
committerSean Christopherson <seanjc@google.com>
Fri, 28 Feb 2025 23:43:18 +0000 (15:43 -0800)
commit2a289aed3fcd7fdd6d5c8def0f992d31a0754094
tree43ab18fbf26ef73df7141b2b2bb9d04069485ff2
parentb50cb2b1555d8714e12a566b9b49fcac56a04a3f
KVM: x86: Always set mp_state to RUNNABLE on wakeup from HLT

When emulating HLT and a wake event is already pending, explicitly mark
the vCPU RUNNABLE (via kvm_set_mp_state()) instead of assuming the vCPU is
already in the appropriate state.  Barring a KVM bug, it should be
impossible for the vCPU to be in a non-RUNNABLE state, but there is no
advantage to relying on that to hold true, and ensuring the vCPU is made
RUNNABLE avoids non-deterministic behavior with respect to pv_unhalted.

E.g. if the vCPU is not already RUNNABLE, then depending on when
pv_unhalted is set, KVM could either leave the vCPU in the non-RUNNABLE
state (set before __kvm_emulate_halt()), or transition the vCPU to HALTED
and then RUNNABLE (pv_unhalted set after the kvm_vcpu_has_events() check).

Link: https://lore.kernel.org/r/20250224174156.2362059-1-seanjc@google.com
Signed-off-by: Sean Christopherson <seanjc@google.com>
arch/x86/kvm/x86.c