Am 26.01.22 um 21:36 schrieb Lucas De Marchi:
When dma_buf_map struct is passed around, it's useful to be able to initialize a second map that takes care of reading/writing to an offset of the original map.
Add a helper that copies the struct and add the offset to the proper address.
Well what you propose here can lead to all kind of problems and is rather bad design as far as I can see.
The struct dma_buf_map is only to be filled in by the exporter and should not be modified in this way by the importer.
If you need to copy only a certain subset of the mapping use the functions you added in patch #1.
Regards, Christian.
Cc: Sumit Semwal sumit.semwal@linaro.org Cc: Christian König christian.koenig@amd.com Cc: linux-media@vger.kernel.org Cc: dri-devel@lists.freedesktop.org Cc: linaro-mm-sig@lists.linaro.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Lucas De Marchi lucas.demarchi@intel.com
include/linux/dma-buf-map.h | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+)
diff --git a/include/linux/dma-buf-map.h b/include/linux/dma-buf-map.h index 65e927d9ce33..3514a859f628 100644 --- a/include/linux/dma-buf-map.h +++ b/include/linux/dma-buf-map.h @@ -131,6 +131,35 @@ struct dma_buf_map { .is_iomem = false, \ } +/**
- DMA_BUF_MAP_INIT_OFFSET - Initializes struct dma_buf_map from another dma_buf_map
- @map_: The dma-buf mapping structure to copy from
- @offset: Offset to add to the other mapping
- Initializes a new dma_buf_struct based on another. This is the equivalent of doing:
- .. code-block: c
- dma_buf_map map = other_map;
- dma_buf_map_incr(&map, &offset);
- Example usage:
- .. code-block: c
- void foo(struct device *dev, struct dma_buf_map *base_map)
- {
...
struct dma_buf_map = DMA_BUF_MAP_INIT_OFFSET(base_map, FIELD_OFFSET);
...
- }
- */
+#define DMA_BUF_MAP_INIT_OFFSET(map_, offset_) (struct dma_buf_map) \
- { \
.vaddr = (map_)->vaddr + (offset_), \
.is_iomem = (map_)->is_iomem, \
- }
- /**
- dma_buf_map_set_vaddr - Sets a dma-buf mapping structure to an address in system memory
- @map: The dma-buf mapping structure