* Re: [PATCH 4/4] comedi: allocate DMA coherent buffer as individual pages [not found] ` <20250415114008.5977-5-abbotti@mev.co.uk> @ 2025-04-28 12:56 ` Christoph Hellwig 2025-04-28 15:33 ` Marek Szyprowski 0 siblings, 1 reply; 3+ messages in thread From: Christoph Hellwig @ 2025-04-28 12:56 UTC (permalink / raw) To: Ian Abbott Cc: linux-kernel, Greg Kroah-Hartman, H Hartley Sweeten, Marek Szyprowski, Robin Murphy, iommu On Tue, Apr 15, 2025 at 12:35:59PM +0100, Ian Abbott wrote: > + vma->vm_start = start; > + vma->vm_end = start + PAGE_SIZE; > + retval = dma_mmap_coherent(bm->dma_hw_dev, vma, > + buf->virt_addr, > + buf->dma_addr, PAGE_SIZE); I'm not fan of the vm_start/vm_end manipulation, but I've seen it in other places. In a perfect world we'd have a dma_mmap_coherent_offset or similar helper that encapsulates it, and then maybe later replace that hack with passing on the offset. > + if (retval) > + break; > + > + start += PAGE_SIZE; > + } > + vma->vm_start = vm_start; > + vma->vm_end = vm_end; > } else { > for (i = 0; i < n_pages; ++i) { > unsigned long pfn; > @@ -2407,19 +2421,18 @@ static int comedi_mmap(struct file *file, struct vm_area_struct *vma) > > start += PAGE_SIZE; > } > + } > > #ifdef CONFIG_MMU > - /* > - * Leaving behind a partial mapping of a buffer we're about to > - * drop is unsafe, see remap_pfn_range_notrack(). > - * We need to zap the range here ourselves instead of relying > - * on the automatic zapping in remap_pfn_range() because we call > - * remap_pfn_range() in a loop. > - */ > - if (retval) > - zap_vma_ptes(vma, vma->vm_start, size); > + /* > + * Leaving behind a partial mapping of a buffer we're about to drop is > + * unsafe, see remap_pfn_range_notrack(). We need to zap the range > + * here ourselves instead of relying on the automatic zapping in > + * remap_pfn_range() because we call remap_pfn_range() in a loop. > + */ > + if (retval) > + zap_vma_ptes(vma, vma->vm_start, size); > #endif > - } > > if (retval == 0) { > vma->vm_ops = &comedi_vm_ops; > -- > 2.47.2 ---end quoted text--- ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 4/4] comedi: allocate DMA coherent buffer as individual pages 2025-04-28 12:56 ` [PATCH 4/4] comedi: allocate DMA coherent buffer as individual pages Christoph Hellwig @ 2025-04-28 15:33 ` Marek Szyprowski 2025-04-29 15:59 ` Ian Abbott 0 siblings, 1 reply; 3+ messages in thread From: Marek Szyprowski @ 2025-04-28 15:33 UTC (permalink / raw) To: Christoph Hellwig, Ian Abbott Cc: linux-kernel, Greg Kroah-Hartman, H Hartley Sweeten, Robin Murphy, iommu On 28.04.2025 14:56, Christoph Hellwig wrote: > On Tue, Apr 15, 2025 at 12:35:59PM +0100, Ian Abbott wrote: >> + vma->vm_start = start; >> + vma->vm_end = start + PAGE_SIZE; >> + retval = dma_mmap_coherent(bm->dma_hw_dev, vma, >> + buf->virt_addr, >> + buf->dma_addr, PAGE_SIZE); > I'm not fan of the vm_start/vm_end manipulation, but I've seen it in > other places. In a perfect world we'd have a dma_mmap_coherent_offset > or similar helper that encapsulates it, and then maybe later replace > that hack with passing on the offset. Indeed the dma_mmap_*() makes too many assumptions about the vma. The case You mentioned is probably in drivers/infiniband/hw/hfi1/file_ops.c but I also see that the vma->vm_pgoff is being adjusted before most dma_mmap_*() calls, which proves that the current API is somehow limited. It would be great to fix this too while touching the dma_mmap_attrs() API. Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland ^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH 4/4] comedi: allocate DMA coherent buffer as individual pages 2025-04-28 15:33 ` Marek Szyprowski @ 2025-04-29 15:59 ` Ian Abbott 0 siblings, 0 replies; 3+ messages in thread From: Ian Abbott @ 2025-04-29 15:59 UTC (permalink / raw) To: Marek Szyprowski, Christoph Hellwig Cc: linux-kernel, Greg Kroah-Hartman, H Hartley Sweeten, Robin Murphy, iommu On 28/04/2025 16:33, Marek Szyprowski wrote: > On 28.04.2025 14:56, Christoph Hellwig wrote: >> On Tue, Apr 15, 2025 at 12:35:59PM +0100, Ian Abbott wrote: >>> + vma->vm_start = start; >>> + vma->vm_end = start + PAGE_SIZE; >>> + retval = dma_mmap_coherent(bm->dma_hw_dev, vma, >>> + buf->virt_addr, >>> + buf->dma_addr, PAGE_SIZE); >> I'm not fan of the vm_start/vm_end manipulation, but I've seen it in >> other places. In a perfect world we'd have a dma_mmap_coherent_offset >> or similar helper that encapsulates it, and then maybe later replace >> that hack with passing on the offset. > > Indeed the dma_mmap_*() makes too many assumptions about the vma. The > case You mentioned is probably in drivers/infiniband/hw/hfi1/file_ops.c > but I also see that the vma->vm_pgoff is being adjusted before most > dma_mmap_*() calls, which proves that the current API is somehow > limited. It would be great to fix this too while touching the > dma_mmap_attrs() API. Drivers would probably have to continue manipulating vma->vm_pgoff anyway if they use its value in a special way, like drivers/infiniband/hw/hfil/file_ops.c or drivers/uio/uio.c. The dma_mmap_*() calls already use vma->vm_pgoff as an offset into the VMA area, so I think all the new API would need is a parameter to restrict the number of pages being mapped, or something similar. The new API doesn't necessarily have to be reflected all the way down to the dma_mmap_direct(), iommu_dma_mmap(), and ops->mmap() functions, as the new dma_mmap_*() function could modify vma->vm_end temporarily in order to restrict the number of pages being mapped by the lower-level functions. -- -=( Ian Abbott <abbotti@mev.co.uk> || MEV Ltd. is a company )=- -=( registered in England & Wales. Regd. number: 02862268. )=- -=( Regd. addr.: S11 & 12 Building 67, Europa Business Park, )=- -=( Bird Hall Lane, STOCKPORT, SK3 0XA, UK. || www.mev.co.uk )=- ^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-04-29 17:16 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <20250415114008.5977-1-abbotti@mev.co.uk>
[not found] ` <20250415114008.5977-5-abbotti@mev.co.uk>
2025-04-28 12:56 ` [PATCH 4/4] comedi: allocate DMA coherent buffer as individual pages Christoph Hellwig
2025-04-28 15:33 ` Marek Szyprowski
2025-04-29 15:59 ` Ian Abbott
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox