Thread (22 messages) 22 messages, 5 authors, 2021-01-28

Re: [PATCH v3 5/6] media: uvcvideo: Use dma_alloc_noncontiguos API

From: ". Christoph Hellwig" <hch@lst.de>
Date: 2021-01-27 16:03:24
Also in: linux-iommu, linux-media, lkml

On Wed, Jan 27, 2021 at 12:29:08AM +0100, Ricardo Ribalda wrote:
- Is there any platform where dma_alloc_noncontiguos can fail?
This is, !ops->alloc_noncontiguous and !dev->coherent_dma_mask
If yes then we need to add a function to let the driver know in
advance that it has to use the coherent allocator (usb_alloc_coherent
for uvc)
dev->coherent_dma_mask is set by the driver.  So the only reason why
dma_alloc_noncontiguos will fail is because is because it can't
allocate any memory.
- In dma_alloc_noncontiguos, on the dma_alloc_pages fallback. If we
have a device where the dma happens in only one direction, could not
get more performance with DMA_FROM/TO_DEVICE instead of
DMA_BIDIRECTIONAL ?
Yes, we could probably do that.

Then I have tried to use the API, and I have encountered a problem: on
uvcvideo the device passed to the memory allocator is different for
DMA_PAGES and NON_CONTIGUOUS:
https://github.com/ribalda/linux/blob/042cd497739f71c8d4a83a67ee970369e2baca4a/drivers/media/usb/uvc/uvc_video.c#L1236

I need to dig a bit tomorrow to figure out why this is, I have
hardware to test both paths, so it should not be too difficult.
I always found the USB dma alloc API a little weird, but we might have
to follow the scheme of the usb coherent wrappers there.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help