diff options
author | Hiroshi Doyu <hdoyu@nvidia.com> | 2013-02-27 09:40:39 +0200 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2013-09-14 13:01:05 -0700 |
commit | 8601aa40d5edde480584bf53289fd48cde0b9ab9 (patch) | |
tree | b3cd0d62624296be7722cb484f8b09ffdede0585 /arch/arm/mm/dma-mapping.c | |
parent | 4ed1188b13f8f2f4d989a1cdbf90e8b915e3d234 (diff) |
common: DMA-mapping: add DMA_ATTR_SKIP_FREE_IOVA attribute
This patch adds DMA_ATTR_SKIP_CPU_SYNC attribute to the DMA-mapping
subsystem.
This is the counter part of map_page_at() which just maps the
pre-allocate iova to a page. With this attribute, unmap_page() unmap
the link between iova and a page, leaving iova allocated.
bug 1235233
Change-Id: Id5535b73e0ca212a045dd0b0ff57de8432e7cf13
Signed-off-by: Hiroshi Doyu <hdoyu@nvidia.com>
Reviewed-on: http://git-master/r/204468
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit
Reviewed-by: Alex Waterman <alexw@nvidia.com>
Reviewed-by: Krishna Reddy <vdumpa@nvidia.com>
Diffstat (limited to 'arch/arm/mm/dma-mapping.c')
-rw-r--r-- | arch/arm/mm/dma-mapping.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index 6e92fa88abb7..4a16c6f00952 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -1829,7 +1829,8 @@ static void arm_coherent_iommu_unmap_page(struct device *dev, dma_addr_t handle, return; iommu_unmap(mapping->domain, iova, len); - __free_iova(mapping, iova, len); + if (!dma_get_attr(DMA_ATTR_SKIP_FREE_IOVA, attrs)) + __free_iova(mapping, iova, len); } /** @@ -1858,7 +1859,8 @@ static void arm_iommu_unmap_page(struct device *dev, dma_addr_t handle, __dma_page_dev_to_cpu(page, offset, size, dir); iommu_unmap(mapping->domain, iova, len); - __free_iova(mapping, iova, len); + if (!dma_get_attr(DMA_ATTR_SKIP_FREE_IOVA, attrs)) + __free_iova(mapping, iova, len); } static void arm_iommu_sync_single_for_cpu(struct device *dev, |