[PATCH] swiotlb: cleanup some code duplication cruft
The implementations of swiotlb_sync_single_for_{cpu,device} are identical. Likewise for swiotlb_syng_sg_for_{cpu,device}. This patch move the guts of those functions to two new inline functions, and calls the appropriate one from the bodies of those functions. Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
This commit is contained in:
parent
6c654b5fdf
commit
8270f3f1a6
|
@ -594,9 +594,9 @@ swiotlb_unmap_single(struct device *hwdev, dma_addr_t dev_addr, size_t size,
|
||||||
* address back to the card, you must first perform a
|
* address back to the card, you must first perform a
|
||||||
* swiotlb_dma_sync_for_device, and then the device again owns the buffer
|
* swiotlb_dma_sync_for_device, and then the device again owns the buffer
|
||||||
*/
|
*/
|
||||||
void
|
static inline void
|
||||||
swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr,
|
swiotlb_sync_single(struct device *hwdev, dma_addr_t dev_addr,
|
||||||
size_t size, int dir)
|
size_t size, int dir)
|
||||||
{
|
{
|
||||||
char *dma_addr = phys_to_virt(dev_addr);
|
char *dma_addr = phys_to_virt(dev_addr);
|
||||||
|
|
||||||
|
@ -608,18 +608,18 @@ swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr,
|
||||||
mark_clean(dma_addr, size);
|
mark_clean(dma_addr, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
swiotlb_sync_single_for_cpu(struct device *hwdev, dma_addr_t dev_addr,
|
||||||
|
size_t size, int dir)
|
||||||
|
{
|
||||||
|
swiotlb_sync_single(hwdev, dev_addr, size, dir);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr,
|
swiotlb_sync_single_for_device(struct device *hwdev, dma_addr_t dev_addr,
|
||||||
size_t size, int dir)
|
size_t size, int dir)
|
||||||
{
|
{
|
||||||
char *dma_addr = phys_to_virt(dev_addr);
|
swiotlb_sync_single(hwdev, dev_addr, size, dir);
|
||||||
|
|
||||||
if (dir == DMA_NONE)
|
|
||||||
BUG();
|
|
||||||
if (dma_addr >= io_tlb_start && dma_addr < io_tlb_end)
|
|
||||||
sync_single(hwdev, dma_addr, size, dir);
|
|
||||||
else if (dir == DMA_FROM_DEVICE)
|
|
||||||
mark_clean(dma_addr, size);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -696,9 +696,9 @@ swiotlb_unmap_sg(struct device *hwdev, struct scatterlist *sg, int nelems,
|
||||||
* The same as swiotlb_sync_single_* but for a scatter-gather list, same rules
|
* The same as swiotlb_sync_single_* but for a scatter-gather list, same rules
|
||||||
* and usage.
|
* and usage.
|
||||||
*/
|
*/
|
||||||
void
|
static inline void
|
||||||
swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg,
|
swiotlb_sync_sg(struct device *hwdev, struct scatterlist *sg,
|
||||||
int nelems, int dir)
|
int nelems, int dir)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -711,19 +711,18 @@ swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg,
|
||||||
sg->dma_length, dir);
|
sg->dma_length, dir);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
swiotlb_sync_sg_for_cpu(struct device *hwdev, struct scatterlist *sg,
|
||||||
|
int nelems, int dir)
|
||||||
|
{
|
||||||
|
swiotlb_sync_sg(hwdev, sg, nelems, dir);
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg,
|
swiotlb_sync_sg_for_device(struct device *hwdev, struct scatterlist *sg,
|
||||||
int nelems, int dir)
|
int nelems, int dir)
|
||||||
{
|
{
|
||||||
int i;
|
swiotlb_sync_sg(hwdev, sg, nelems, dir);
|
||||||
|
|
||||||
if (dir == DMA_NONE)
|
|
||||||
BUG();
|
|
||||||
|
|
||||||
for (i = 0; i < nelems; i++, sg++)
|
|
||||||
if (sg->dma_address != SG_ENT_PHYS_ADDRESS(sg))
|
|
||||||
sync_single(hwdev, (void *) sg->dma_address,
|
|
||||||
sg->dma_length, dir);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int
|
int
|
||||||
|
|
Loading…
Reference in a new issue