[Intel-gfx] [PATCH v4 09/19] vfio/pci: Accept device fd for hot reset

Liu, Yi L yi.l.liu at intel.com
Wed Feb 22 13:35:06 UTC 2023


> From: Tian, Kevin <kevin.tian at intel.com>
> Sent: Wednesday, February 22, 2023 3:26 PM
> 
> > From: Liu, Yi L <yi.l.liu at intel.com>
> > Sent: Tuesday, February 21, 2023 11:48 AM
> >
> >  	/*
> >  	 * We can't let userspace give us an arbitrarily large buffer to copy,
> > -	 * so verify how many we think there could be.  Note groups can
> have
> > -	 * multiple devices so one group per device is the max.
> > +	 * so verify how many we think there could be.  Note user may
> > provide
> > +	 * a set of groups, group can have multiple devices so one group per
> > +	 * device is the max.
> 
> well this change doesn't include cdev

For cdev, it should be the number of devices. 😊

> 
> > @@ -1320,7 +1321,7 @@ static int vfio_pci_ioctl_pci_hot_reset(struct
> > vfio_pci_core_device *vdev,
> >  		}
> >
> >  		/* Ensure the FD is a vfio FD.*/
> > -		if (!vfio_file_is_valid(file)) {
> > +		if (!vfio_file_is_device_opened(file)) {
> >  			fput(file);
> >  			ret = -EINVAL;
> >  			break;
> 
> that function is not just for checking device.
> 
> Probably rename it to vfio_file_is_reset_valid().

How about vfio_file_is_resettable()?

> btw this patch is insufficient to handle device fd. The current logic
> requires every device in the dev_set covered by provided fd's:
> 
> static bool vfio_dev_in_groups(struct vfio_pci_core_device *vdev,
>                                struct vfio_pci_group_info *groups)
> {
>  	unsigned int i;
> 
> 	for (i = 0; i < groups->count; i++)
> 		if (vfio_file_has_dev(groups->files[i], &vdev->vdev))
> 			return true;
> 	return false;
> }
> 
> Presumably when cdev fd is provided above should compare iommu
> group of the fd and that of the vdev. Otherwise it expects the user
> to have full access to every device in the set which is impractical.

Yes. This can be done by checking the device->vfio_group->iommu_group.
But group code may be compiled out eventually. If CONFIG_VFIO_GROUP==n.
needs to use iommu_group_get() to get iommu_group and compare.

btw. I have a doubt about if it is possible that the iommu_group
can disappear during the reset. If yes, maybe better store iommu_group
in vfio_device in the vfio_register_group_dev() path if CONFIG_VFIO_GROUP
is not enabled.

Regards,
Yi Liu 


More information about the Intel-gfx mailing list