On Fri, Dec 17, 2021 at 11:38:27AM +0000, Hyeonggon Yoo wrote:
My understanding is any buffer requested from kmalloc (without GFP_DMA/DMA32) can be used by device driver because it allocates continuous physical memory. It doesn't mean that buffer allocated with kmalloc is free of addressing limitation.
Yes.
the addressing limitation comes from the capability of device, not allocation size. if you allocate memory using alloc_pages() or kmalloc(), the device has same limitation. and vmalloc can't be used for devices because they have no MMU.
vmalloc can be used as well, it just needs to be setup as a scatterlist and needs a little lover for DMA challenged platforms with the invalidate_kernel_vmap_range and flush_kernel_vmap_range helpers.
But we can map memory outside DMA zone into bounce buffer (which resides in DMA zone) using DMA API.
Yes, although in a few specific cases the bounce buffer could also come from somewhere else.