On 4/1/23 16:44, Yi Liu wrote:
> Now user can also provide an array of device fds as a 3rd method to verify
> the reset ownership. It's not useful at this point when the device fds are
> acquired via group fds. But it's necessary when moving to device cdev which
> allows the user to directly acquire device fds by skipping group. In that
> case this method can be used as a last resort when the preferred iommufd
> verification doesn't work, e.g. in noiommu usages.
>
> Clarify it in uAPI.
>
> Reviewed-by: Kevin Tian <kevin.t...@intel.com>
> Reviewed-by: Jason Gunthorpe <j...@nvidia.com>
> Tested-by: Yanting Jiang <yanting.ji...@intel.com>
> Signed-off-by: Yi Liu <yi.l....@intel.com>
Reviewed-by: Eric Auger <eric.au...@redhat.com>

Eric
> ---
>  drivers/vfio/pci/vfio_pci_core.c | 9 +++++----
>  include/uapi/linux/vfio.h        | 3 ++-
>  2 files changed, 7 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/vfio/pci/vfio_pci_core.c 
> b/drivers/vfio/pci/vfio_pci_core.c
> index da6325008872..19f5b075d70a 100644
> --- a/drivers/vfio/pci/vfio_pci_core.c
> +++ b/drivers/vfio/pci/vfio_pci_core.c
> @@ -1289,7 +1289,7 @@ vfio_pci_ioctl_pci_hot_reset_files(struct 
> vfio_pci_core_device *vdev,
>               return -ENOMEM;
>       }
>  
> -     if (copy_from_user(fds, arg->group_fds,
> +     if (copy_from_user(fds, arg->fds,
>                          hdr->count * sizeof(*fds))) {
>               kfree(fds);
>               kfree(files);
> @@ -1297,8 +1297,8 @@ vfio_pci_ioctl_pci_hot_reset_files(struct 
> vfio_pci_core_device *vdev,
>       }
>  
>       /*
> -      * Get the group file for each fd to ensure the group held across
> -      * the reset
> +      * Get the file for each fd to ensure the group/device file
> +      * is held across the reset
>        */
>       for (file_idx = 0; file_idx < hdr->count; file_idx++) {
>               struct file *file = fget(fds[file_idx]);
> @@ -2469,7 +2469,8 @@ static int vfio_pci_dev_set_hot_reset(struct 
> vfio_device_set *dev_set,
>                * cannot race being opened by another user simultaneously.
>                *
>                * Otherwise all opened devices in the dev_set must be
> -              * contained by the set of groups provided by the user.
> +              * contained by the set of groups/devices provided by
> +              * the user.
>                *
>                * If user provides a zero-length array, then all the
>                * opened devices must be bound to a same iommufd_ctx.
> diff --git a/include/uapi/linux/vfio.h b/include/uapi/linux/vfio.h
> index 17aa5d09db41..25432ef213ee 100644
> --- a/include/uapi/linux/vfio.h
> +++ b/include/uapi/linux/vfio.h
> @@ -681,6 +681,7 @@ struct vfio_pci_hot_reset_info {
>   *
>   * The ownership can be proved by:
>   *   - An array of group fds
> + *   - An array of device fds
>   *   - A zero-length array
>   *
>   * In the last case all affected devices which are opened by this user
> @@ -694,7 +695,7 @@ struct vfio_pci_hot_reset {
>       __u32   argsz;
>       __u32   flags;
>       __u32   count;
> -     __s32   group_fds[];
> +     __s32   fds[];
>  };
>  
>  #define VFIO_DEVICE_PCI_HOT_RESET    _IO(VFIO_TYPE, VFIO_BASE + 13)

Reply via email to