[Intel-gfx] [PATCH v3 12/15] vfio: Make vfio_device_open() single open for device cdev path

Tian, Kevin kevin.tian at intel.com
Tue Feb 14 08:25:57 UTC 2023


> From: Liu, Yi L <yi.l.liu at intel.com>
> Sent: Monday, February 13, 2023 11:14 PM
> 
> With the introduction of vfio device cdev, userspace can get device
> access by either the legacy group path or the cdev path. For VFIO devices,
> it can only be opened by one of the group path and the cdev path at one
> time. e.g. when the device is opened via cdev path, the group path should
> be failed. Both paths will call into vfio_device_open(), so the exclusion
> is done in it.

the exclusive part between two paths is handled by the last patch.

this patch should stay with explaining single-open facet in cdev path.

> 
> +	/*
> +	 * Device cdev path cannot support multiple device open since
> +	 * it doesn't have a secure way for it. So a second device
> +	 * open attempt should be failed if the caller is from a cdev
> +	 * path.
> +	 */

remove the last sentence.

> +	if (device->open_count != 0 && df->is_cdev_device)
> +		return -EINVAL;
> +
>  	device->open_count++;
>  	if (device->open_count == 1) {
>  		ret = vfio_device_first_open(df, dev_id, pt_id);
> @@ -543,7 +552,12 @@ static int vfio_device_fops_release(struct inode
> *inode, struct file *filep)
>  	struct vfio_device_file *df = filep->private_data;
>  	struct vfio_device *device = df->device;
> 
> -	vfio_device_group_close(df);
> +	/*
> +	 * group path supports multiple device open, while cdev doesn't.
> +	 * So use vfio_device_group_close() for !is_cdev_device case.
> +	 */

I don't say why multi-open is the reason to call group_close(). Isn't
it straightforward to do so in the group path? I'd just remove the comment.

> +	if (!df->is_cdev_device)
> +		vfio_device_group_close(df);
> 
>  	vfio_device_put_registration(device);
> 
> --
> 2.34.1



More information about the Intel-gfx mailing list