From: "Liam R. Howlett" <Liam.Howlett@oracle.com>
To: Boqun Feng <boqun@kernel.org>
Cc: "Alice Ryhl" <aliceryhl@google.com>,
"Tamir Duberstein" <tamird@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Tamir Duberstein" <tamird@gmail.com>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Alex Gaynor" <alex.gaynor@gmail.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>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
"Lorenzo Stoakes" <lorenzo.stoakes@oracle.com>,
"Vlastimil Babka" <vbabka@suse.cz>,
"Andrew Morton" <akpm@linux-foundation.org>,
"Christoph Lameter" <cl@gentwo.org>,
"David Rientjes" <rientjes@google.com>,
"Roman Gushchin" <roman.gushchin@linux.dev>,
"Harry Yoo" <harry.yoo@oracle.com>,
"Daniel Gomez" <da.gomez@kernel.org>,
rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-mm@kvack.org
Subject: Re: [PATCH v3 05/12] rust: xarray: use `xas_load` instead of `xa_load` in `Guard::load`
Date: Wed, 11 Feb 2026 13:55:43 -0500 [thread overview]
Message-ID: <55jeqjcqqldnvkpnmigc5pbys5ee5xfdo3in7fhbxe7uqnm634@xsykemyms4sy> (raw)
In-Reply-To: <aYzDzeh1cTN2TEVz@tardis.local>
* Boqun Feng <boqun@kernel.org> [260211 13:00]:
> On Wed, Feb 11, 2026 at 09:32:36AM -0500, Liam R. Howlett wrote:
> > * Alice Ryhl <aliceryhl@google.com> [260210 16:34]:
> > > On Tue, Feb 10, 2026 at 10:23 PM Tamir Duberstein <tamird@kernel.org> wrote:
> > > >
> > > > On Tue, Feb 10, 2026 at 12:59 PM Liam R. Howlett
> > > > <Liam.Howlett@oracle.com> wrote:
> > > > > Is this a temporary limitation?
> > > >
> > > > Maybe? I don't think RfL has good abstractions for RCU yet. For
> > > > example, exposing load directly on the xarray using xa_load would
> > > > require a way to guarantee that the returned pointer's target isn't
>
> Well, if we only return a pointer, we don't need to guarantee that,
> right? Because it's up to the user to provide that guarantee. So we
> could have XArray::load() (not Guard::load()) that just calls xa_load().
> Also see below.
>
> > > > being concurrently mutated (e.g. under the xarray lock). I'm not aware
> > > > of anyone asking for this, though.
> > >
> > > It's relatively easy to add an rcu-backed load using the RCU
> > > abstractions we have today. I already shared an RFC containing such a
> > > method for the maple tree, and it would not be much different for
> > > xarray.
> > > https://lore.kernel.org/all/20260116-rcu-box-v1-0-38ebfbcd53f0@google.com/
>
> I need to point out a difference between xas_load() and Alice's usage
> (also what Tamir mentioned above) there, what Alice needs (at least from
> her patchset) is the existence of the object is protected by RCU, i.e.
> if there is someone else dropping the object, a RCU read lock would
> still guarantee the access to the object is valid.
>
> However, the internal RCU usage of both xarray and maple tree is to
> protect the *internal* data structure if I'm not missing anything, i.e.
> an writer may change the array or the tree while a reader is reading,
> the internal structure itself is still consistent and valid. But the
> nothing guarantees the object you read is still valid. For example, you
> can have an xa_erase() racing with an xa_load():
>
> <writer> <reader>
> ptr = xa_erase(xa, idx);
> ptr = xa_load(xa, idx);
> reclaim(ptr);
> use(ptr); // <- object may be gone
>
> the users of xarray needs to use other mechanism to guarantee the
> existence of the object.
>
> In Alice's case, she in fact used an RCU read side critical section with
> a larger scope to protect the object as well, which is definitely nice
> to have, but not only way of using maple/xarray.
The lock surrounding the ptr is only useful if your ptr is rcu
protected, which isn't always the case. So having the rcu read side
critical section extended to the life of the ptr means you've extended
the rcu window for no reason when the ptr is protected in another way.
This may perform poorly, depending on the situation.
>
> > >
> >
> > It would probably be worth having two loads then, one that does
> > rcu_read_lock()/unlock() and one for writer/advanced users like we have
> > on the C side of things.
> >
>
> Agreed. But we may need more ;-)
>
> Here IIUC that Andreas does is adding a `load()` for `Guard` of
> `XArray`, which is the load for a writer and most certainly you won't
> need to take an RCU read lock for that. The load of a reader can be
> added as I suggested above (similar as your "rcu_read_lock()/unlock()"
> suggestion above), but no object existence guarantee. We likely
> need a third API that can provide the object existence similar to what
> Alice had in maple tree.
>
> > Or at least name the load() function to indicate which is implemented
> > today?
> >
>
> It's a namespace thing ;-) , the function in this patch is
> kernel::xarray::Guard::load(), and as I suggest here
> kernel::xarray::XArray::load() should be the same as xa_load().
Ah, okay.. this might be hard to follow in code, but I guess the
compiler will catch the wrong user. That is, Guard::load() would not be
written out, we'd just see array.load() in both cases?
It's also more confusing with the borrowck false positive issue in play.
That is, using Guard::load() will do more work than necessary, I believe?
It is odd that only one of these exist, especially considering we have
users for both on the C side. I guess the other one will be added once
it's needed.
Thanks,
Liam
next prev parent reply other threads:[~2026-02-11 18:56 UTC|newest]
Thread overview: 52+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-09 14:38 [PATCH v3 00/12] rust: xarray: add entry API with preloading Andreas Hindborg
2026-02-09 14:38 ` [PATCH v3 01/12] rust: xarray: minor formatting fixes Andreas Hindborg
2026-02-10 16:44 ` Daniel Gomez
2026-02-10 17:44 ` Liam R. Howlett
2026-02-11 18:30 ` Mukesh Kumar Chaurasiya
2026-02-09 14:38 ` [PATCH v3 02/12] rust: xarray: add debug format for `StoreError` Andreas Hindborg
2026-02-10 16:45 ` Daniel Gomez
2026-02-10 16:55 ` Tamir Duberstein
2026-02-10 17:44 ` Liam R. Howlett
2026-02-09 14:38 ` [PATCH v3 03/12] rust: xarray: add `contains_index` method Andreas Hindborg
2026-02-10 16:46 ` Daniel Gomez
2026-02-10 16:56 ` Tamir Duberstein
2026-02-11 7:31 ` Andreas Hindborg
2026-02-11 18:24 ` Tamir Duberstein
2026-02-10 17:52 ` Liam R. Howlett
2026-02-11 7:41 ` Andreas Hindborg
2026-02-11 18:21 ` Liam R. Howlett
2026-02-12 10:15 ` Andreas Hindborg
2026-02-12 10:52 ` Andreas Hindborg
2026-02-12 11:19 ` Alice Ryhl
2026-02-12 12:39 ` Andreas Hindborg
2026-02-12 17:49 ` Liam R. Howlett
2026-02-13 8:15 ` Alice Ryhl
2026-02-13 8:17 ` Alice Ryhl
2026-02-12 11:27 ` Miguel Ojeda
2026-02-12 12:47 ` Andreas Hindborg
2026-02-12 13:34 ` Miguel Ojeda
2026-02-09 14:38 ` [PATCH v3 04/12] rust: xarray: add `XArrayState` Andreas Hindborg
2026-02-10 16:48 ` Daniel Gomez
2026-02-11 7:42 ` Andreas Hindborg
2026-02-10 16:57 ` Tamir Duberstein
2026-02-09 14:38 ` [PATCH v3 05/12] rust: xarray: use `xas_load` instead of `xa_load` in `Guard::load` Andreas Hindborg
2026-02-10 18:16 ` Liam R. Howlett
2026-02-10 19:53 ` Tamir Duberstein
2026-02-10 20:59 ` Liam R. Howlett
2026-02-10 21:22 ` Tamir Duberstein
2026-02-10 21:34 ` Alice Ryhl
2026-02-11 14:32 ` Liam R. Howlett
2026-02-11 18:00 ` Boqun Feng
2026-02-11 18:19 ` Tamir Duberstein
2026-02-11 18:24 ` Boqun Feng
2026-02-11 18:55 ` Liam R. Howlett [this message]
2026-02-11 19:45 ` Boqun Feng
2026-02-09 14:38 ` [PATCH v3 06/12] rust: xarray: simplify `Guard::load` Andreas Hindborg
2026-02-09 14:38 ` [PATCH v3 07/12] rust: xarray: add `find_next` and `find_next_mut` Andreas Hindborg
2026-02-09 14:38 ` [PATCH v3 08/12] rust: xarray: add entry API Andreas Hindborg
2026-02-09 14:38 ` [PATCH v3 09/12] rust: mm: add abstractions for allocating from a `sheaf` Andreas Hindborg
2026-02-09 14:38 ` [PATCH v3 10/12] rust: mm: sheaf: allow use of C initialized static caches Andreas Hindborg
2026-02-09 14:38 ` [PATCH v3 11/12] xarray, radix-tree: enable sheaf support for kmem_cache Andreas Hindborg
2026-02-10 16:49 ` Daniel Gomez
2026-02-11 7:45 ` Andreas Hindborg
2026-02-09 14:38 ` [PATCH v3 12/12] rust: xarray: add preload API Andreas Hindborg
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=55jeqjcqqldnvkpnmigc5pbys5ee5xfdo3in7fhbxe7uqnm634@xsykemyms4sy \
--to=liam.howlett@oracle.com \
--cc=a.hindborg@kernel.org \
--cc=akpm@linux-foundation.org \
--cc=alex.gaynor@gmail.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun.feng@gmail.com \
--cc=boqun@kernel.org \
--cc=cl@gentwo.org \
--cc=da.gomez@kernel.org \
--cc=dakr@kernel.org \
--cc=gary@garyguo.net \
--cc=harry.yoo@oracle.com \
--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=rientjes@google.com \
--cc=roman.gushchin@linux.dev \
--cc=rust-for-linux@vger.kernel.org \
--cc=tamird@gmail.com \
--cc=tamird@kernel.org \
--cc=tmgross@umich.edu \
--cc=vbabka@suse.cz \
/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