On 12/15/2011 04:25 PM, Xiao Guangrong wrote: > On 12/15/2011 02:53 PM, Liu ping fan wrote: > > >> >>>> +struct kvm_vcpu *kvm_vcpu_get(struct kvm_vcpu *vcpu) >>>> +{ >>>> + if (vcpu == NULL) >>>> + return NULL; >>>> + if (atomic_add_unless(&vcpu->refcount, 1, 0)) >>> >>> >>> Why do not use atomic_inc()? >>> Also, i think a memory barrier is needed after increasing refcount. >>> >> Because when refcout==0, we prepare to destroy vcpu, and do not to >> disturb it by increasing the refcount. > > > Oh, get it. > But i think we can do it like this: On the vcpu free path: hold kvm->lock delete vcpu from the kvm->vcpus release kvm->lock synchronize_rcu() kvm_vcpu_put() then, we can avoid get invalid instance and it can make the code simple? -- To unsubscribe from this list: send the line "unsubscribe kvm" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html