Thread (35 messages) flat view 35 messages, 6 authors, 13h ago

Re: [PATCH v6 00/12] dma-buf: heaps: Add support for Tegra VPR

From: Thierry Reding <thierry.reding@kernel.org>
Date: 2026-09-08 09:06:08
Also in: dri-devel, linux-devicetree, linux-iommu, linux-media, linux-mm, linux-s390, linux-tegra, lkml

On Tue, Sep 08, 2026 at 10:39:17AM +0200, Thierry Reding wrote:
On Fri, Sep 04, 2026 at 12:41:05PM +0100, Will Deacon wrote:
quoted
Hi Thierry,

On Fri, Sep 04, 2026 at 12:44:51PM +0200, Thierry Reding wrote:
quoted
This series adds support for the video protection region (VPR) used on
Tegra SoC devices. It's a special region of memory that is protected
from accesses by the CPU and used to store DRM protected content (both
decrypted stream data as well as decoded video frames).

Patches 1 through 3 add DT binding documentation for the VPR and add the
VPR to the list of memory-region items for display, host1x and NVDEC.

The set_direct_map_*_noflush() functions that will be used later in this
series are exported in patch 4 so that the drivers that use them can be
built as a module.

Patch 5 adds bitmap_allocate(), which is like bitmap_allocate_region()
but works on sizes that are not a power of two.

The of_node_to_nid() function is exported in patch 6 because it is used
in a later patch adding a driver that can be built as a module.

Patch 7 introduces new APIs needed by the Tegra VPR implementation that
allow memory to be allocated at a fixed offset within a CMA area. Tegra
VPR needs this in order to implement its own allocator on top of CMA to
meet the strict hardware requirements. This replaces the dynamic CMA
area creation patch from earlier versions.
Did you get a chance to see how this could work with Vincent's series:

https://lore.kernel.org/r/20260902104712.2399797-1-vdonnefort@google.com (local)

? I think that should remove your reliance on can_set_direct_map() and
mean that you can retain block mappings for most of the linear mapping.
I'm not sure if it would help all that much. Yes, if we mark the VPR
region as LLMAP (or PTE_MAP, whichever it ends up being), it should make
the checks for can_set_direct_map() redundant. However, from what I can
tell, Vincent's series still forces page-granularity on these regions,
so it won't retain block mappings at all for them.

The block mappings can be retained for the non-VPR memory, so that's
nice. It also reduces the amount of external prerequisites, but I had
kind of hoped that we could go one step further and keep block mappings
even for the VPR memory if the region happened to be a multiple of the
block size.

The recent addition of page count to the set_direct_map_*() functions
helps reduce the amount of checks that need to be run, so maybe there's
not too much to be gained from removing whole block mappings at once
from the linear map.
I don't think everyone received Sashiko's review, so let me discuss this
here. Sashiko rightly pointed out that set_direct_map_invalid_noflush()
and set_direct_map_default_noflush() return 0 when can_set_direct_map()
fails and that code will then simply continue to work as if the pages
had been removed (or added back) even though they weren't.

    arch/arm64/mm/pageattr.c:set_direct_map_invalid_noflush() {
            ...
            if (!can_set_direct_map())
                    return 0;
            ...
    }

Looking into this a bit, it looks like this is maybe a remnant from the
early days when the check was simpler ("if (!rodata_full)", though I'm
not sure the 0 return value made sense even then), but it seems wrong
indeed for this to result in success when clearly the operation was
skipped.

None of the other architectures seem to have similar checks, except for
clear cases of no-ops (like the address being outside the linear
mapping, the number of pages being 0 or there not being any actual
changes). All of the three callers seem to be prepared to deal with
failure, so I think we should just make these fail instead of returning
0.

Any thought?

Thierry

Attachments

Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help