From: Alvin Sun <alvin.sun@linux.dev>
To: "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>,
"David Airlie" <airlied@gmail.com>,
"Simona Vetter" <simona@ffwll.ch>,
"Sumit Semwal" <sumit.semwal@linaro.org>,
"Christian König" <christian.koenig@amd.com>,
"Daniel Almeida" <daniel.almeida@collabora.com>
Cc: rust-for-linux@vger.kernel.org, dri-devel@lists.freedesktop.org,
Alvin Sun <alvin.sun@linux.dev>
Subject: [PATCH 13/13] drm/tyr: add gems field and gems debugfs interface
Date: Thu, 26 Mar 2026 14:53:06 +0800 [thread overview]
Message-ID: <20260326-b4-tyr-debugfs-v1-13-074badd18716@linux.dev> (raw)
In-Reply-To: <20260326-b4-tyr-debugfs-v1-0-074badd18716@linux.dev>
Add gems field to TyrDebugFSData; populate gems in Firmware::new and
register gems read-only file under debugfs per-device directory.
Signed-off-by: Alvin Sun <alvin.sun@linux.dev>
---
drivers/gpu/drm/tyr/debugfs.rs | 93 +++++++++++++++++++++++++++++++++++++++++-
drivers/gpu/drm/tyr/driver.rs | 10 +++--
drivers/gpu/drm/tyr/fw.rs | 2 +
3 files changed, 101 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/tyr/debugfs.rs b/drivers/gpu/drm/tyr/debugfs.rs
index edbdb83a5b132..d0e9e268aeac2 100644
--- a/drivers/gpu/drm/tyr/debugfs.rs
+++ b/drivers/gpu/drm/tyr/debugfs.rs
@@ -8,14 +8,19 @@
debugfs,
device::Core,
drm,
- drm::gem::IntoGEMObject,
+ drm::gem::{
+ BaseObject,
+ IntoGEMObject, //
+ },
fmt,
fmt::Write,
+ impl_flags,
platform,
prelude::*,
revocable::LazyRevocable,
str::CString,
sync::{
+ aref::ARef,
hazptr::HazptrCtx,
Arc,
ArcBorrow,
@@ -24,15 +29,100 @@
};
use crate::driver::TyrDrmDriver;
+use crate::gem::Bo;
use crate::vm::Vm;
pub(crate) static DEBUGFS_ROOT: LazyRevocable<debugfs::Dir> = LazyRevocable::new();
+impl_flags!(
+ #[derive(Debug, Clone, Default, Copy, PartialEq, Eq)]
+ struct BoStateFlags(u32);
+
+ #[derive(Debug, Clone, Copy, PartialEq, Eq)]
+ enum BoStateFlag {
+ Imported = 1 << 0,
+ Exported = 1 << 1,
+ }
+);
+
+/// Writes per-BO debug information for the "gems" debugfs file.
+fn show_bo(bo: &Bo, f: &mut impl Write) -> core::fmt::Result {
+ let name: i32 = bo.name();
+ let refcount: u32 = bo.refcount();
+ let size: usize = bo.size();
+ let resident_size: usize = bo.resident_size();
+ let mmap_offset = bo.mmap_offset();
+ let mut gem_state_flags = BoStateFlags::default();
+
+ if bo.is_imported() {
+ gem_state_flags |= BoStateFlag::Imported;
+ }
+ if bo.is_exported() {
+ gem_state_flags |= BoStateFlag::Exported;
+ }
+
+ writeln!(
+ f,
+ "{:<16}{:<16}{:<16}{:<16}0x{:<16x}0x{:<8x}",
+ name,
+ refcount,
+ size,
+ resident_size,
+ mmap_offset,
+ u32::from(gem_state_flags),
+ )
+}
+
+fn show_gems(data: &Arc<TyrDebugFSData>, f: &mut fmt::Formatter<'_>) -> core::fmt::Result {
+ writeln!(
+ f,
+ "GEM state flags: {:?} (0x{:x}), {:?} (0x{:x})",
+ BoStateFlag::Imported,
+ BoStateFlag::Imported as u32,
+ BoStateFlag::Exported,
+ BoStateFlag::Exported as u32,
+ )?;
+ writeln!(
+ f,
+ "global-name refcount size resident-size file-offset state",
+ )?;
+ writeln!(
+ f,
+ "--------------------------------------------------------------------------------------------",
+ )?;
+
+ let mut total_size: usize = 0;
+ let mut total_resident: usize = 0;
+ let mut total_reclaimable: usize = 0;
+ let gems = data.gems.lock();
+ for bo in gems.iter() {
+ total_size += bo.size();
+ total_resident += bo.resident_size();
+ if bo.madv() > 0 {
+ total_reclaimable += bo.resident_size();
+ }
+ show_bo(bo, f)?;
+ }
+
+ writeln!(
+ f,
+ "============================================================================================",
+ )?;
+ writeln!(
+ f,
+ "Total size: {}, Total resident: {}, Total reclaimable: {}",
+ total_size, total_resident, total_reclaimable,
+ )?;
+ Ok(())
+}
+
/// Per-device debugfs data.
#[pin_data]
pub(crate) struct TyrDebugFSData {
#[pin]
pub(crate) vms: Mutex<KVec<Arc<Vm>>>,
+ #[pin]
+ pub(crate) gems: Mutex<KVec<ARef<Bo>>>,
}
/// Writes VM debug information for the "gpuvas" debugfs file.
@@ -93,6 +183,7 @@ pub(crate) fn debugfs_init(
let debugfs_data: Arc<TyrDebugFSData> = debugfs_data.into();
let scope_init = root_dir.scope(debugfs_data, &dir_name, |data, dir| {
dir.read_callback_file(c"gpuvas", data, &show_gpuvas);
+ dir.read_callback_file(c"gems", data, &show_gems);
});
kernel::devres::register(pdev.as_ref(), scope_init, GFP_KERNEL)
diff --git a/drivers/gpu/drm/tyr/driver.rs b/drivers/gpu/drm/tyr/driver.rs
index e1d5e908de876..a6d8760070d44 100644
--- a/drivers/gpu/drm/tyr/driver.rs
+++ b/drivers/gpu/drm/tyr/driver.rs
@@ -154,9 +154,13 @@ fn probe(
let platform: ARef<platform::Device> = pdev.into();
let mmu = Mmu::new(pdev, iomem.as_arc_borrow(), &gpu_info)?;
- let debugfs_data = Arc::pin_init(try_pin_init!(TyrDebugFSData {
- vms <- new_mutex!(KVec::new()),
- }), GFP_KERNEL)?;
+ let debugfs_data = Arc::pin_init(
+ try_pin_init!(TyrDebugFSData {
+ vms <- new_mutex!(KVec::new()),
+ gems <- new_mutex!(KVec::new()),
+ }),
+ GFP_KERNEL,
+ )?;
let debugfs_data_clone = debugfs_data.clone();
let firmware = Firmware::new(
diff --git a/drivers/gpu/drm/tyr/fw.rs b/drivers/gpu/drm/tyr/fw.rs
index c46320bb54516..4d5efa79a7348 100644
--- a/drivers/gpu/drm/tyr/fw.rs
+++ b/drivers/gpu/drm/tyr/fw.rs
@@ -222,6 +222,8 @@ pub(crate) fn new(
parsed.vm_map_flags,
)?;
+ debugfs_data.gems.lock().push(mem.bo.clone(), GFP_KERNEL)?;
+
let section_start = parsed.data_range.start as usize;
let section_end = parsed.data_range.end as usize;
let mut data = KVec::new();
--
2.43.0
next prev parent reply other threads:[~2026-03-26 6:55 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-26 6:52 [PATCH 00/13] drm/tyr: add debugfs support Alvin Sun
2026-03-26 6:52 ` [PATCH 01/13] rust: sync: support [pin_]init for `SetOnce` Alvin Sun
2026-03-26 6:52 ` [PATCH 02/13] rust: revocable: add lazily instantiated revocable variant Alvin Sun
2026-03-26 6:52 ` [PATCH 03/13] rust: sync: set_once: Rename InitError variants to fix clippy warning Alvin Sun
2026-03-26 14:40 ` Gary Guo
2026-03-27 6:07 ` Alvin Sun
2026-03-26 16:35 ` Miguel Ojeda
2026-03-27 6:13 ` Alvin Sun
2026-03-26 6:52 ` [PATCH 04/13] rust: sync: add hazard pointer abstraction Alvin Sun
2026-03-26 6:52 ` [PATCH 05/13] rust: revocable: add HazPtrRevocable Alvin Sun
2026-03-26 6:52 ` [PATCH 06/13] rust: revocable: make LazyRevocable use HazPtrRevocable Alvin Sun
2026-03-26 6:53 ` [PATCH 07/13] rust: drm: add Device::primary_index() Alvin Sun
2026-03-26 6:53 ` [PATCH 08/13] rust: drm/gem: add GEM object query helpers for debugfs Alvin Sun
2026-03-26 6:53 ` [PATCH 09/13] rust: drm/gem/shmem: add resident_size() and madv() " Alvin Sun
2026-03-26 6:53 ` [PATCH 10/13] drm/tyr: expose Vm gpuvm_core, gpuvm and va_range as pub(crate) Alvin Sun
2026-03-26 6:53 ` [PATCH 11/13] drm/tyr: add debugfs infrastructure Alvin Sun
2026-03-26 6:53 ` [PATCH 12/13] drm/tyr: add vms and gpuvas debugfs interface Alvin Sun
2026-03-26 6:53 ` Alvin Sun [this message]
2026-03-26 14:32 ` [PATCH 00/13] drm/tyr: add debugfs support Boqun Feng
2026-03-27 6:18 ` Alvin Sun
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=20260326-b4-tyr-debugfs-v1-13-074badd18716@linux.dev \
--to=alvin.sun@linux.dev \
--cc=a.hindborg@kernel.org \
--cc=airlied@gmail.com \
--cc=aliceryhl@google.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=christian.koenig@amd.com \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=gary@garyguo.net \
--cc=lossin@kernel.org \
--cc=ojeda@kernel.org \
--cc=rust-for-linux@vger.kernel.org \
--cc=simona@ffwll.ch \
--cc=sumit.semwal@linaro.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox