From mboxrd@z Thu Jan 1 00:00:00 1970 From: Alex Williamson Subject: Re: [v3 4/5] vfio: implement APIs to set/put kvm to/from vfio group Date: Mon, 7 Nov 2016 11:28:34 -0700 Message-ID: <20161107112834.2aa971df@t450s.home> References: <1477895706-22824-1-git-send-email-jike.song@intel.com> <1477895706-22824-5-git-send-email-jike.song@intel.com> <20161107110412.5db26fd4@t450s.home> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Cc: Jike Song , guangrong.xiao@linux.intel.com, kwankhede@nvidia.com, cjia@nvidia.com, kevin.tian@intel.com, kvm@vger.kernel.org To: Paolo Bonzini Return-path: Received: from mx1.redhat.com ([209.132.183.28]:40154 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932691AbcKGS2f (ORCPT ); Mon, 7 Nov 2016 13:28:35 -0500 In-Reply-To: Sender: kvm-owner@vger.kernel.org List-ID: On Mon, 7 Nov 2016 19:10:37 +0100 Paolo Bonzini wrote: > On 07/11/2016 19:04, Alex Williamson wrote: > >> > +struct kvm *vfio_group_get_kvm(struct vfio_group *group) > >> > +{ > >> > + struct kvm *kvm = NULL; > > Unnecessary initialization. > > > >> > + > >> > + mutex_lock(&group->udata.lock); > >> > + > >> > + kvm = group->udata.kvm; > >> > + if (kvm) > >> > + kvm_get_kvm(kvm); > >> > + > >> > + mutex_unlock(&group->udata.lock); > >> > + > >> > + return kvm; > >> > +} > >> > +EXPORT_SYMBOL_GPL(vfio_group_get_kvm); > > > > How are kvm references acquired through vfio_group_get_kvm() ever > > released? > > They are released with kvm_put_kvm, but it's done in the vendor driver > so that VFIO core doesn't have a dependency on kvm.ko. We could do a symbol_get() to avoid that so we could have a balanced get/put through one interface. > > Can the reference become invalid? > > No, this is guaranteed by virt/kvm/vfio.c + the udata.lock mutex (which > probably should be renamed...). The caller gets a reference to kvm, but there's no guarantee that the association of that kvm reference to the group stays valid. Once we're outside of that mutex, we might as well consider that kvm:group association stale. > > The caller may still hold > > a kvm references, but couldn't the group be detached from one kvm > > instance and re-attached to another? > > Can this be handled by the vendor driver? Does it get a callback when > it's detached from a KVM instance? The only release callback through vfio is when the user closes the device, the code in this series is the full extent of vfio awareness of kvm. Thanks, Alex