Skip to content

Commit e230e12

Browse files
Serge Semin via iommupelwell
Serge Semin via iommu
authored andcommitted
dma-direct: take dma-ranges/offsets into account in resource mapping
A basic device-specific linear memory mapping was introduced back in commit ("dma: Take into account dma_pfn_offset") as a single-valued offset preserved in the device.dma_pfn_offset field, which was initialized for instance by means of the "dma-ranges" DT property. Afterwards the functionality was extended to support more than one device-specific region defined in the device.dma_range_map list of maps. But all of these improvements concerned a single pointer, page or sg DMA-mapping methods, while the system resource mapping function turned to miss the corresponding modification. Thus the dma_direct_map_resource() method now just casts the CPU physical address to the device DMA address with no dma-ranges-based mapping taking into account, which is obviously wrong. Let's fix it by using the phys_to_dma_direct() method to get the device-specific bus address from the passed memory resource for the case of the directly mapped DMA. Fixes: 25f1e18 ("dma: Take into account dma_pfn_offset") Signed-off-by: Serge Semin <[email protected]>
1 parent e51e737 commit e230e12

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

kernel/dma/direct.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,7 @@ int dma_direct_map_sg(struct device *dev, struct scatterlist *sgl, int nents,
505505
dma_addr_t dma_direct_map_resource(struct device *dev, phys_addr_t paddr,
506506
size_t size, enum dma_data_direction dir, unsigned long attrs)
507507
{
508-
dma_addr_t dma_addr = paddr;
508+
dma_addr_t dma_addr = phys_to_dma_direct(dev, paddr);
509509

510510
if (unlikely(!dma_capable(dev, dma_addr, size, false))) {
511511
dev_err_once(dev,

0 commit comments

Comments
 (0)