Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'dma-mapping-6.13-2024-11-30' of git://git.infradead.org/users/hch/dma-mapping

Pull dma-mapping fix from Christoph Hellwig:

- fix physical address calculation for struct dma_debug_entry (Fedor
Pchelkin)

* tag 'dma-mapping-6.13-2024-11-30' of git://git.infradead.org/users/hch/dma-mapping:
dma-debug: fix physical address calculation for struct dma_debug_entry

+15 -5
+15 -5
kernel/dma/debug.c
··· 1219 1219 1220 1220 entry->dev = dev; 1221 1221 entry->type = dma_debug_single; 1222 - entry->paddr = page_to_phys(page); 1222 + entry->paddr = page_to_phys(page) + offset; 1223 1223 entry->dev_addr = dma_addr; 1224 1224 entry->size = size; 1225 1225 entry->direction = direction; ··· 1377 1377 } 1378 1378 } 1379 1379 1380 + static phys_addr_t virt_to_paddr(void *virt) 1381 + { 1382 + struct page *page; 1383 + 1384 + if (is_vmalloc_addr(virt)) 1385 + page = vmalloc_to_page(virt); 1386 + else 1387 + page = virt_to_page(virt); 1388 + 1389 + return page_to_phys(page) + offset_in_page(virt); 1390 + } 1391 + 1380 1392 void debug_dma_alloc_coherent(struct device *dev, size_t size, 1381 1393 dma_addr_t dma_addr, void *virt, 1382 1394 unsigned long attrs) ··· 1411 1399 1412 1400 entry->type = dma_debug_coherent; 1413 1401 entry->dev = dev; 1414 - entry->paddr = page_to_phys((is_vmalloc_addr(virt) ? 1415 - vmalloc_to_page(virt) : virt_to_page(virt))); 1402 + entry->paddr = virt_to_paddr(virt); 1416 1403 entry->size = size; 1417 1404 entry->dev_addr = dma_addr; 1418 1405 entry->direction = DMA_BIDIRECTIONAL; ··· 1434 1423 if (!is_vmalloc_addr(virt) && !virt_addr_valid(virt)) 1435 1424 return; 1436 1425 1437 - ref.paddr = page_to_phys((is_vmalloc_addr(virt) ? 1438 - vmalloc_to_page(virt) : virt_to_page(virt))); 1426 + ref.paddr = virt_to_paddr(virt); 1439 1427 1440 1428 if (unlikely(dma_debug_disabled())) 1441 1429 return;