diff options
| author | Becky Bruce <beckyb@kernel.crashing.org> | 2009-04-08 09:09:19 -0500 | 
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2009-04-08 16:18:37 +0200 | 
| commit | 7fcebbd2d984eac3fdd6da2f4453e7c43d32de89 (patch) | |
| tree | 0ebf481563b44a82688418eb6e607984591b1963 | |
| parent | ef5722f698bde01cfec2b98fff733a48663ebf55 (diff) | |
| download | olio-linux-3.10-7fcebbd2d984eac3fdd6da2f4453e7c43d32de89.tar.xz olio-linux-3.10-7fcebbd2d984eac3fdd6da2f4453e7c43d32de89.zip  | |
swiotlb: rename unmap_single to do_unmap_single
Previously, swiotlb_unmap_page and swiotlb_unmap_sg were
duplicating very similar code.  Refactor that code into a
new unmap_single and unmap_single use do_unmap_single.
Note that the swiotlb_unmap_sg code was previously doing
a complicated comparison to determine if an addresses needed
to be unmapped where a simple is_swiotlb_buffer() call
would have sufficed.
Signed-off-by: Becky Bruce <beckyb@kernel.crashing.org>
Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Cc: jeremy@goop.org
Cc: ian.campbell@citrix.com
LKML-Reference: <1239199761-22886-6-git-send-email-galak@kernel.crashing.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
| -rw-r--r-- | lib/swiotlb.c | 42 | 
1 files changed, 25 insertions, 17 deletions
diff --git a/lib/swiotlb.c b/lib/swiotlb.c index d81afab8516..2bde54a40d8 100644 --- a/lib/swiotlb.c +++ b/lib/swiotlb.c @@ -482,7 +482,7 @@ found:   * dma_addr is the kernel virtual address of the bounce buffer to unmap.   */  static void -unmap_single(struct device *hwdev, char *dma_addr, size_t size, int dir) +do_unmap_single(struct device *hwdev, char *dma_addr, size_t size, int dir)  {  	unsigned long flags;  	int i, count, nslots = ALIGN(size, 1 << IO_TLB_SHIFT) >> IO_TLB_SHIFT; @@ -591,7 +591,7 @@ swiotlb_alloc_coherent(struct device *hwdev, size_t size,  		       (unsigned long long)dev_addr);  		/* DMA_TO_DEVICE to avoid memcpy in unmap_single */ -		unmap_single(hwdev, ret, size, DMA_TO_DEVICE); +		do_unmap_single(hwdev, ret, size, DMA_TO_DEVICE);  		return NULL;  	}  	*dma_handle = dev_addr; @@ -608,7 +608,7 @@ swiotlb_free_coherent(struct device *hwdev, size_t size, void *vaddr,  		free_pages((unsigned long) vaddr, get_order(size));  	else  		/* DMA_TO_DEVICE to avoid memcpy in unmap_single */ -		unmap_single(hwdev, vaddr, size, DMA_TO_DEVICE); +		do_unmap_single(hwdev, vaddr, size, DMA_TO_DEVICE);  }  EXPORT_SYMBOL(swiotlb_free_coherent); @@ -688,17 +688,29 @@ EXPORT_SYMBOL_GPL(swiotlb_map_page);   * After this call, reads by the cpu to the buffer are guaranteed to see   * whatever the device wrote there.   */ -void swiotlb_unmap_page(struct device *hwdev, dma_addr_t dev_addr, -			size_t size, enum dma_data_direction dir, -			struct dma_attrs *attrs) +static void unmap_single(struct device *hwdev, dma_addr_t dev_addr, +			 size_t size, int dir)  {  	char *dma_addr = swiotlb_bus_to_virt(dev_addr);  	BUG_ON(dir == DMA_NONE); -	if (is_swiotlb_buffer(dma_addr)) -		unmap_single(hwdev, dma_addr, size, dir); -	else if (dir == DMA_FROM_DEVICE) -		dma_mark_clean(dma_addr, size); + +	if (is_swiotlb_buffer(dma_addr)) { +		do_unmap_single(hwdev, dma_addr, size, dir); +		return; +	} + +	if (dir != DMA_FROM_DEVICE) +		return; + +	dma_mark_clean(dma_addr, size); +} + +void swiotlb_unmap_page(struct device *hwdev, dma_addr_t dev_addr, +			size_t size, enum dma_data_direction dir, +			struct dma_attrs *attrs) +{ +	unmap_single(hwdev, dev_addr, size, dir);  }  EXPORT_SYMBOL_GPL(swiotlb_unmap_page); @@ -850,13 +862,9 @@ swiotlb_unmap_sg_attrs(struct device *hwdev, struct scatterlist *sgl,  	BUG_ON(dir == DMA_NONE); -	for_each_sg(sgl, sg, nelems, i) { -		if (sg->dma_address != swiotlb_phys_to_bus(hwdev, sg_phys(sg))) -			unmap_single(hwdev, swiotlb_bus_to_virt(sg->dma_address), -				     sg->dma_length, dir); -		else if (dir == DMA_FROM_DEVICE) -			dma_mark_clean(swiotlb_bus_to_virt(sg->dma_address), sg->dma_length); -	} +	for_each_sg(sgl, sg, nelems, i) +		unmap_single(hwdev, sg->dma_address, sg->dma_length, dir); +  }  EXPORT_SYMBOL(swiotlb_unmap_sg_attrs);  |