From e1ee585f1fd191f19b107af69f1896536ddf8d43 Mon Sep 17 00:00:00 2001 From: CMY Date: Mon, 12 May 2014 16:14:53 +0800 Subject: [PATCH] rk: ion: CMA is working abnormal when it placed in high zone Revert "rk: ion: support High Memory for CMA" This reverts commit bf46fdf5df7ee88d9314e041fa4b44d5832a3761. --- arch/arm/mm/dma-mapping.c | 20 --------------- drivers/staging/android/ion/ion_cma_heap.c | 30 ++-------------------- 2 files changed, 2 insertions(+), 48 deletions(-) mode change 100755 => 100644 arch/arm/mm/dma-mapping.c diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c old mode 100755 new mode 100644 index 1ffa971f6dc7..6c9d7054d997 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -587,12 +587,7 @@ static void *__alloc_from_contiguous(struct device *dev, size_t size, static void __free_from_contiguous(struct device *dev, struct page *page, void *cpu_addr, size_t size) { -#ifdef CONFIG_ARCH_ROCKCHIP - #define ION_CMA_UNMAPED 0x1 - if (PageHighMem(page) && (cpu_addr!=(void*)ION_CMA_UNMAPED)) -#else if (PageHighMem(page)) -#endif __dma_free_remap(cpu_addr, size); else __dma_remap(page, size, pgprot_kernel); @@ -703,21 +698,6 @@ void *arm_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, __builtin_return_address(0)); } -#ifdef CONFIG_ARCH_ROCKCHIP -void *arm_dma_alloc_remap(struct page *page, size_t size) -{ - pgprot_t prot = __get_dma_pgprot(NULL, pgprot_kernel); - - return __dma_alloc_remap(page, size, GFP_KERNEL, prot, - __builtin_return_address(0)); -} - -void arm_dma_free_remap(void *cpu_addr, size_t size) -{ - __dma_free_remap(cpu_addr, size); -} -#endif - static void *arm_coherent_dma_alloc(struct device *dev, size_t size, dma_addr_t *handle, gfp_t gfp, struct dma_attrs *attrs) { diff --git a/drivers/staging/android/ion/ion_cma_heap.c b/drivers/staging/android/ion/ion_cma_heap.c index e80133f4371e..e70869e3172d 100755 --- a/drivers/staging/android/ion/ion_cma_heap.c +++ b/drivers/staging/android/ion/ion_cma_heap.c @@ -28,7 +28,6 @@ #include "ion_priv.h" #define ION_CMA_ALLOCATE_FAILED -1 -#define ION_CMA_UNMAPED 0x1 struct ion_cma_heap { struct ion_heap heap; @@ -52,7 +51,7 @@ struct ion_cma_buffer_info { static int ion_cma_get_sgtable(struct device *dev, struct sg_table *sgt, void *cpu_addr, dma_addr_t handle, size_t size) { - struct page *page = phys_to_page(handle); + struct page *page = virt_to_page(cpu_addr); int ret; ret = sg_alloc_table(sgt, 1, GFP_KERNEL); @@ -63,9 +62,6 @@ static int ion_cma_get_sgtable(struct device *dev, struct sg_table *sgt, return 0; } -void arm_dma_free_remap(void *cpu_addr, size_t size); -void * arm_dma_alloc_remap(struct page *page, size_t size); - /* ION CMA heap operations functions */ static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer, unsigned long len, unsigned long align, @@ -115,10 +111,6 @@ static int ion_cma_allocate(struct ion_heap *heap, struct ion_buffer *buffer, goto free_table; /* keep this for memory release */ buffer->priv_virt = info; - if (PageHighMem(phys_to_page(info->handle))) { - arm_dma_free_remap(info->cpu_addr, len); - info->cpu_addr = (void*)ION_CMA_UNMAPED; - } dev_dbg(dev, "Allocate buffer %p\n", buffer); return 0; @@ -199,30 +191,12 @@ static void *ion_cma_map_kernel(struct ion_heap *heap, { struct ion_cma_buffer_info *info = buffer->priv_virt; /* kernel memory mapping has been done at allocation time */ - if (PageHighMem(phys_to_page(info->handle))) { - if (info->cpu_addr==(void*)ION_CMA_UNMAPED) { - info->cpu_addr = arm_dma_alloc_remap(phys_to_page(info->handle), - buffer->size); - if (!info->cpu_addr) - info->cpu_addr = (void*)ION_CMA_UNMAPED; - pr_debug("map addr: %x -> %x\n", info->handle, - (unsigned int)info->cpu_addr); - } - } - return (info->cpu_addr==(void*)ION_CMA_UNMAPED)?0:info->cpu_addr; + return info->cpu_addr; } static void ion_cma_unmap_kernel(struct ion_heap *heap, struct ion_buffer *buffer) { - struct ion_cma_buffer_info *info = buffer->priv_virt; - if (PageHighMem(phys_to_page(info->handle))) { - struct ion_cma_buffer_info *info = buffer->priv_virt; - if (info->cpu_addr!=(void*)ION_CMA_UNMAPED) { - arm_dma_free_remap(info->cpu_addr, buffer->size); - info->cpu_addr = (void*)ION_CMA_UNMAPED; - } - } } int ion_cma_cache_ops(struct ion_heap *heap, -- 2.34.1