Messages in this thread | | | Date | Thu, 13 Jan 2011 10:06:56 -0500 | From | Rik van Riel <> | Subject | Re: [RFC -v4 PATCH 3/3] kvm: use yield_to instead of sleep in kvm_vcpu_on_spin |
| |
On 01/13/2011 08:16 AM, Avi Kivity wrote:
>> + for (pass = 0; pass< 2&& !yielded; pass++) { >> + kvm_for_each_vcpu(i, vcpu, kvm) { >> + struct task_struct *task = vcpu->task; >> + if (!pass&& i< last_boosted_vcpu) { >> + i = last_boosted_vcpu; >> + continue; >> + } else if (pass&& i> last_boosted_vcpu) >> + break; >> + if (vcpu == me) >> + continue; >> + if (!task) >> + continue; >> + if (waitqueue_active(&vcpu->wq)) >> + continue; > > Suppose the vcpu exits at this point, and its task terminates.
Arghh, good point.
> I think the first patch needs some reference counting... I'd move it to > the outermost KVM_RUN loop to reduce the performance impact.
I don't see how refcounting from that other thread could possibly help, and I now see that the task_struct_cachep does not have SLAB_DESTROY_BY_LRU, either :(
What do you have in mind here that would both work and be acceptable to you as KVM maintainer?
-- All rights reversed
| |