> From: Liu, Yi L <yi.l....@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