summaryrefslogtreecommitdiffstats
path: root/kernel
diff options
context:
space:
mode:
authorChristoph Hellwig <hch@lst.de>2018-12-25 02:50:35 -0500
committerChristoph Hellwig <hch@lst.de>2019-01-04 03:02:17 -0500
commit2e05ea5cdc1ac55d9ef678ed5ea6c38acf7fd2a3 (patch)
treee88e6506cf6ad38bd2ad3d764a20290dbf0b6818 /kernel
parent96d4f267e40f9509e8a66e2b39e8b95655617693 (diff)
dma-mapping: implement dma_map_single_attrs using dma_map_page_attrs
And also switch the way we implement the unmap side around to stay consistent. This ensures dma-debug works again because it records which function we used for mapping to ensure it is also used for unmapping, and also reduces further code duplication. Last but not least this also officially allows calling dma_sync_single_* for mappings created using dma_map_page, which is perfectly fine given that the sync calls only take a dma_addr_t, but not a virtual address or struct page. Fixes: 7f0fee242e ("dma-mapping: merge dma_unmap_page_attrs and dma_unmap_single_attrs") Signed-off-by: Christoph Hellwig <hch@lst.de> Tested-by: LABBE Corentin <clabbe.montjoie@gmail.com>
Diffstat (limited to 'kernel')
-rw-r--r--kernel/dma/debug.c17
1 files changed, 4 insertions, 13 deletions
diff --git a/kernel/dma/debug.c b/kernel/dma/debug.c
index 164706da2a73..1e0157113d15 100644
--- a/kernel/dma/debug.c
+++ b/kernel/dma/debug.c
@@ -49,7 +49,6 @@
49 49
50enum { 50enum {
51 dma_debug_single, 51 dma_debug_single,
52 dma_debug_page,
53 dma_debug_sg, 52 dma_debug_sg,
54 dma_debug_coherent, 53 dma_debug_coherent,
55 dma_debug_resource, 54 dma_debug_resource,
@@ -1300,8 +1299,7 @@ void debug_dma_map_single(struct device *dev, const void *addr,
1300EXPORT_SYMBOL(debug_dma_map_single); 1299EXPORT_SYMBOL(debug_dma_map_single);
1301 1300
1302void debug_dma_map_page(struct device *dev, struct page *page, size_t offset, 1301void debug_dma_map_page(struct device *dev, struct page *page, size_t offset,
1303 size_t size, int direction, dma_addr_t dma_addr, 1302 size_t size, int direction, dma_addr_t dma_addr)
1304 bool map_single)
1305{ 1303{
1306 struct dma_debug_entry *entry; 1304 struct dma_debug_entry *entry;
1307 1305
@@ -1316,7 +1314,7 @@ void debug_dma_map_page(struct device *dev, struct page *page, size_t offset,
1316 return; 1314 return;
1317 1315
1318 entry->dev = dev; 1316 entry->dev = dev;
1319 entry->type = dma_debug_page; 1317 entry->type = dma_debug_single;
1320 entry->pfn = page_to_pfn(page); 1318 entry->pfn = page_to_pfn(page);
1321 entry->offset = offset, 1319 entry->offset = offset,
1322 entry->dev_addr = dma_addr; 1320 entry->dev_addr = dma_addr;
@@ -1324,9 +1322,6 @@ void debug_dma_map_page(struct device *dev, struct page *page, size_t offset,
1324 entry->direction = direction; 1322 entry->direction = direction;
1325 entry->map_err_type = MAP_ERR_NOT_CHECKED; 1323 entry->map_err_type = MAP_ERR_NOT_CHECKED;
1326 1324
1327 if (map_single)
1328 entry->type = dma_debug_single;
1329
1330 check_for_stack(dev, page, offset); 1325 check_for_stack(dev, page, offset);
1331 1326
1332 if (!PageHighMem(page)) { 1327 if (!PageHighMem(page)) {
@@ -1378,10 +1373,10 @@ void debug_dma_mapping_error(struct device *dev, dma_addr_t dma_addr)
1378EXPORT_SYMBOL(debug_dma_mapping_error); 1373EXPORT_SYMBOL(debug_dma_mapping_error);
1379 1374
1380void debug_dma_unmap_page(struct device *dev, dma_addr_t addr, 1375void debug_dma_unmap_page(struct device *dev, dma_addr_t addr,
1381 size_t size, int direction, bool map_single) 1376 size_t size, int direction)
1382{ 1377{
1383 struct dma_debug_entry ref = { 1378 struct dma_debug_entry ref = {
1384 .type = dma_debug_page, 1379 .type = dma_debug_single,
1385 .dev = dev, 1380 .dev = dev,
1386 .dev_addr = addr, 1381 .dev_addr = addr,
1387 .size = size, 1382 .size = size,
@@ -1390,10 +1385,6 @@ void debug_dma_unmap_page(struct device *dev, dma_addr_t addr,
1390 1385
1391 if (unlikely(dma_debug_disabled())) 1386 if (unlikely(dma_debug_disabled()))
1392 return; 1387 return;
1393
1394 if (map_single)
1395 ref.type = dma_debug_single;
1396
1397 check_unmap(&ref); 1388 check_unmap(&ref);
1398} 1389}
1399EXPORT_SYMBOL(debug_dma_unmap_page); 1390EXPORT_SYMBOL(debug_dma_unmap_page);