From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:52298) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z4lzZ-0004Ow-7J for qemu-devel@nongnu.org; Tue, 16 Jun 2015 04:13:10 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z4lzV-0004dw-19 for qemu-devel@nongnu.org; Tue, 16 Jun 2015 04:13:09 -0400 Received: from [59.151.112.132] (port=55292 helo=heian.cn.fujitsu.com) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z4lzT-0004Q8-QY for qemu-devel@nongnu.org; Tue, 16 Jun 2015 04:13:04 -0400 Message-ID: <557FDA05.8070604@cn.fujitsu.com> Date: Tue, 16 Jun 2015 16:10:45 +0800 From: Chen Fan MIME-Version: 1.0 References: <2949053b9dfe0e8fd0df9d0c5e32fecddce7f156.1433812962.git.chen.fan.fnst@cn.fujitsu.com> <1433885045.4927.148.camel@redhat.com> In-Reply-To: <1433885045.4927.148.camel@redhat.com> Content-Type: text/plain; charset="utf-8"; format=flowed 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: Alex Williamson Cc: izumi.taku@jp.fujitsu.com, qemu-devel@nongnu.org On 06/10/2015 05:24 AM, Alex Williamson wrote: > 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. I'm sorry for that. because I have no such host in hand. but I think if we can keep connect container for each affected group, we also able to use this method to do host bus reset. Thanks, Chen > >> 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) { > > > >