Skip to content

Commit f69e342

Browse files
rleonChristoph Hellwig
authored andcommitted
dma-mapping: call ->unmap_page and ->unmap_sg unconditionally
Almost all instances of the dma_map_ops ->map_page()/map_sg() methods implement ->unmap_page()/unmap_sg() too. The once instance which doesn't dma_dummy_ops which is used to fail the DMA mapping and thus there won't be any calls to ->unmap_page()/unmap_sg(). Remove the checks for ->unmap_page()/unmap_sg() and call them directly to create an interface that is symmetrical to ->map_page()/map_sg(). Signed-off-by: Leon Romanovsky <[email protected]> Signed-off-by: Leon Romanovsky <[email protected]> Reviewed-by: Robin Murphy <[email protected]> Signed-off-by: Christoph Hellwig <[email protected]>
1 parent 3be9b84 commit f69e342

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

kernel/dma/dummy.c

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,15 @@ static dma_addr_t dma_dummy_map_page(struct device *dev, struct page *page,
1717
{
1818
return DMA_MAPPING_ERROR;
1919
}
20+
static void dma_dummy_unmap_page(struct device *dev, dma_addr_t dma_handle,
21+
size_t size, enum dma_data_direction dir, unsigned long attrs)
22+
{
23+
/*
24+
* Dummy ops doesn't support map_page, so unmap_page should never be
25+
* called.
26+
*/
27+
WARN_ON_ONCE(true);
28+
}
2029

2130
static int dma_dummy_map_sg(struct device *dev, struct scatterlist *sgl,
2231
int nelems, enum dma_data_direction dir,
@@ -25,6 +34,16 @@ static int dma_dummy_map_sg(struct device *dev, struct scatterlist *sgl,
2534
return -EINVAL;
2635
}
2736

37+
static void dma_dummy_unmap_sg(struct device *dev, struct scatterlist *sgl,
38+
int nelems, enum dma_data_direction dir,
39+
unsigned long attrs)
40+
{
41+
/*
42+
* Dummy ops doesn't support map_sg, so unmap_sg should never be called.
43+
*/
44+
WARN_ON_ONCE(true);
45+
}
46+
2847
static int dma_dummy_supported(struct device *hwdev, u64 mask)
2948
{
3049
return 0;
@@ -33,6 +52,8 @@ static int dma_dummy_supported(struct device *hwdev, u64 mask)
3352
const struct dma_map_ops dma_dummy_ops = {
3453
.mmap = dma_dummy_mmap,
3554
.map_page = dma_dummy_map_page,
55+
.unmap_page = dma_dummy_unmap_page,
3656
.map_sg = dma_dummy_map_sg,
57+
.unmap_sg = dma_dummy_unmap_sg,
3758
.dma_supported = dma_dummy_supported,
3859
};

kernel/dma/mapping.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,7 +177,7 @@ void dma_unmap_page_attrs(struct device *dev, dma_addr_t addr, size_t size,
177177
if (dma_map_direct(dev, ops) ||
178178
arch_dma_unmap_page_direct(dev, addr + size))
179179
dma_direct_unmap_page(dev, addr, size, dir, attrs);
180-
else if (ops->unmap_page)
180+
else
181181
ops->unmap_page(dev, addr, size, dir, attrs);
182182
debug_dma_unmap_page(dev, addr, size, dir);
183183
}
@@ -291,7 +291,7 @@ void dma_unmap_sg_attrs(struct device *dev, struct scatterlist *sg,
291291
if (dma_map_direct(dev, ops) ||
292292
arch_dma_unmap_sg_direct(dev, sg, nents))
293293
dma_direct_unmap_sg(dev, sg, nents, dir, attrs);
294-
else if (ops->unmap_sg)
294+
else
295295
ops->unmap_sg(dev, sg, nents, dir, attrs);
296296
}
297297
EXPORT_SYMBOL(dma_unmap_sg_attrs);

0 commit comments

Comments
 (0)