From: "Alexandre Courbot" <acourbot@nvidia.com>
To: "Joel Fernandes" <joelagnelf@nvidia.com>
Cc: linux-kernel@vger.kernel.org, "Miguel Ojeda" <ojeda@kernel.org>,
"Boqun Feng" <boqun@kernel.org>, "Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
"Dave Airlie" <airlied@redhat.com>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
"Koen Koning" <koen.koning@linux.intel.com>,
dri-devel@lists.freedesktop.org, nouveau@lists.freedesktop.org,
rust-for-linux@vger.kernel.org,
"Nikola Djukic" <ndjukic@nvidia.com>
Subject: Re: [PATCH v10 6/8] rust: gpu: Add GPU buddy allocator bindings
Date: Thu, 19 Feb 2026 14:13:37 +0900 [thread overview]
Message-ID: <DGIOJQC5HEAT.262OM2KS7C2HE@nvidia.com> (raw)
In-Reply-To: <20260218205507.689429-7-joelagnelf@nvidia.com>
Just a few things caught when building.
On Thu Feb 19, 2026 at 5:55 AM JST, Joel Fernandes wrote:
<snip>
> +use crate::{
> + bindings,
> + clist_create,
> + error::to_result,
> + ffi::clist::CListHead,
> + new_mutex,
> + prelude::*,
> + sync::{
> + lock::mutex::MutexGuard,
> + Arc,
> + Mutex, //
> + },
> + types::Opaque,
Need a `//` or `rustfmt` will reformat.
<snip>
> +#[pinned_drop]
> +impl PinnedDrop for GpuBuddyInner {
> + fn drop(self: Pin<&mut Self>) {
> + let guard = self.lock();
> +
> + // SAFETY: guard provides exclusive access to the allocator.
> + unsafe {
> + bindings::gpu_buddy_fini(guard.as_raw());
> + }
> + }
> +}
> +
> +// SAFETY: [`GpuBuddyInner`] can be sent between threads.
No need to link on non-doccomments.
> +unsafe impl Send for GpuBuddyInner {}
> +
> +// SAFETY: [`GpuBuddyInner`] is `Sync` because the internal [`GpuBuddyGuard`]
> +// serializes all access to the C allocator, preventing data races.
Here as well.
<snip>
> +/// Allocated blocks from the buddy allocator with automatic cleanup.
> +///
> +/// This structure owns a list of allocated blocks and ensures they are
> +/// automatically freed when dropped. Use `iter()` to iterate over all
> +/// allocated [`Block`] structures.
> +///
> +/// # Invariants
> +///
> +/// - `list` is an initialized, valid list head containing allocated blocks.
> +/// - `buddy` references a valid [`GpuBuddyInner`].
rustdoc complains that this links to a private item in a public doc - we
should not mention `GpuBuddyInner` here.
> +#[pin_data(PinnedDrop)]
> +pub struct AllocatedBlocks {
> + #[pin]
> + list: CListHead,
> + buddy: Arc<GpuBuddyInner>,
> + flags: BuddyFlags,
> +}
> +
> +impl AllocatedBlocks {
> + /// Check if the block list is empty.
> + pub fn is_empty(&self) -> bool {
> + // An empty list head points to itself.
> + !self.list.is_linked()
> + }
> +
> + /// Iterate over allocated blocks.
> + ///
> + /// Returns an iterator yielding [`AllocatedBlock`] values. Each [`AllocatedBlock`]
> + /// borrows `self` and is only valid for the duration of that borrow.
> + pub fn iter(&self) -> impl Iterator<Item = AllocatedBlock<'_>> + '_ {
> + // SAFETY: list contains gpu_buddy_block items linked via __bindgen_anon_1.link.
> + let clist = unsafe {
> + clist_create!(
> + self.list.as_raw(),
> + Block,
> + bindings::gpu_buddy_block,
> + __bindgen_anon_1.link
> + )
> + };
> +
> + clist
> + .iter()
> + .map(|block| AllocatedBlock { block, alloc: self })
> + }
> +}
> +
> +#[pinned_drop]
> +impl PinnedDrop for AllocatedBlocks {
> + fn drop(self: Pin<&mut Self>) {
> + let guard = self.buddy.lock();
> +
> + // SAFETY:
> + // - list is valid per the type's invariants.
> + // - guard provides exclusive access to the allocator.
> + // CAST: BuddyFlags were validated to fit in u32 at construction.
> + unsafe {
> + bindings::gpu_buddy_free_list(
> + guard.as_raw(),
> + self.list.as_raw(),
> + self.flags.as_raw() as u32,
> + );
> + }
> + }
> +}
> +
> +/// A GPU buddy block.
> +///
> +/// Transparent wrapper over C `gpu_buddy_block` structure. This type is returned
> +/// as references from [`CListIter`] during iteration over [`AllocatedBlocks`].
Link should be [`CListIter`](kernel::ffi::clist::CListIter) to resolve.
But maybe we don't need to share that detail in the public
documentation?
next prev parent reply other threads:[~2026-02-19 5:13 UTC|newest]
Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-18 20:54 [PATCH v10 0/8] Preparatory patches for nova-core memory management Joel Fernandes
2026-02-18 20:54 ` [PATCH v10 1/8] gpu: Move DRM buddy allocator one level up (part one) Joel Fernandes
2026-02-18 20:55 ` [PATCH v10 2/8] gpu: Move DRM buddy allocator one level up (part two) Joel Fernandes
2026-02-19 3:18 ` Alexandre Courbot
2026-02-19 3:18 ` Alexandre Courbot
2026-02-19 15:31 ` Joel Fernandes
2026-02-18 20:55 ` [PATCH v10 3/8] gpu: Fix uninitialized buddy for built-in drivers Joel Fernandes
2026-02-19 10:09 ` Danilo Krummrich
2026-02-19 10:09 ` Danilo Krummrich
2026-02-19 15:31 ` Joel Fernandes
2026-02-19 16:24 ` Joel Fernandes
2026-02-18 20:55 ` [PATCH v10 4/8] rust: ffi: Convert pub use to pub mod and create ffi module Joel Fernandes
2026-02-19 3:18 ` Alexandre Courbot
2026-02-18 20:55 ` [PATCH v10 5/8] rust: clist: Add support to interface with C linked lists Joel Fernandes
2026-02-19 4:26 ` Alexandre Courbot
2026-02-19 15:27 ` Joel Fernandes
2026-02-19 15:27 ` Joel Fernandes
2026-02-19 9:58 ` Danilo Krummrich
2026-02-19 15:28 ` Joel Fernandes
2026-02-19 15:28 ` Joel Fernandes
2026-02-19 11:21 ` Danilo Krummrich
2026-02-19 14:37 ` Gary Guo
2026-02-19 15:27 ` Joel Fernandes
2026-02-19 15:27 ` Joel Fernandes
2026-02-19 15:44 ` Joel Fernandes
2026-02-19 16:24 ` Danilo Krummrich
2026-02-19 18:07 ` Joel Fernandes
2026-02-19 18:38 ` Miguel Ojeda
2026-02-19 19:28 ` Joel Fernandes
2026-02-19 22:55 ` Miguel Ojeda
2026-02-20 4:00 ` Joel Fernandes
2026-02-20 1:56 ` Alexandre Courbot
2026-02-20 1:09 ` Gary Guo
2026-02-20 1:19 ` Miguel Ojeda
2026-02-20 16:48 ` Danilo Krummrich
2026-02-23 0:54 ` Joel Fernandes
2026-02-24 16:15 ` Miguel Ojeda
2026-02-24 16:15 ` Miguel Ojeda
2026-02-25 19:48 ` Boqun Feng
2026-02-25 20:20 ` Joel Fernandes
2026-02-26 0:32 ` Joel Fernandes
2026-02-20 8:16 ` Eliot Courtney
2026-02-20 8:16 ` Eliot Courtney
2026-02-23 1:13 ` Joel Fernandes
2026-02-24 2:08 ` Eliot Courtney
2026-02-24 2:08 ` Eliot Courtney
2026-02-24 7:28 ` Alice Ryhl
2026-02-24 16:00 ` Joel Fernandes
2026-02-24 16:11 ` Miguel Ojeda
2026-02-21 8:59 ` Alice Ryhl
2026-02-23 0:41 ` Joel Fernandes
2026-02-23 9:38 ` Alice Ryhl
2026-02-24 0:32 ` Joel Fernandes
2026-02-18 20:55 ` [PATCH v10 6/8] rust: gpu: Add GPU buddy allocator bindings Joel Fernandes
2026-02-19 5:13 ` Alexandre Courbot [this message]
2026-02-19 8:54 ` Miguel Ojeda
2026-02-19 15:31 ` Joel Fernandes
2026-03-01 13:23 ` Gary Guo
2026-03-01 13:23 ` Gary Guo
2026-03-01 17:53 ` Miguel Ojeda
2026-02-19 15:31 ` Joel Fernandes
2026-02-20 1:56 ` Alexandre Courbot
2026-02-20 1:56 ` Alexandre Courbot
2026-02-23 1:02 ` Joel Fernandes
2026-02-19 13:18 ` Danilo Krummrich
2026-02-19 15:31 ` Joel Fernandes
2026-02-20 8:22 ` Eliot Courtney
2026-02-20 8:22 ` Eliot Courtney
2026-02-20 14:54 ` Joel Fernandes
2026-02-20 15:50 ` Joel Fernandes
2026-02-20 15:53 ` Danilo Krummrich
2026-02-20 21:20 ` Joel Fernandes
2026-02-20 23:43 ` Danilo Krummrich
2026-02-23 0:34 ` Joel Fernandes
2026-02-18 20:55 ` [PATCH v10 7/8] nova-core: mm: Select GPU_BUDDY for VRAM allocation Joel Fernandes
2026-02-19 0:44 ` Alexandre Courbot
2026-02-19 0:44 ` Alexandre Courbot
2026-02-19 1:14 ` John Hubbard
2026-02-19 1:14 ` John Hubbard
2026-02-19 15:31 ` Joel Fernandes
2026-02-19 2:06 ` Joel Fernandes
2026-02-19 2:06 ` Joel Fernandes
2026-02-19 15:31 ` Joel Fernandes
2026-02-19 15:31 ` Joel Fernandes
2026-02-18 20:55 ` [PATCH v10 8/8] nova-core: Kconfig: Sort select statements alphabetically Joel Fernandes
2026-02-18 20:59 ` [PATCH v10 0/8] Preparatory patches for nova-core memory management Joel Fernandes
2026-02-18 20:59 ` Joel Fernandes
2026-02-18 22:24 ` Danilo Krummrich
2026-02-18 23:46 ` Joel Fernandes
2026-02-18 23:59 ` Joel Fernandes
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=DGIOJQC5HEAT.262OM2KS7C2HE@nvidia.com \
--to=acourbot@nvidia.com \
--cc=a.hindborg@kernel.org \
--cc=airlied@redhat.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=gary@garyguo.net \
--cc=joelagnelf@nvidia.com \
--cc=koen.koning@linux.intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lossin@kernel.org \
--cc=ndjukic@nvidia.com \
--cc=nouveau@lists.freedesktop.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.