From: Boris Brezillon <boris.brezillon@collabora.com>
To: Jason Gunthorpe <jgg@nvidia.com>
Cc: "Alice Ryhl" <aliceryhl@google.com>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Will Deacon" <will@kernel.org>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
"Boqun Feng" <boqun.feng@gmail.com>,
"Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
"Joerg Roedel" <joro@8bytes.org>,
"Robin Murphy" <robin.murphy@arm.com>,
"Lorenzo Stoakes" <lorenzo.stoakes@oracle.com>,
"Liam R. Howlett" <Liam.Howlett@oracle.com>,
"Asahi Lina" <lina+kernel@asahilina.net>,
linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org,
iommu@lists.linux.dev, linux-mm@kvack.org
Subject: Re: [PATCH v3] io: add io_pgtable abstraction
Date: Fri, 12 Dec 2025 09:44:27 +0100 [thread overview]
Message-ID: <20251212094427.2ec0b31e@fedora> (raw)
In-Reply-To: <20251128180255.GA836877@nvidia.com>
Hi Jason,
On Fri, 28 Nov 2025 14:02:55 -0400
Jason Gunthorpe <jgg@nvidia.com> wrote:
> On Wed, Nov 12, 2025 at 10:15:00AM +0000, Alice Ryhl wrote:
> > + /// Map a physically contiguous range of pages of the same size.
> > + ///
> > + /// # Safety
> > + ///
> > + /// * This page table must not contain any mapping that overlaps with the mapping created by
> > + /// this call.
> > + /// * If this page table is live, then the caller must ensure that it's okay to access the
> > + /// physical address being mapped for the duration in which it is mapped.
>
> All the iommu page table code runs with a caller provided locking
> regime.
>
> The caller must effectively hold a range lock over the IOVA it is
> mapping/unmapping/iova_to_phys'ing and it is illegal to race those
> three functions with overlapping IOVA.
>
> For example the caller cannot map to IOVA A-B while unmapping C-B or
> iova_to_physing(A).
>
> This locking detail should be a safety statement.
Sure, adding this to the list sounds good.
>
> > +// These bindings are currently designed for use by GPU drivers, which use this page table together
> > +// with GPUVM. When using GPUVM, a single mapping operation may be translated into many operations
>
> Now that we have the generic pt stuff I wonder if GPUVM should be
> providing its own version of the page table implementation that
> matches its semantics better.
Not too sure what you mean here. Are you saying that we should fork
io-pgtable-arm.c (or rather a subset of it), and have it all
implemented in panthor? I actually asked Rob if that was a good way to
go when rolling out the initial panthor version, and he advised me
against it. Now, I see good reasons to do that, like the fact we
would be able to add features like batched repeat mapping updates
(mapping the same page over a wide virtual range without having to
duplicate the intermediate page table levels that are exactly the
same), or the ability to extend the mapping arguments with
shareability/coherency info (that we can do by adding IOMMU_xx flags
too). But there's also downsides to it, like the fact we wouldn't
benefit from bugfixes materializing in io-pgtable-arm.c, if any.
It's a discussion I'm fine having, but it looks like even the IOMMU
maintainers are not on the same page here ;-p.
>
> > +// on the page table, and in that case you generally want to flush the TLB only once per GPUVM
> > +// operation. Thus, do not use these callbacks as they would flush more often than needed.
>
> This doesn't sound quite right to me, the flushing requirements are a
> consequence of what flushing HW is available in the xTLB that is
> caching this. The flushes generated by the common arm code match the
> ARM64 architecture semantics. If the GPU has different semantics then
> it can do something else, but one must be careful not to match a GPU
> that is expecting ARM semantics with "do not use these callbacks".
>
> IOW it doesn't seem right that common code would be making decisions
> like this, the nature and requirements of the flushing are entirely up
> to the driver binding to HW.
We're not saying this will work for everyone, but rather, this is a
default implementation that does nothing, and if you need to do
something, override it with your own. I guess if that's really
problematic, we can force the user to provide one and keep the NOP
implementation on Tyr's side.
Regards,
Boris
next prev parent reply other threads:[~2025-12-12 8:44 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-12 10:15 [PATCH v3] io: add io_pgtable abstraction Alice Ryhl
2025-11-12 12:57 ` Daniel Almeida
2025-11-17 16:34 ` Alice Ryhl
2025-11-19 8:59 ` Boris Brezillon
2025-11-19 10:53 ` Boris Brezillon
2025-11-19 10:56 ` Boris Brezillon
2025-11-28 11:56 ` Robin Murphy
2025-11-28 12:27 ` Alice Ryhl
2025-11-28 16:47 ` Robin Murphy
2025-12-01 9:58 ` Alice Ryhl
2025-12-01 13:55 ` Robin Murphy
2025-11-28 18:02 ` Jason Gunthorpe
2025-12-12 8:44 ` Boris Brezillon [this message]
2025-12-12 9:21 ` Jason Gunthorpe
2025-12-12 9:41 ` Boris Brezillon
2025-12-14 0:51 ` Jason Gunthorpe
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=20251212094427.2ec0b31e@fedora \
--to=boris.brezillon@collabora.com \
--cc=Liam.Howlett@oracle.com \
--cc=a.hindborg@kernel.org \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=gary@garyguo.net \
--cc=iommu@lists.linux.dev \
--cc=jgg@nvidia.com \
--cc=joro@8bytes.org \
--cc=lina+kernel@asahilina.net \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=lorenzo.stoakes@oracle.com \
--cc=lossin@kernel.org \
--cc=ojeda@kernel.org \
--cc=robin.murphy@arm.com \
--cc=rust-for-linux@vger.kernel.org \
--cc=tmgross@umich.edu \
--cc=will@kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.