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 -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
