• R
    iommu: Add fast hook for getting DMA domains · 6af588fe
    Robin Murphy 提交于
    While iommu_get_domain_for_dev() is the robust way for arbitrary IOMMU
    API callers to retrieve the domain pointer, for DMA ops domains it
    doesn't scale well for large systems and multi-queue devices, since the
    momentary refcount adjustment will lead to exclusive cacheline contention
    when multiple CPUs are operating in parallel on different mappings for
    the same device.
    
    In the case of DMA ops domains, however, this refcounting is actually
    unnecessary, since they already imply that the group exists and is
    managed by platform code and IOMMU internals (by virtue of
    iommu_group_get_for_dev()) such that a reference will already be held
    for the lifetime of the device. Thus we can avoid the bottleneck by
    providing a fast lookup specifically for the DMA code to retrieve the
    default domain it already knows it has set up - a simple read-only
    dereference plays much nicer with cache-coherency protocols.
    Signed-off-by: NRobin Murphy <robin.murphy@arm.com>
    Tested-by: NWill Deacon <will.deacon@arm.com>
    Signed-off-by: NJoerg Roedel <jroedel@suse.de>
    6af588fe
iommu.c 49.9 KB