Skip to content

Commit 4ad4c1f

Browse files
rmurphy-armChristoph Hellwig
authored andcommitted
dma-mapping: don't store redundant offsets
A bus_dma_region necessarily stores both CPU and DMA base addresses for a range, so there's no need to also store the difference between them. Signed-off-by: Robin Murphy <robin.murphy@arm.com> Acked-by: Rob Herring <robh@kernel.org> Signed-off-by: Christoph Hellwig <hch@lst.de>
1 parent 3f71685 commit 4ad4c1f

4 files changed

Lines changed: 12 additions & 10 deletions

File tree

drivers/acpi/scan.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1532,7 +1532,6 @@ int acpi_dma_get_range(struct device *dev, const struct bus_dma_region **map)
15321532
r->cpu_start = rentry->res->start;
15331533
r->dma_start = rentry->res->start - rentry->offset;
15341534
r->size = resource_size(rentry->res);
1535-
r->offset = rentry->offset;
15361535
r++;
15371536
}
15381537
}

drivers/of/address.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -955,7 +955,6 @@ int of_dma_get_range(struct device_node *np, const struct bus_dma_region **map)
955955
r->cpu_start = range.cpu_addr;
956956
r->dma_start = range.bus_addr;
957957
r->size = range.size;
958-
r->offset = range.cpu_addr - range.bus_addr;
959958
r++;
960959
}
961960
out:

include/linux/dma-direct.h

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -21,17 +21,19 @@ struct bus_dma_region {
2121
phys_addr_t cpu_start;
2222
dma_addr_t dma_start;
2323
u64 size;
24-
u64 offset;
2524
};
2625

2726
static inline dma_addr_t translate_phys_to_dma(struct device *dev,
2827
phys_addr_t paddr)
2928
{
3029
const struct bus_dma_region *m;
3130

32-
for (m = dev->dma_range_map; m->size; m++)
33-
if (paddr >= m->cpu_start && paddr - m->cpu_start < m->size)
34-
return (dma_addr_t)paddr - m->offset;
31+
for (m = dev->dma_range_map; m->size; m++) {
32+
u64 offset = paddr - m->cpu_start;
33+
34+
if (paddr >= m->cpu_start && offset < m->size)
35+
return m->dma_start + offset;
36+
}
3537

3638
/* make sure dma_capable fails when no translation is available */
3739
return DMA_MAPPING_ERROR;
@@ -42,9 +44,12 @@ static inline phys_addr_t translate_dma_to_phys(struct device *dev,
4244
{
4345
const struct bus_dma_region *m;
4446

45-
for (m = dev->dma_range_map; m->size; m++)
46-
if (dma_addr >= m->dma_start && dma_addr - m->dma_start < m->size)
47-
return (phys_addr_t)dma_addr + m->offset;
47+
for (m = dev->dma_range_map; m->size; m++) {
48+
u64 offset = dma_addr - m->dma_start;
49+
50+
if (dma_addr >= m->dma_start && offset < m->size)
51+
return m->cpu_start + offset;
52+
}
4853

4954
return (phys_addr_t)-1;
5055
}

kernel/dma/direct.c

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -677,7 +677,6 @@ int dma_direct_set_offset(struct device *dev, phys_addr_t cpu_start,
677677
return -ENOMEM;
678678
map[0].cpu_start = cpu_start;
679679
map[0].dma_start = dma_start;
680-
map[0].offset = offset;
681680
map[0].size = size;
682681
dev->dma_range_map = map;
683682
return 0;

0 commit comments

Comments
 (0)