On Thu, Jun 17, 2021 at 5:01 PM Christoph Hellwig <hch@xxxxxx> wrote: > > On Thu, Jun 17, 2021 at 04:56:17PM +0900, Sergey Senozhatsky wrote: > > > This function can use some comments. What is happening AFAICS is that > > > buf->vaddr is either set in vb2_dc_alloc_coherent (unless > > > DMA_ATTR_NO_KERNEL_MAPPING was set), it is obtained through dma_buf_vmap() > > > if the buffer was attached to a dma_buf, or it is allocated via > > > dma_vmap_noncontiguous() for non-coherent memory. > > > > Yeah, it's complicated. Maybe we can make things more symmetrical. > > > > > But this leaves coherent memory with DMA_ATTR_NO_KERNEL_MAPPING set, what > > > is vaddr in that case? I think it will call dma_vmap_noncontiguous() > > > incorrectly in that case, shouldn't there be a check for !buf->coherent_mem > > > before the call to dma_vmap_noncontiguous()? > > > > Thanks a lot for looking into it. > > Can we just kill off DMA_ATTR_NO_KERNEL_MAPPING in v4l now? There really is > no good reason to use that with dma_alloc_noncoherent/noncontiguous > available, and I plan to eventually remove that interface entirely. We still have use cases for dma_alloc_coherent() and DMA_ATTR_NO_KERNEL_MAPPING. Perhaps the way to handle this would be to make the dma_alloc_coherent() behave the same way as dma_alloc_noncontiguous(), where it just allocates the memory without handling the kernel mapping? Best regards, Tomasz