From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:48248) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z2R0B-0002C3-Tv for qemu-devel@nongnu.org; Tue, 09 Jun 2015 17:24:08 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z2R0B-0001Rr-0L for qemu-devel@nongnu.org; Tue, 09 Jun 2015 17:24:07 -0400 Received: from mx1.redhat.com ([209.132.183.28]:50377) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z2R0A-0001Rm-SF for qemu-devel@nongnu.org; Tue, 09 Jun 2015 17:24:06 -0400 Message-ID: <1433885045.4927.148.camel@redhat.com> From: Alex Williamson Date: Tue, 09 Jun 2015 15:24:05 -0600 In-Reply-To: <2949053b9dfe0e8fd0df9d0c5e32fecddce7f156.1433812962.git.chen.fan.fnst@cn.fujitsu.com> References: <2949053b9dfe0e8fd0df9d0c5e32fecddce7f156.1433812962.git.chen.fan.fnst@cn.fujitsu.com> Content-Type: text/plain; charset="UTF-8" Mime-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [RFC v9 14/18] vfio: improve vfio_pci_hot_reset to support more case List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Chen Fan Cc: izumi.taku@jp.fujitsu.com, qemu-devel@nongnu.org On Tue, 2015-06-09 at 11:37 +0800, Chen Fan wrote: > the vfio_pci_hot_reset differentiate the single and multi in-used > devices for reset. but sometimes we own the group without any devices, > that also should support hot reset. Nope, did you try it? It can be done, but the group still needs to be connected to a container for isolation. > Signed-off-by: Chen Fan > --- > hw/vfio/pci.c | 11 +++++++++++ > 1 file changed, 11 insertions(+) > > diff --git a/hw/vfio/pci.c b/hw/vfio/pci.c > index a4e8658..6507f39 100644 > --- a/hw/vfio/pci.c > +++ b/hw/vfio/pci.c > @@ -3398,6 +3398,7 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) > PCIHostDeviceAddress host; > VFIOPCIDevice *tmp; > VFIODevice *vbasedev_iter; > + bool found; > > host.domain = devices[i].segment; > host.bus = devices[i].bus; > @@ -3427,6 +3428,7 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) > goto out; > } > > + found = false; > /* Prep dependent devices for reset and clear our marker. */ > QLIST_FOREACH(vbasedev_iter, &group->device_list, next) { > if (vbasedev_iter->type != VFIO_DEVICE_TYPE_PCI) { > @@ -3438,12 +3440,21 @@ static int vfio_pci_hot_reset(VFIOPCIDevice *vdev, bool single) > ret = -EINVAL; > goto out_single; > } > + found = true; > vfio_pci_pre_reset(tmp); > tmp->vbasedev.needs_reset = false; > multi = true; > break; > } > } > + > + /* > + * If we own the group but does not own the device, we also > + * should call hot reset with multi. > + */ > + if (!single && !found) { > + multi = true; > + } > } > > if (!single && !multi) {