Message ID | 1344246924-32620-4-git-send-email-hdk@igel.co.jp (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Hello, On Monday, August 06, 2012 11:55 AM Hideki EIRAKU wrote: > Previously the vb2_dma_contig_mmap() function was using a dma_addr_t as a > physical address. The two addressses are not necessarily the same. > For example, when using the IOMMU funtion on certain platforms, dma_addr_t > addresses are not directly mappable physical address. > dma_mmap_coherent() maps the address correctly. > It is available on ARM platforms. > > Signed-off-by: Hideki EIRAKU <hdk@igel.co.jp> I'm sorry for bringing this issue now, once you have already created v3 of your patches, but similar patch has been already proposed some time ago. It is already processed together with general videobuf2-dma-contig redesign and dma-buf extensions by Tomasz Stanislawski. See post http://thread.gmane.org/gmane.comp.video.dri.devel/70402/focus=49461 and http://thread.gmane.org/gmane.linux.drivers.video-input-infrastructure/49438 It doesn't use conditional code inside videobuf2 allocator and rely entirely on dma-mapping subsystem to provide a working dma_mmap_coherent/writecombine/attrs() function. When it was posted, it relied on the dma-mapping extensions, which now have been finally merged to v3.6-rc1. Now I wonder if there are any architectures, which don't use dma_map_ops based dma-mapping framework, which might use videobuf2-dma-conting module. Best regards
Hello, From: Marek Szyprowski <m.szyprowski@samsung.com> Subject: RE: [PATCH v3 3/4] media: videobuf2-dma-contig: use dma_mmap_coherent if available Date: Tue, 07 Aug 2012 16:53:25 +0200 > I'm sorry for bringing this issue now, once you have already created v3 of your > patches, but similar patch has been already proposed some time ago. It is already > processed together with general videobuf2-dma-contig redesign and dma-buf extensions > by Tomasz Stanislawski. > > See post http://thread.gmane.org/gmane.comp.video.dri.devel/70402/focus=49461 and > http://thread.gmane.org/gmane.linux.drivers.video-input-infrastructure/49438 > > It doesn't use conditional code inside videobuf2 allocator and rely entirely on > dma-mapping subsystem to provide a working dma_mmap_coherent/writecombine/attrs() > function. When it was posted, it relied on the dma-mapping extensions, which now > have been finally merged to v3.6-rc1. Now I wonder if there are any architectures, > which don't use dma_map_ops based dma-mapping framework, which might use > videobuf2-dma-conting module. Thank you for telling me about videobuf2-dma-contig and v3.6-rc1. The videobuf2-dma-contig patch I sent is now unnecessary. So I will remove the patch. I will remove the patch defining ARCH_HAS_DMA_MMAP_COHERENT too because the v3.6-rc1 kernel has generic dma_mmap_coherent() API for every architecture. I will also remove the Laurent's patch I sent because it was related to ARCH_HAS_DMA_MMAP_COHERENT. The remaining patch is sh_mobile_lcdc. I will remove ifdefs from the patch and re-post it as a patch v4.
Hello, On Thursday, August 16, 2012 12:14 PM Hideki EIRAKU wrote: > From: Marek Szyprowski <m.szyprowski@samsung.com> > Subject: RE: [PATCH v3 3/4] media: videobuf2-dma-contig: use dma_mmap_coherent if available > Date: Tue, 07 Aug 2012 16:53:25 +0200 > > > I'm sorry for bringing this issue now, once you have already created v3 of your > > patches, but similar patch has been already proposed some time ago. It is already > > processed together with general videobuf2-dma-contig redesign and dma-buf extensions > > by Tomasz Stanislawski. > > > > See post http://thread.gmane.org/gmane.comp.video.dri.devel/70402/focus=49461 and > > http://thread.gmane.org/gmane.linux.drivers.video-input-infrastructure/49438 > > > > It doesn't use conditional code inside videobuf2 allocator and rely entirely on > > dma-mapping subsystem to provide a working dma_mmap_coherent/writecombine/attrs() > > function. When it was posted, it relied on the dma-mapping extensions, which now > > have been finally merged to v3.6-rc1. Now I wonder if there are any architectures, > > which don't use dma_map_ops based dma-mapping framework, which might use > > videobuf2-dma-conting module. > > Thank you for telling me about videobuf2-dma-contig and v3.6-rc1. The > videobuf2-dma-contig patch I sent is now unnecessary. So I will > remove the patch. I will remove the patch defining > ARCH_HAS_DMA_MMAP_COHERENT too because the v3.6-rc1 kernel has generic > dma_mmap_coherent() API for every architecture. Just to let you know - Tomasz has posted an updated version of the dma-buf/vb2-dma-contig patches: http://www.spinics.net/lists/linux-media/msg51768.html Best regards
diff --git a/drivers/media/video/videobuf2-dma-contig.c b/drivers/media/video/videobuf2-dma-contig.c index 4b71326..7eee9c5 100644 --- a/drivers/media/video/videobuf2-dma-contig.c +++ b/drivers/media/video/videobuf2-dma-contig.c @@ -101,14 +101,31 @@ static unsigned int vb2_dma_contig_num_users(void *buf_priv) static int vb2_dma_contig_mmap(void *buf_priv, struct vm_area_struct *vma) { struct vb2_dc_buf *buf = buf_priv; +#ifdef ARCH_HAS_DMA_MMAP_COHERENT + int ret; +#endif if (!buf) { printk(KERN_ERR "No buffer to map\n"); return -EINVAL; } +#ifdef ARCH_HAS_DMA_MMAP_COHERENT + ret = dma_mmap_coherent(buf->conf->dev, vma, buf->vaddr, buf->dma_addr, + buf->size); + if (ret) { + pr_err("Remapping memory failed, error: %d\n", ret); + return ret; + } + vma->vm_flags |= VM_DONTEXPAND | VM_RESERVED; + vma->vm_private_data = &buf->handler; + vma->vm_ops = &vb2_common_vm_ops; + vma->vm_ops->open(vma); + return 0; +#else return vb2_mmap_pfn_range(vma, buf->dma_addr, buf->size, &vb2_common_vm_ops, &buf->handler); +#endif } static void *vb2_dma_contig_get_userptr(void *alloc_ctx, unsigned long vaddr,
Previously the vb2_dma_contig_mmap() function was using a dma_addr_t as a physical address. The two addressses are not necessarily the same. For example, when using the IOMMU funtion on certain platforms, dma_addr_t addresses are not directly mappable physical address. dma_mmap_coherent() maps the address correctly. It is available on ARM platforms. Signed-off-by: Hideki EIRAKU <hdk@igel.co.jp> --- drivers/media/video/videobuf2-dma-contig.c | 17 +++++++++++++++++ 1 files changed, 17 insertions(+), 0 deletions(-)