• Keshavamurthy, Anil S's avatar
    intel-iommu: optimize sg map/unmap calls · f76aec76
    Keshavamurthy, Anil S authored
    This patch adds PageSelectiveInvalidation support replacing existing
    DomainSelectiveInvalidation for intel_{map/unmap}_sg() calls and also
    enables to mapping one big contiguous DMA virtual address which is mapped
    to discontiguous physical address for SG map/unmap calls.
    
    "Doamin selective invalidations" wipes out the IOMMU address translation
    cache based on domain ID where as "Page selective invalidations" wipes out
    the IOMMU address translation cache for that address mask range which is
    more cache friendly when compared to Domain selective invalidations.
    
    Here is how it is done.
    1) changes to iova.c
    alloc_iova() now takes a bool size_aligned argument, which
    when when set, returns the io virtual address that is
    naturally aligned to 2 ^ x, where x is the order
    of the size requested.
    
    Returning this io vitual address which is naturally
    aligned helps iommu to do the "page selective
    invalidations" which is IOMMU cache friendly
    over "domain selective invalidations".
    
    2) Changes to driver/pci/intel-iommu.c
    Clean up intel_{map/unmap}_{single/sg} () calls so that
    s/g map/unamp calls is no more dependent on
    intel_{map/unmap}_single()
    
    intel_map_sg() now computes the total DMA virtual address
    required and allocates the size aligned total DMA virtual address
    and maps the discontiguous physical address to the allocated
    contiguous DMA virtual address.
    
    In the intel_unmap_sg() case since the DMA virtual address
    is contiguous and size_aligned, PageSelectiveInvalidation
    is used replacing earlier DomainSelectiveInvalidations.
    Signed-off-by: default avatarAnil S Keshavamurthy <anil.s.keshavamurthy@intel.com>
    Cc: Greg KH <greg@kroah.com>
    Cc: Ashok Raj <ashok.raj@intel.com>
    Cc: Suresh B <suresh.b.siddha@intel.com>
    Cc: Andi Kleen <ak@suse.de>
    Cc: Arjan van de Ven <arjan@infradead.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    f76aec76
intel-iommu.c 54.2 KB