On Thu, May 19, 2022 at 05:45:06PM +0800, Yi Liu wrote: > Hi Jason, > > On 2022/3/19 01:27, Jason Gunthorpe wrote: > > > +/** > > + * iommufd_device_attach - Connect a device to an iommu_domain > > + * @idev: device to attach > > + * @pt_id: Input a IOMMUFD_OBJ_IOAS, or IOMMUFD_OBJ_HW_PAGETABLE > > + * Output the IOMMUFD_OBJ_HW_PAGETABLE ID > > + * @flags: Optional flags > > + * > > + * This connects the device to an iommu_domain, either automatically or manually > > + * selected. Once this completes the device could do DMA. > > + * > > + * The caller should return the resulting pt_id back to userspace. > > + * This function is undone by calling iommufd_device_detach(). > > + */ > > +int iommufd_device_attach(struct iommufd_device *idev, u32 *pt_id, > > + unsigned int flags) > > +{ > Just double check here. > This API doesn't prevent caller from calling this API multiple times with > the same @idev and @pt_id. right? Note that idev has only one device_item > list head. If caller does do multiple callings, then there should be > problem. right? If so, this API assumes caller should take care of it and > not do such bad function call. Is this the design here? Yes, caller must ensure strict pairing, we don't have an assertion to check it. Jason