Thread (1 message) flat view 1 message, 1 author, 2021-03-25

Re: [PATCH 2/3] iommu/io-pgtable-arm: Add IOMMU_LLC page protection flag

From: Will Deacon <will@kernel.org>
Date: 2021-03-25 17:34:24
Also in: dri-devel, linux-arm-msm, linux-iommu, lkml

On Tue, Mar 09, 2021 at 12:10:44PM +0530, Sai Prakash Ranjan wrote:
On 2021-02-05 17:38, Sai Prakash Ranjan wrote:
quoted
On 2021-02-04 03:16, Will Deacon wrote:
quoted
On Tue, Feb 02, 2021 at 11:56:27AM +0530, Sai Prakash Ranjan wrote:
quoted
On 2021-02-01 23:50, Jordan Crouse wrote:
quoted
On Mon, Feb 01, 2021 at 08:20:44AM -0800, Rob Clark wrote:
quoted
On Mon, Feb 1, 2021 at 3:16 AM Will Deacon [off-list ref] wrote:
quoted
On Fri, Jan 29, 2021 at 03:12:59PM +0530, Sai Prakash Ranjan wrote:
quoted
On 2021-01-29 14:35, Will Deacon wrote:
quoted
On Mon, Jan 11, 2021 at 07:45:04PM +0530, Sai Prakash Ranjan wrote:
quoted
+#define IOMMU_LLC        (1 << 6)
On reflection, I'm a bit worried about exposing this because I think it
will
introduce a mismatched virtual alias with the CPU (we don't even have a
MAIR
set up for this memory type). Now, we also have that issue for the PTW,
but
since we always use cache maintenance (i.e. the streaming API) for
publishing the page-tables to a non-coheren walker, it works out.
However,
if somebody expects IOMMU_LLC to be coherent with a DMA API coherent
allocation, then they're potentially in for a nasty surprise due to the
mismatched outer-cacheability attributes.
Can't we add the syscached memory type similar to what is done on android?
Maybe. How does the GPU driver map these things on the CPU side?
Currently we use writecombine mappings for everything, although there
are some cases that we'd like to use cached (but have not merged
patches that would give userspace a way to flush/invalidate)
LLC/system cache doesn't have a relationship with the CPU cache.  Its
just a
little accelerator that sits on the connection from the GPU to DDR and
caches
accesses. The hint that Sai is suggesting is used to mark the buffers as
'no-write-allocate' to prevent GPU write operations from being cached in
the LLC
which a) isn't interesting and b) takes up cache space for read
operations.

Its easiest to think of the LLC as a bonus accelerator that has no cost
for
us to use outside of the unfortunate per buffer hint.

We do have to worry about the CPU cache w.r.t I/O coherency (which is a
different hint) and in that case we have all of concerns that Will
identified.
For mismatched outer cacheability attributes which Will
mentioned, I was
referring to [1] in android kernel.
I've lost track of the conversation here :/

When the GPU has a buffer mapped with IOMMU_LLC, is the buffer also
mapped
into the CPU and with what attributes? Rob said "writecombine for
everything" -- does that mean ioremap_wc() / MEMREMAP_WC?
Rob answered this.
quoted
Finally, we need to be careful when we use the word "hint" as
"allocation
hint" has a specific meaning in the architecture, and if we only
mismatch on
those then we're actually ok. But I think IOMMU_LLC is more than
just a
hint, since it actually drives eviction policy (i.e. it enables
writeback).

Sorry for the pedantry, but I just want to make sure we're all talking
about the same things!
Sorry for the confusion which probably was caused by my mentioning of
android, NWA(no write allocate) is an allocation hint which we can
ignore
for now as it is not introduced yet in upstream.
Any chance of taking this forward? We do not want to miss out on small fps
gain when the product gets released.
Do we have a solution to the mismatched virtual alias?

Will

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help