• Nicolin Chen's avatar
    iommu: Introduce a new iommu_group_replace_domain() API · addb6659
    Nicolin Chen authored
    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 address 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.
    
    Link: https://lore.kernel.org/r/13-v8-6659224517ea+532-iommufd_alloc_jgg@nvidia.comSuggested-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Reviewed-by: default avatarKevin Tian <kevin.tian@intel.com>
    Reviewed-by: default avatarLu Baolu <baolu.lu@linux.intel.com>
    Tested-by: default avatarNicolin Chen <nicolinc@nvidia.com>
    Signed-off-by: default avatarNicolin Chen <nicolinc@nvidia.com>
    Signed-off-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    addb6659
iommu-priv.h 266 Bytes