> From: Jason Gunthorpe <jgg@xxxxxxxxxx> > Sent: Tuesday, November 8, 2022 8:53 AM > > + > +int vfio_iommufd_bind(struct vfio_device *vdev, struct iommufd_ctx *ictx) > +{ > + u32 ioas_id; > + u32 device_id; > + int ret; > + > + lockdep_assert_held(&vdev->dev_set->lock); > + > + /* > + * If the driver doesn't provide this op then it means the device does > + * not do DMA at all. So nothing to do. > + */ > + if (!vdev->ops->bind_iommufd) > + return 0; > + > + ret = vdev->ops->bind_iommufd(vdev, ictx, &device_id); > + if (ret) > + return ret; > + > + ret = iommufd_vfio_compat_ioas_id(ictx, &ioas_id); > + if (ret) > + goto err_unbind; > + ret = vdev->ops->attach_ioas(vdev, &ioas_id); > + if (ret) > + goto err_unbind; with our discussion in v1: https://lore.kernel.org/all/Y2mgJqz8fvm54C+f@xxxxxxxxxx/ I got the rationale on iommufd part which doesn't have the concept of container hence not necessarily to impose restriction on when an user can change a compat ioas. But from vfio side I wonder whether we should cache the compat ioas id when it's attached by the first device and then use it all the way for other device attachments coming after. implying IOAS_SET only affects containers which haven't been attached. In concept a container should be only aliased to one compat ioas in its lifetime.