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.
Showing the changes to kernel (1 of 3 files). Show all
Unified · Split
| @@ -49,7 +49,6 @@ · 48 unmodified lines | ||
| 49 | 49 | |
| 50 | 50 | enum { |
| 51 | 51 | dma_debug_single, |
| 52 | − dma_debug_page, | |
| 53 | 52 | dma_debug_sg, |
| 54 | 53 | dma_debug_coherent, |
| 55 | 54 | dma_debug_resource, |
| @@ -1300,8 +1299,7 @@ void debug_dma_map_single(struct device *dev, const void *addr, · 1244 unmodified lines | ||
| 1300 | 1299 | EXPORT_SYMBOL(debug_dma_map_single); |
| 1301 | 1300 | |
| 1302 | 1301 | void debug_dma_map_page(struct device *dev, struct page *page, size_t offset, |
| 1303 | − size_t size, int direction, dma_addr_t dma_addr, | |
| 1304 | − bool map_single) | |
| 1302 | + size_t size, int direction, dma_addr_t dma_addr) | |
| 1305 | 1303 | { |
| 1306 | 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, · 8 unmodified lines | ||
| 1316 | 1314 | return; |
| 1317 | 1315 | |
| 1318 | 1316 | entry->dev = dev; |
| 1319 | − entry->type = dma_debug_page; | |
| 1317 | + entry->type = dma_debug_single; | |
| 1320 | 1318 | entry->pfn = page_to_pfn(page); |
| 1321 | 1319 | entry->offset = offset, |
| 1322 | 1320 | entry->dev_addr = dma_addr; |
| @@ -1324,9 +1322,6 @@ void debug_dma_map_page(struct device *dev, struct page *page, size_t offset, · 1 unmodified line | ||
| 1324 | 1322 | entry->direction = direction; |
| 1325 | 1323 | entry->map_err_type = MAP_ERR_NOT_CHECKED; |
| 1326 | 1324 | |
| 1327 | − if (map_single) | |
| 1328 | − entry->type = dma_debug_single; | |
| 1329 | − | |
| 1330 | 1325 | check_for_stack(dev, page, offset); |
| 1331 | 1326 | |
| 1332 | 1327 | if (!PageHighMem(page)) { |
| @@ -1378,10 +1373,10 @@ void debug_dma_mapping_error(struct device *dev, dma_addr_t dma_addr) · 45 unmodified lines | ||
| 1378 | 1373 | EXPORT_SYMBOL(debug_dma_mapping_error); |
| 1379 | 1374 | |
| 1380 | 1375 | void 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 | 1378 | struct dma_debug_entry ref = { |
| 1384 | − .type = dma_debug_page, | |
| 1379 | + .type = dma_debug_single, | |
| 1385 | 1380 | .dev = dev, |
| 1386 | 1381 | .dev_addr = addr, |
| 1387 | 1382 | .size = size, |
| @@ -1390,10 +1385,6 @@ void debug_dma_unmap_page(struct device *dev, dma_addr_t addr, · 2 unmodified lines | ||
| 1390 | 1385 | |
| 1391 | 1386 | if (unlikely(dma_debug_disabled())) |
| 1392 | 1387 | return; |
| 1393 | − | |
| 1394 | − if (map_single) | |
| 1395 | − ref.type = dma_debug_single; | |
| 1396 | − | |
| 1397 | 1388 | check_unmap(&ref); |
| 1398 | 1389 | } |
| 1399 | 1390 | EXPORT_SYMBOL(debug_dma_unmap_page); |