From: Thierry Reding <thierry.reding@kernel.org>
To: Marek Szyprowski <m.szyprowski@samsung.com>
Cc: "David Hildenbrand (Arm)" <david@kernel.org>,
"Rob Herring" <robh@kernel.org>,
"Krzysztof Kozlowski" <krzk+dt@kernel.org>,
"Conor Dooley" <conor+dt@kernel.org>,
"Jonathan Hunter" <jonathanh@nvidia.com>,
"Mikko Perttunen" <mperttunen@nvidia.com>,
"Yury Norov" <yury.norov@gmail.com>,
"Rasmus Villemoes" <linux@rasmusvillemoes.dk>,
"Russell King" <linux@armlinux.org.uk>,
"Alexander Gordeev" <agordeev@linux.ibm.com>,
"Gerald Schaefer" <gerald.schaefer@linux.ibm.com>,
"Heiko Carstens" <hca@linux.ibm.com>,
"Vasily Gorbik" <gor@linux.ibm.com>,
"Christian Borntraeger" <borntraeger@linux.ibm.com>,
"Sven Schnelle" <svens@linux.ibm.com>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Lorenzo Stoakes" <ljs@kernel.org>,
"Liam R. Howlett" <liam@infradead.org>,
"Vlastimil Babka" <vbabka@kernel.org>,
"Mike Rapoport" <rppt@kernel.org>,
"Suren Baghdasaryan" <surenb@google.com>,
"Michal Hocko" <mhocko@suse.com>,
"Robin Murphy" <robin.murphy@arm.com>,
"Sumit Semwal" <sumit.semwal@linaro.org>,
"Benjamin Gaignard" <benjamin.gaignard@collabora.com>,
"Brian Starkey" <Brian.Starkey@arm.com>,
"John Stultz" <jstultz@google.com>,
"T.J. Mercier" <tjmercier@google.com>,
"Christian König" <christian.koenig@amd.com>,
"Steven Rostedt" <rostedt@goodmis.org>,
"Masami Hiramatsu" <mhiramat@kernel.org>,
"Mathieu Desnoyers" <mathieu.desnoyers@efficios.com>,
"Catalin Marinas" <catalin.marinas@arm.com>,
"Will Deacon" <will@kernel.org>,
devicetree@vger.kernel.org, linux-tegra@vger.kernel.org,
linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org,
linux-media@vger.kernel.org,
linux-arm-kernel@lists.infradead.org, linux-s390@vger.kernel.org,
linux-mm@kvack.org, iommu@lists.linux.dev,
linaro-mm-sig@lists.linaro.org,
linux-trace-kernel@vger.kernel.org
Subject: Re: [PATCH v3 06/11] mm/cma: Allow dynamically creating CMA areas
Date: Thu, 6 Aug 2026 18:09:08 +0200 [thread overview]
Message-ID: <anSuYvj1JU5K8xUO@orome> (raw)
In-Reply-To: <1eec88e6-1ea8-4525-bb17-e41444d715dc@samsung.com>
[-- Attachment #1: Type: text/plain, Size: 4422 bytes --]
On Thu, Jul 16, 2026 at 12:43:56PM +0200, Marek Szyprowski wrote:
> On 09.07.2026 17:59, Thierry Reding wrote:
> > On Thu, Jul 09, 2026 at 07:56:45AM +0200, Marek Szyprowski wrote:
> >> On 08.07.2026 10:35, David Hildenbrand (Arm) wrote:
> >>> On 7/7/26 12:02, Marek Szyprowski wrote:
> >>>> On 01.07.2026 18:08, Thierry Reding wrote:
> >>>>> From: Thierry Reding <treding@nvidia.com>
> >>>>>
> >>>>> There is no technical reason why there should be a limited number of CMA
> >>>>> regions, so extract some code into helpers and use them to create extra
> >>>>> functions (cma_create() and cma_free()) that allow creating and freeing,
> >>>>> respectively, CMA regions dynamically at runtime.
> >>>> Well, the technical reason for not creating cma regions dynamically at
> >>>> runtime is that on some architectures (like 32bit ARM) the early fixup
> >>>> for the region is needed to make it functional for DMA.
> >>> Can you point me at the code that does that? Thanks!
> >> Check dma_contiguous_early_fixup() and dma_contiguous_remap() in
> >> arch/arm/mm/dma-mapping.c. Those functions ensures that the CPU mappings for
> >> the CMA reserved region in linear map are remapped with 4k pages instead
> >> of the 1M sections, so later, it will be possible to alter the mappings and
> >> change them to coherent when needed (altering 1M sections is not possible,
> >> because each process has it's own level-1 array even for the kernel linear
> >> mapping).
> >>
> >>
> >>
> >> However, in the use case in this patchset the reserved region is only shared
> >> with buddy allocator by using the CMA infrastructure, not registered to the
> >> regular DMA-mapping API, so it would work fine. I'm not convinced that this
> >> is the right API to use for this though.
> > Are you saying you're not convinced that CMA is the right API to use for
> > this? Or something else?
> I read this again and indeed CMA seems to be right solution. I only wonder
> why do You want to create the CMA areas dynamically? Imho it would work if
> You just create large enough CMA area on boot, what would automatically
> share the memory with buddy allocator and then allocate dynamic VPR regions
> with cma_alloc(), potentially unmapping or marking the allocated region as
> reserved in linear kernel mapping to avoid any potential speculative access
> to the protected memory.
Hi Marek,
sorry for missing your reply earlier.
The reason why we want to create the CMA areas dynamically is because we
want to split the secure memory into multiple areas. And the size and
number of these areas may need to vary, so I didn't want to have to rely
on rebuilding kernels with different numbers of maximum CMA areas
depending on the chunk size that we choose.
The reason why we need to split up the protected memory into multiple
CMA areas is that allocation patterns can create holes within a CMA
area. For the VPR memory, however, we must ensure that there aren't any
holes within the protected region because it is specified using a single
base address and a size. So there is one contiguous region that can be
marked protected.
If we were to use a single CMA area, we could get holes within an area
that is marked protected and once the pages are returned to the buddy
allocator with cma_release(), something else could be attempting to
access it and cause an error because it is still protected.
The only way to make sure we get a single, resizable and contiguous
region is by using multiple CMA areas and allocating the entire area
once our allocations need to expand into that new area. So we're not in
fact using much of the CMA infrastructure and actually need to duplicate
some of it. We primarily need it for the page migration and reclaim
functionality.
> In both cases You will probably won't need the DMA-mapping API on top of
> it, although it might be even possible to partially use with by
> registering custom dma_ops for the devices using the protected region
> (assuming that it would support only DMA_ATTR_NO_KERNEL_MAPPING
> allocations).
Yeah, I don't think we want the DMA API on top at all. The allocator has
special needs, like clustered allocations to minimize fragmentation and
keeping as few chunks activated as possible. We also want to avoid
resize operations because they can be quite heavy depending on system
load.
Thierry
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]
next prev parent reply other threads:[~2026-08-06 16:09 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-01 16:08 [PATCH v3 00/11] dma-buf: heaps: Add support for Tegra VPR Thierry Reding
2026-07-01 16:08 ` [PATCH v3 01/11] dt-bindings: reserved-memory: Document " Thierry Reding
2026-07-01 19:53 ` Rob Herring (Arm)
2026-07-02 12:58 ` Thierry Reding
2026-07-08 21:18 ` Rob Herring
2026-07-01 16:08 ` [PATCH v3 02/11] dt-bindings: display: tegra: Document memory regions Thierry Reding
2026-07-01 19:53 ` Rob Herring (Arm)
2026-07-02 13:47 ` Thierry Reding
2026-07-01 16:08 ` [PATCH v3 03/11] dt-bindings: gpu: host1x: Document memory-regions for NVDEC Thierry Reding
2026-07-01 16:08 ` [PATCH v3 04/11] arm64/mm: Add set_memory_device() and set_memory_normal() Thierry Reding
2026-07-02 9:18 ` Will Deacon
2026-07-02 13:46 ` Thierry Reding
2026-07-02 16:41 ` Thierry Reding
2026-07-03 17:13 ` Will Deacon
2026-07-06 13:49 ` Thierry Reding
2026-07-07 11:27 ` Will Deacon
2026-07-07 13:17 ` Robin Murphy
2026-07-07 13:36 ` Mike Rapoport
2026-07-07 14:15 ` Robin Murphy
2026-07-08 6:22 ` Mike Rapoport
2026-07-08 12:50 ` Thierry Reding
2026-07-09 16:13 ` Thierry Reding
2026-07-09 19:58 ` Thierry Reding
2026-07-15 16:01 ` Thierry Reding
2026-07-07 12:15 ` Robin Murphy
2026-07-08 6:08 ` Mike Rapoport
2026-07-08 6:36 ` Reserving memory on ACPI systems (was: [PATCH v3 04/11] arm64/mm: Add set_memory_device() and set_memory_normal()) Mike Rapoport
2026-07-01 16:08 ` [PATCH v3 05/11] bitmap: Add bitmap_allocate() function Thierry Reding
2026-07-01 16:08 ` [PATCH v3 06/11] mm/cma: Allow dynamically creating CMA areas Thierry Reding
2026-07-03 18:29 ` David Hildenbrand (Arm)
2026-07-07 10:02 ` Marek Szyprowski
2026-07-08 8:35 ` David Hildenbrand (Arm)
2026-07-09 5:56 ` Marek Szyprowski
2026-07-09 10:08 ` David Hildenbrand (Arm)
2026-07-09 15:59 ` Thierry Reding
2026-07-16 10:43 ` Marek Szyprowski
2026-08-06 16:09 ` Thierry Reding [this message]
2026-07-08 8:59 ` David Hildenbrand (Arm)
2026-08-06 16:31 ` Thierry Reding
2026-07-08 23:49 ` T.J. Mercier
2026-08-06 16:21 ` Thierry Reding
2026-07-01 16:08 ` [PATCH v3 07/11] dma-buf: heaps: Add debugfs support Thierry Reding
2026-07-03 12:14 ` Maxime Ripard
2026-07-01 16:08 ` [PATCH v3 08/11] dma-buf: heaps: Add support for Tegra VPR Thierry Reding
2026-07-01 16:08 ` [PATCH v3 09/11] arm64: tegra: Add VPR placeholder node on Tegra234 Thierry Reding
2026-07-01 16:08 ` [PATCH v3 10/11] arm64: tegra: Hook up VPR to host1x Thierry Reding
2026-07-01 16:08 ` [PATCH v3 11/11] arm64: tegra: Add VPR placeholder node on Tegra264 Thierry Reding
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=anSuYvj1JU5K8xUO@orome \
--to=thierry.reding@kernel.org \
--cc=Brian.Starkey@arm.com \
--cc=agordeev@linux.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=benjamin.gaignard@collabora.com \
--cc=borntraeger@linux.ibm.com \
--cc=catalin.marinas@arm.com \
--cc=christian.koenig@amd.com \
--cc=conor+dt@kernel.org \
--cc=david@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=dri-devel@lists.freedesktop.org \
--cc=gerald.schaefer@linux.ibm.com \
--cc=gor@linux.ibm.com \
--cc=hca@linux.ibm.com \
--cc=iommu@lists.linux.dev \
--cc=jonathanh@nvidia.com \
--cc=jstultz@google.com \
--cc=krzk+dt@kernel.org \
--cc=liam@infradead.org \
--cc=linaro-mm-sig@lists.linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-media@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-s390@vger.kernel.org \
--cc=linux-tegra@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=linux@rasmusvillemoes.dk \
--cc=ljs@kernel.org \
--cc=m.szyprowski@samsung.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mhiramat@kernel.org \
--cc=mhocko@suse.com \
--cc=mperttunen@nvidia.com \
--cc=robh@kernel.org \
--cc=robin.murphy@arm.com \
--cc=rostedt@goodmis.org \
--cc=rppt@kernel.org \
--cc=sumit.semwal@linaro.org \
--cc=surenb@google.com \
--cc=svens@linux.ibm.com \
--cc=tjmercier@google.com \
--cc=vbabka@kernel.org \
--cc=will@kernel.org \
--cc=yury.norov@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox