[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20231023061601.GA12056@lst.de>
Date: Mon, 23 Oct 2023 08:16:01 +0200
From: Christoph Hellwig <hch@....de>
To: Marek Szyprowski <m.szyprowski@...sung.com>
Cc: Christoph Hellwig <hch@....de>,
Jim Quinlan <james.quinlan@...adcom.com>,
Linus Walleij <linus.walleij@...aro.org>,
bcm-kernel-feedback-list@...adcom.com, jim2101024@...il.com,
Russell King <linux@...linux.org.uk>,
Arnd Bergmann <arnd@...db.de>,
Geert Uytterhoeven <geert+renesas@...der.be>,
"Russell King (Oracle)" <rmk+kernel@...linux.org.uk>,
Andrew Morton <akpm@...ux-foundation.org>,
Jonathan Corbet <corbet@....net>,
Thomas Gleixner <tglx@...utronix.de>,
Sebastian Reichel <sebastian.reichel@...labora.com>,
"Mike Rapoport (IBM)" <rppt@...nel.org>,
Eric DeVolder <eric.devolder@...cle.com>,
Nathan Chancellor <nathan@...nel.org>,
"Kirill A. Shutemov" <kirill.shutemov@...ux.intel.com>,
Christophe Leroy <christophe.leroy@...roup.eu>,
"moderated list:ARM PORT" <linux-arm-kernel@...ts.infradead.org>,
open list <linux-kernel@...r.kernel.org>
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.
Powered by blists - more mailing lists