Hi Arnd, ---- On Tue, 12 Jul 2022 16:50:46 +0900 Arnd Bergmann wrote --- > Does your hardware require a fixed address for the buffer? If it can be > anywhere in memory (or at least within a certain range) but just has to > be physically contiguous, the normal way would be to use a CMA area > to allocate from, which gives you 'struct page' backed pages. CMA does support Direct I/O, but it has its own issue: It does not guarantee that the memory previously borrowed by the OS will be returned to the device. We've been plagued by examples like this in the past: Many other kernel modules/subsystems have already allocated much memory from both non-CMA and CMA memory, When our DSP driver got probed then, cma_alloc will fail in that non-CMA system memory is not enough for CMA memory to migrate. Regards, Li