qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [RFC v9 14/18] vfio: improve vfio_pci_hot_reset to supp


From: Alex Williamson
Subject: Re: [Qemu-devel] [RFC v9 14/18] vfio: improve vfio_pci_hot_reset to support more case
Date: Tue, 09 Jun 2015 15:24:05 -0600

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 <address@hidden>
> ---
>  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) {






reply via email to

[Prev in Thread] Current Thread [Next in Thread]