Re: [PATCH v2] staging: android: ion: Add implementation of dma_buf_vmap and dma_buf_vunmap
From: alexey
Date: Tue Jan 30 2018 - 18:45:04 EST
On 01/31/2018 12:15 AM, Greg KH wrote:
On Tue, Jan 30, 2018 at 10:39:13PM +0200, Alexey Skidanov wrote:
dma_buf_vmap and dma_buf_vunmap allow drivers to access buffers, created by ion.
But why would anyone ever want to do that? What is wrong with the
existing interfaces that drivers use to access buffers created by ion?
Any driver, sharing the buffers, created by ion, through dma-buf, may
get back the
sgtable describing the buffer for device DMAÂ and may call dma_buf_vmap
to get back
the kernel virtual address of the buffer to get access to it. Currently,
the second
option is missing. Actually, the buffer already mapped by ion
implementation.
What code uses this new interface?
This is not the new interface. this is the missing implementation of the
last two ops:
struct dma_buf_ops {
 int (* attach) (struct dma_buf *, struct device *, struct
dma_buf_attachment *);
 void (* detach) (struct dma_buf *, struct dma_buf_attachment *);
 struct sg_table * (* map_dma_buf) (struct dma_buf_attachment *, enum
dma_data_direction);
 void (* unmap_dma_buf) (struct dma_buf_attachment *,struct sg_table
*, enum dma_data_direction);
 void (* release) (struct dma_buf *);
 int (* begin_cpu_access) (struct dma_buf *, enum dma_data_direction);
 int (* end_cpu_access) (struct dma_buf *, enum dma_data_direction);
 void *(* map_atomic) (struct dma_buf *, unsigned long);
 void (* unmap_atomic) (struct dma_buf *, unsigned long, void *);
 void *(* map) (struct dma_buf *, unsigned long);
 void (* unmap) (struct dma_buf *, unsigned long, void *);
 int (* mmap) (struct dma_buf *, struct vm_area_struct *vma);
 void *(* vmap) (struct dma_buf *);
 void (* vunmap) (struct dma_buf *, void *vaddr);
};
We need a bit more information please.
thanks,
greg k-h
Thanks,
Alexey