• Robin Murphy's avatar
    iommu: Do physical merging in iommu_map_sg() · 5d95f40e
    Robin Murphy authored
    The original motivation for iommu_map_sg() was to give IOMMU drivers the
    chance to map an IOVA-contiguous scatterlist as efficiently as they
    could. It turns out that there isn't really much driver-specific
    business involved there, so now that the default implementation is
    mandatory let's just improve that - the main thing we're after is to use
    larger pages wherever possible, and as long as domain->pgsize_bitmap
    reflects reality, iommu_map() can already do that in a generic way. All
    we need to do is detect physically-contiguous segments and batch them
    into a single map operation, since whatever we do here is transparent to
    our caller and not bound by any segment-length restrictions on the list
    itself.
    
    Speaking of efficiency, there's really very little point in duplicating
    the checks that iommu_map() is going to do anyway, so those get cleared
    up in the process.
    Signed-off-by: default avatarRobin Murphy <robin.murphy@arm.com>
    Signed-off-by: default avatarJoerg Roedel <jroedel@suse.de>
    5d95f40e
iommu.c 49.9 KB