Messages in this thread | | | Date | Wed, 30 Nov 2022 17:58:56 +0100 | Subject | Re: [PATCH] KVM: Deal with nested sleeps in kvm_vcpu_block() | From | Paolo Bonzini <> |
| |
On 11/30/22 17:19, Space Meyer wrote: > bool kvm_vcpu_block(struct kvm_vcpu *vcpu) > { > + DEFINE_WAIT_FUNC(vcpu_block_wait, woken_wake_function); > struct rcuwait *wait = kvm_arch_vcpu_get_wait(vcpu); > bool waited = false; > > @@ -3437,13 +3439,11 @@ bool kvm_vcpu_block(struct kvm_vcpu *vcpu) > preempt_enable(); > > for (;;) { > - set_current_state(TASK_INTERRUPTIBLE); > - > if (kvm_vcpu_check_block(vcpu) < 0) > break; > > waited = true; > - schedule(); > + wait_woken(&vcpu_block_wait, TASK_INTERRUPTIBLE, MAX_SCHEDULE_TIMEOUT); > }
Also, this does not work I think, because there is add_wait_queue()/remove_wait_queue() pair. Adding it is not easy because KVM is using a struct rcuwait here instead of a wait_queue_t.
Paolo
| |