On Fri, Apr 21, 2023 at 08:07:19AM +0000, Tian, Kevin wrote: > External email: Use caution opening links or attachments > > > > From: Nicolin Chen <nicolinc@xxxxxxxxxx> > > Sent: Friday, April 21, 2023 3:56 PM > > > > On Fri, Apr 21, 2023 at 07:47:13AM +0000, Tian, Kevin wrote: > > > > > > It is in the commit message of the cover-letter though: > > > > > > https://github.com/nicolinc/iommufd/commit/5e17d270bfca2a5e3e7401d4b > > > > f58ae53eb7a8a55 > > > > -------------------------------------------------------- > > > > Changelog > > > > v2: > > > > * Integrated the uAPI into VFIO_DEVICE_BIND_IOMMUFD call > > > > * Renamed the previous set_rid_user to set_dev_data, to decouple from > > > > the PCI regime. > > > > v1: > > > > https://lore.kernel.org/all/cover.1680762112.git.nicolinc@xxxxxxxxxx/ > > > > -------------------------------------------------------- > > > > > > > > > Could you add some words why changing from passing the information > > > > > in an iommufd ioctl to bind_iommufd? My gut-feeling leans toward > > > > > the latter option... > > > > > > > > Yea. Jason told me to decouple it from PCI. And merge it into > > > > a general uAPI. So I picked the BIND ioctl. > > > > > > > > > > 'decouple it from PCI' is kind of covered by renaming set_rid > > > to set_data. but I didn't get why this has to be merged with another > > > uAPI. Once iommufd_device is created we could have separate > > > ioctls to poke its attributes individually. What'd be broken if this > > > is not done at BIND time? > > > > Oh, sorry. He didn't literally told me to merge, but commented > > "make sense" at my proposal of reusing BIND. So, I don't think > > adding to the BIND is a must here. > > > > The BIND is done in vfio_realize() where the RID (dev_data) is > > available also. And the new uAPI in my v1 actually gets called > > near the BIND. So, I feel we may just do it once? I am open to > > a better idea. > > > > IMHO if this can be done within iommufd then that should be > the choice. vfio doesn't need to know this data at all and doing > so means vdpa or a 3rd driver also needs to implement similar > logic in their uAPI... Reusing the VFIO ioctl is because the device is a VFIO device. But doing it within iommufd could save us a lot of efforts, as you said. So... +/** + * struct iommufd_device_set_data - ioctl(IOMMU_DEVICE_SET_DATA) + * @size: sizeof(struct iommufd_device_set_data) + * @dev_id: The device to set a device data + * @data_uptr: User pointer of the device user data. + * @data_len: Length of the device user data. + */ +struct iommufd_device_set_data { + __u32 size; + __u32 dev_id; + __aligned_u64 data_uptr; + __u32 data_len; +}; +#define IOMMU_DEVICE_SET_DATA _IO(IOMMUFD_TYPE, IOMMUFD_CMD_DEVICE_SET_DATA) + +/** + * struct iommufd_device_unset_data - ioctl(IOMMU_DEVICE_UNSET_DATA) + * @size: sizeof(struct iommufd_device_unset_data) + * @dev_id: The device to unset its device data + */ +struct iommufd_device_unset_data { + __u32 size; + __u32 dev_id; +}; +#define IOMMU_DEVICE_UNSET_DATA _IO(IOMMUFD_TYPE, IOMMUFD_CMD_DEVICE_UNSET_DATA) Maybe just like this? Thanks Nic