From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:56507) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z5FBd-0006QR-Hv for qemu-devel@nongnu.org; Wed, 17 Jun 2015 11:23:37 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1Z5FBZ-0003Oc-Dt for qemu-devel@nongnu.org; Wed, 17 Jun 2015 11:23:33 -0400 Received: from mx1.redhat.com ([209.132.183.28]:42349) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1Z5FBZ-0003O2-5l for qemu-devel@nongnu.org; Wed, 17 Jun 2015 11:23:29 -0400 Message-ID: <1434554607.5628.26.camel@redhat.com> From: Alex Williamson Date: Wed, 17 Jun 2015 09:23:27 -0600 In-Reply-To: <55811391.1050908@cn.fujitsu.com> References: <2949053b9dfe0e8fd0df9d0c5e32fecddce7f156.1433812962.git.chen.fan.fnst@cn.fujitsu.com> <1433885045.4927.148.camel@redhat.com> <557FDA05.8070604@cn.fujitsu.com> <1434463719.4927.448.camel@redhat.com> <55811391.1050908@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 Wed, 2015-06-17 at 14:28 +0800, Chen Fan wrote: > On 06/16/2015 10:08 PM, Alex Williamson wrote: > > On Tue, 2015-06-16 at 16:10 +0800, Chen Fan wrote: > >> 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. > > > > All you need is a dual-port card with isolation, which includes all > > Intel 1G NICs (igb & e1000e) as of the quirks that are currently in > > linux-next to be pushed for v4.2. Intel 10G NICs are already quirked > > upstream. There are certainly ways to fake isolation for testing as > > well. Thanks, > > I just have a Intel Corporation 82576 dual-port card, but how can I fake > isolation group for this card in linux-next kernel? can you tell me the > document link? If you're running linux-next and have the card installed under a root port that provides isolation then each port should be in a separate iommu group. Nearly all Intel PCH root ports should have quirks to enable isolation. If you're installing it in a processor root port slot, you need to use a Xeon E5 or better CPU or else the lack of isolation at the root port will negate the isolation capabilities of the endpoint. Thanks, Alex > >>>> 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) { > >>> > >>> > >>> > > > > > > > > . > > >