All of lore.kernel.org
 help / color / mirror / Atom feed
From: Boqun Feng <boqun.feng@gmail.com>
To: Alice Ryhl <aliceryhl@google.com>
Cc: "Andrew Morton" <akpm@linux-foundation.org>,
	"Liam R. Howlett" <Liam.Howlett@oracle.com>,
	"Lorenzo Stoakes" <lorenzo.stoakes@oracle.com>,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Andrew Ballance" <andrewjballance@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>,
	linux-kernel@vger.kernel.org, maple-tree@lists.infradead.org,
	rust-for-linux@vger.kernel.org, linux-mm@kvack.org
Subject: Re: [PATCH 1/3] rust: maple_tree: add MapleTree
Date: Mon, 28 Jul 2025 09:04:11 -0700	[thread overview]
Message-ID: <aIefe_MEPd_yicde@tardis-2.local> (raw)
In-Reply-To: <20250726-maple-tree-v1-1-27a3da7cb8e5@google.com>

On Sat, Jul 26, 2025 at 01:23:22PM +0000, Alice Ryhl wrote:
> The maple tree will be used in the Tyr driver to allocate and keep track
> of GPU allocations created internally (i.e. not by userspace). It will
> likely also be used in the Nova driver eventually.
> 
> This adds the simplest methods for additional and removal that do not
> require any special care with respect to concurrency.
> 
> This implementation is based on the RFC by Andrew but with significant
> changes to simplify the implementation.
> 
> Co-developed-by: Andrew Ballance <andrewjballance@gmail.com>
> Signed-off-by: Andrew Ballance <andrewjballance@gmail.com>
> Signed-off-by: Alice Ryhl <aliceryhl@google.com>
> ---
[...]
> +    /// Free all `T` instances in this tree.
> +    ///
> +    /// # Safety
> +    ///
> +    /// This frees Rust data referenced by the maple tree without removing it from the maple tree.
> +    /// The caller must ensure that no reference that remains in the maple tree is used incorrectly
> +    /// after this call.
> +    unsafe fn free_all_entries(self: Pin<&mut Self>) {
> +        // SAFETY: The pointer references a valid maple tree.
> +        let ma_state = unsafe { Opaque::new(bindings::MA_STATE(self.tree.get(), 0, usize::MAX)) };
> +

A meta comment here for the future direction: I think it really makes a
lot of sense if we could have the Rust abstraction for struct ma_state,
that'll allow us to have flexible locking strategy and Iterator-like
interface. Maybe it's something Andrew can take a deeper look when
MapleTree binding is in-tree (no word play intented ;-))?

For example, with a ma_state binding, we can do:

    let mas = MAState::new(self, 0..);

    while let Some(v) = mas.next() {
    	drop(v)
    }

Regards,
Boqun

> +        loop {
> +            // SAFETY: The maple tree is valid. This call to `free_all_entries` has exclusive
> +            // access to the maple tree, so no further synchronization is required.
> +            let ptr = unsafe { bindings::mas_find(ma_state.get(), usize::MAX) };
> +            if ptr.is_null() {
> +                break;
> +            }
> +            // SAFETY: By the type invariants, this pointer references a valid value of type `T`.
> +            // By the safety requirements, it is okay to free it without removing it from the maple
> +            // tree.
> +            unsafe { drop(T::from_foreign(ptr)) };
> +        }
> +    }
> +}
> +
[...]


  parent reply	other threads:[~2025-07-28 16:04 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-07-26 13:23 [PATCH 0/3] Add Rust abstraction for Maple Trees Alice Ryhl
2025-07-26 13:23 ` [PATCH 1/3] rust: maple_tree: add MapleTree Alice Ryhl
2025-07-26 15:45   ` Gary Guo
2025-08-19  9:09     ` Alice Ryhl
2025-07-26 16:23   ` Matthew Wilcox
2025-07-26 16:41     ` Alice Ryhl
2025-07-28 16:04   ` Boqun Feng [this message]
2025-07-28 16:39     ` Danilo Krummrich
2025-08-07 16:12   ` Liam R. Howlett
2025-08-08  8:37     ` Alice Ryhl
2025-07-26 13:23 ` [PATCH 2/3] rust: maple_tree: add MapleTree::lock() and load() Alice Ryhl
2025-07-26 15:50   ` Gary Guo
2025-07-26 16:15     ` Alice Ryhl
2025-07-26 16:18       ` Alice Ryhl
2025-07-27 12:02         ` Gary Guo
2025-08-07 16:15           ` Liam R. Howlett
2025-08-07 18:30             ` Danilo Krummrich
2025-07-28 11:11   ` Andrew Ballance
2025-07-28 11:19     ` Alice Ryhl
2025-07-28 11:52   ` Danilo Krummrich
2025-07-28 15:19   ` Boqun Feng
2025-07-26 13:23 ` [PATCH 3/3] rust: maple_tree: add MapleTreeAlloc Alice Ryhl
2025-07-26 15:54   ` Gary Guo
2025-07-26 16:13     ` Alice Ryhl
2025-08-07 16:29   ` Liam R. Howlett
2025-08-08  8:35     ` Alice Ryhl
2025-08-06 19:24 ` [PATCH 0/3] Add Rust abstraction for Maple Trees Liam R. Howlett

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=aIefe_MEPd_yicde@tardis-2.local \
    --to=boqun.feng@gmail.com \
    --cc=Liam.Howlett@oracle.com \
    --cc=a.hindborg@kernel.org \
    --cc=akpm@linux-foundation.org \
    --cc=aliceryhl@google.com \
    --cc=andrewjballance@gmail.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=dakr@kernel.org \
    --cc=gary@garyguo.net \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=lorenzo.stoakes@oracle.com \
    --cc=lossin@kernel.org \
    --cc=maple-tree@lists.infradead.org \
    --cc=ojeda@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=tmgross@umich.edu \
    /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.