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.tian@xxxxxxxxx> > Reviewed-by: Jason Gunthorpe <jgg@xxxxxxxxxx> > Tested-by: Yanting Jiang <yanting.jiang@xxxxxxxxx> > Signed-off-by: Yi Liu <yi.l.liu@xxxxxxxxx> Reviewed-by: Eric Auger <eric.auger@xxxxxxxxxx> 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)