summaryrefslogtreecommitdiff
path: root/arch/arm/mm/dma-mapping.c
diff options
context:
space:
mode:
authorHiroshi Doyu <hdoyu@nvidia.com>2013-02-27 09:40:39 +0200
committerDan Willemsen <dwillemsen@nvidia.com>2013-09-14 13:01:05 -0700
commit8601aa40d5edde480584bf53289fd48cde0b9ab9 (patch)
treeb3cd0d62624296be7722cb484f8b09ffdede0585 /arch/arm/mm/dma-mapping.c
parent4ed1188b13f8f2f4d989a1cdbf90e8b915e3d234 (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.c6
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,