]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
KVM: Fix last_boosted_vcpu index assignment bug
authorWanpeng Li <wanpengli@tencent.com>
Mon, 10 Nov 2025 03:32:27 +0000 (11:32 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 2 Jan 2026 11:57:21 +0000 (12:57 +0100)
commit 32bd348be3fa07b26c5ea6b818a161c142dcc2f2 upstream.

In kvm_vcpu_on_spin(), the loop counter 'i' is incorrectly written to
last_boosted_vcpu instead of the actual vCPU index 'idx'. This causes
last_boosted_vcpu to store the loop iteration count rather than the
vCPU index, leading to incorrect round-robin behavior in subsequent
directed yield operations.

Fix this by using 'idx' instead of 'i' in the assignment.

Signed-off-by: Wanpeng Li <wanpengli@tencent.com>
Reviewed-by: Sean Christopherson <seanjc@google.com>
Message-ID: <20251110033232.12538-7-kernellwp@gmail.com>
Cc: stable@vger.kernel.org
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
virt/kvm/kvm_main.c

index 01ea4f8351a61791633447bb3e6c8eac38c34696..7fea6ba91c1ef30427d9ad431a189f14a5c5ab10 100644 (file)
@@ -4026,7 +4026,7 @@ void kvm_vcpu_on_spin(struct kvm_vcpu *me, bool yield_to_kernel_mode)
 
                yielded = kvm_vcpu_yield_to(vcpu);
                if (yielded > 0) {
-                       WRITE_ONCE(kvm->last_boosted_vcpu, i);
+                       WRITE_ONCE(kvm->last_boosted_vcpu, idx);
                        break;
                } else if (yielded < 0 && !--try) {
                        break;