> From: Jason Gunthorpe <jgg@xxxxxxxxxx> > Sent: Saturday, February 25, 2023 8:28 AM > > From: Nicolin Chen <nicolinc@xxxxxxxxxx> > > qemu has a need to replace the translations associated with a domain > when the guest does large-scale operations like switching between an > IDENTITY domain and, say, dma-iommu.c. > > Currently, it does this by replacing all the mappings in a single > domain, but this is very inefficient and means that domains have to be > per-device rather than per-translation. > > Provide a high-level API to allow replacements of one domain with > another. This is similar to a detach/attach cycle except it doesn't > force the group to go to the blocking domain in-between. > > By removing this forced blocking domain the iommu driver has the > opportunity to implement a non-disruptive replacement of the domain to the > greatest extent its hardware allows. This allows the qemu emulation of the > vIOMMU to be more complete, as real hardware often has a non-distruptive > replacement capability. > > It could be possible to adderss this by simply removing the protection > from the iommu_attach_group(), but it is not so clear if that is safe for > the few users. Thus, add a new API to serve this new purpose. > > All drivers are already required to support changing between active > UNMANAGED domains when using their attach_dev ops. > > This API is expected to be used only by IOMMUFD, so add to the iommu-priv > header and mark it as IOMMUFD_INTERNAL. > > Suggested-by: Jason Gunthorpe <jgg@xxxxxxxxxx> > Signed-off-by: Nicolin Chen <nicolinc@xxxxxxxxxx> > Signed-off-by: Jason Gunthorpe <jgg@xxxxxxxxxx> Reviewed-by: Kevin Tian <kevin.tian@xxxxxxxxx>