• Robin Murphy's avatar
    iommu/dma: Centralise iommu_setup_dma_ops() · b67483b3
    Robin Murphy authored
    It's somewhat hard to see, but arm64's arch_setup_dma_ops() should only
    ever call iommu_setup_dma_ops() after a successful iommu_probe_device(),
    which means there should be no harm in achieving the same order of
    operations by running it off the back of iommu_probe_device() itself.
    This then puts it in line with the x86 and s390 .probe_finalize bodges,
    letting us pull it all into the main flow properly. As a bonus this lets
    us fold in and de-scope the PCI workaround setup as well.
    
    At this point we can also then pull the call up inside the group mutex,
    and avoid having to think about whether iommu_group_store_type() could
    theoretically race and free the domain if iommu_setup_dma_ops() ran just
    *before* iommu_device_use_default_domain() claims it... Furthermore we
    replace one .probe_finalize call completely, since the only remaining
    implementations are now one which only needs to run once for the initial
    boot-time probe, and two which themselves render that path unreachable.
    
    This leaves us a big step closer to realistically being able to unpick
    the variety of different things that iommu_setup_dma_ops() has been
    muddling together, and further streamline iommu-dma into core API flows
    in future.
    
    Reviewed-by: Lu Baolu <baolu.lu@linux.intel.com> # For Intel IOMMU
    Reviewed-by: default avatarJason Gunthorpe <jgg@nvidia.com>
    Tested-by: default avatarHanjun Guo <guohanjun@huawei.com>
    Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Acked-by: default avatarCatalin Marinas <catalin.marinas@arm.com>
    Link: https://lore.kernel.org/r/bebea331c1d688b34d9862eefd5ede47503961b8.1713523152.git.robin.murphy@arm.comSigned-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    b67483b3
iommu.c 133 KB