Re: [PATCH 3/4] KVM host implementation
From: Peter Zijlstra <peterz@infradead.org>
Date: 2021-08-31 07:18:14
Also in:
lkml
From: Peter Zijlstra <peterz@infradead.org>
Date: 2021-08-31 07:18:14
Also in:
lkml
On Tue, Aug 31, 2021 at 09:16:09AM +0200, Peter Zijlstra wrote:
On Tue, Aug 31, 2021 at 09:59:18AM +0800, Tianqiang Xu wrote:quoted
@@ -4304,8 +4374,14 @@ void kvm_arch_vcpu_put(struct kvm_vcpu *vcpu) idx = srcu_read_lock(&vcpu->kvm->srcu); if (kvm_xen_msr_enabled(vcpu->kvm)) kvm_xen_runstate_set_preempted(vcpu); - else + else { kvm_steal_time_set_preempted(vcpu); + + if (get_cpu_nr_running(smp_processor_id()) <= 1) + kvm_steal_time_set_is_idle(vcpu); + else + kvm_steal_time_clear_is_idle(vcpu); + } srcu_read_unlock(&vcpu->kvm->srcu, idx);This cannot be right. The CPU could long since be running tasks again, but as long as this vCPU crud doesn't run, the guest keeps thinking it's physically idle.
More fundamentally, a blocked task doesn't have a CPU. So unless you've pinned your vCPU threads to physical CPUs, the whole thing is bonkers.