diff options
| -rw-r--r-- | arch/arm/mm/dma-mapping.c | 42 | 
1 files changed, 18 insertions, 24 deletions
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index 77dc483e64c..0d68d2c83cd 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -446,24 +446,6 @@ void ___dma_single_dev_to_cpu(const void *kaddr, size_t size,  }  EXPORT_SYMBOL(___dma_single_dev_to_cpu); -static void dma_cache_maint_contiguous(struct page *page, unsigned long offset, -		       size_t size, void (*op)(const void *, const void *)) -{ -	void *vaddr; - -	if (!PageHighMem(page)) { -		vaddr = page_address(page) + offset; -		op(vaddr, vaddr + size); -	} else { -		vaddr = kmap_high_get(page); -		if (vaddr) { -			vaddr += offset; -			op(vaddr, vaddr + size); -			kunmap_high(page); -		} -	} -} -  static void dma_cache_maint_page(struct page *page, unsigned long offset,  	size_t size, void (*op)(const void *, const void *))  { @@ -476,14 +458,26 @@ static void dma_cache_maint_page(struct page *page, unsigned long offset,  	size_t left = size;  	do {  		size_t len = left; -		if (PageHighMem(page) && len + offset > PAGE_SIZE) { -			if (offset >= PAGE_SIZE) { -				page += offset / PAGE_SIZE; -				offset %= PAGE_SIZE; +		void *vaddr; + +		if (PageHighMem(page)) { +			if (len + offset > PAGE_SIZE) { +				if (offset >= PAGE_SIZE) { +					page += offset / PAGE_SIZE; +					offset %= PAGE_SIZE; +				} +				len = PAGE_SIZE - offset; +			} +			vaddr = kmap_high_get(page); +			if (vaddr) { +				vaddr += offset; +				op(vaddr, vaddr + len); +				kunmap_high(page);  			} -			len = PAGE_SIZE - offset; +		} else { +			vaddr = page_address(page) + offset; +			op(vaddr, vaddr + len);  		} -		dma_cache_maint_contiguous(page, offset, len, op);  		offset = 0;  		page++;  		left -= len;  |