Messages in this thread | | | Date | Mon, 23 Oct 2023 08:16:01 +0200 | From | Christoph Hellwig <> | Subject | Re: [PATCH v1 1/1] ARM: Select DMA_DIRECT_REMAP to fix restricted DMA |
| |
On Fri, Oct 20, 2023 at 10:16:46AM +0200, Marek Szyprowski wrote: > For historical reasons (performance and limitations of the pre-ARM v7 > cores), on the 32bit ARM the whole kernel's direct mapping is done using > so called 'sections' (1MiB size afair). Those sections are created in > the per-process MMU page tables (there are no separate MMU table for the > kernel mappings), so altering those mappings requires updating bits in > all processes in the system. Practically this means that those mappings > has to be static once created during boot time.
That's actually the same on many architetures, and matches the explanation I heard from Russell before.
> That's why when no CMA > is selected, the whole dma_alloc_coherent() allocations are limited to > rather small region, which is already remapped as non-cached during boot.
But this does not match my understanding of the code:
- arch_dma_alloc calls __dma_alloc with is_coherent set to false - __dma_alloc then selects cma_allocator if CMA is supported for the device / allocation, else remap_allocator if the allocation is allowed to block and only if blocking is not allowed pool_allocator to allocate from the boot-time pool
This very match matches the dma-direct flow with DMA_DIRECT_REMAP selected. The major exception is the direct mapping of the CMA allocations done by arm32.
| |