ARM: dma-mapping: Introduce __atomic_get_pages() for __iommu_get_pages()

Support atomic allocation in __iommu_get_pages().

Signed-off-by: Hiroshi Doyu <hdoyu@nvidia.com>
[moved __atomic_get_pages() under #ifdef CONFIG_ARM_DMA_USE_IOMMU
to avoid unused fuction warning for no-IOMMU case]
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>

authored by Hiroshi Doyu and committed by Marek Szyprowski 665bad7b 21d0a759

+12
+12
arch/arm/mm/dma-mapping.c
··· 1136 return 0; 1137 } 1138 1139 static struct page **__iommu_get_pages(void *cpu_addr, struct dma_attrs *attrs) 1140 { 1141 struct vm_struct *area; 1142 1143 if (dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, attrs)) 1144 return cpu_addr;
··· 1136 return 0; 1137 } 1138 1139 + static struct page **__atomic_get_pages(void *addr) 1140 + { 1141 + struct dma_pool *pool = &atomic_pool; 1142 + struct page **pages = pool->pages; 1143 + int offs = (addr - pool->vaddr) >> PAGE_SHIFT; 1144 + 1145 + return pages + offs; 1146 + } 1147 + 1148 static struct page **__iommu_get_pages(void *cpu_addr, struct dma_attrs *attrs) 1149 { 1150 struct vm_struct *area; 1151 + 1152 + if (__in_atomic_pool(cpu_addr, PAGE_SIZE)) 1153 + return __atomic_get_pages(cpu_addr); 1154 1155 if (dma_get_attr(DMA_ATTR_NO_KERNEL_MAPPING, attrs)) 1156 return cpu_addr;