[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250318-drm-gem-shmem-v1-6-64b96511a84f@collabora.com>
Date: Tue, 18 Mar 2025 16:22:40 -0300
From: Daniel Almeida <daniel.almeida@...labora.com>
To: Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
Maxime Ripard <mripard@...nel.org>, Thomas Zimmermann <tzimmermann@...e.de>,
David Airlie <airlied@...il.com>, Simona Vetter <simona@...ll.ch>,
Miguel Ojeda <ojeda@...nel.org>, Alex Gaynor <alex.gaynor@...il.com>,
Boqun Feng <boqun.feng@...il.com>, Gary Guo <gary@...yguo.net>,
Björn Roy Baron <bjorn3_gh@...tonmail.com>,
Benno Lossin <benno.lossin@...ton.me>,
Andreas Hindborg <a.hindborg@...nel.org>, Alice Ryhl <aliceryhl@...gle.com>,
Trevor Gross <tmgross@...ch.edu>, Sumit Semwal <sumit.semwal@...aro.org>,
Christian König <christian.koenig@....com>
Cc: dri-devel@...ts.freedesktop.org, linux-kernel@...r.kernel.org,
rust-for-linux@...r.kernel.org, linux-media@...r.kernel.org,
linaro-mm-sig@...ts.linaro.org, Danilo Krummrich <dakr@...nel.org>,
Asahi Lina <lina@...hilina.net>,
Daniel Almeida <daniel.almeida@...labora.com>
Subject: [PATCH 6/7] rust: drm: gem: Add set_exportable() method
From: Asahi Lina <lina@...hilina.net>
This allows drivers to control whether a given GEM object is allowed to
be exported via PRIME to other drivers.
Signed-off-by: Asahi Lina <lina@...hilina.net>
Signed-off-by: Daniel Almeida <daniel.almeida@...labora.com>
---
rust/kernel/drm/gem/mod.rs | 13 +++++++++++++
rust/kernel/drm/gem/shmem.rs | 4 ++++
2 files changed, 17 insertions(+)
diff --git a/rust/kernel/drm/gem/mod.rs b/rust/kernel/drm/gem/mod.rs
index 083faac8602885aee5ef213bb3302b79dfac4a95..3a7e9f80b414bf39301e342938ba33877bfac2cb 100644
--- a/rust/kernel/drm/gem/mod.rs
+++ b/rust/kernel/drm/gem/mod.rs
@@ -45,6 +45,10 @@ pub trait IntoGEMObject: Sized + crate::private::Sealed {
/// this owning object is valid.
fn gem_obj(&self) -> &bindings::drm_gem_object;
+ /// Returns a reference to the raw `drm_gem_object` structure, which must be valid as long as
+ /// this owning object is valid.
+ fn mut_gem_obj(&mut self) -> &mut bindings::drm_gem_object;
+
/// Converts a pointer to a `drm_gem_object` into a pointer to this type.
fn from_gem_obj(obj: *mut bindings::drm_gem_object) -> *mut Self;
}
@@ -119,6 +123,10 @@ fn gem_obj(&self) -> &bindings::drm_gem_object {
&self.obj
}
+ fn mut_gem_obj(&mut self) -> &mut bindings::drm_gem_object {
+ &mut self.obj
+ }
+
fn from_gem_obj(obj: *mut bindings::drm_gem_object) -> *mut Object<T> {
// SAFETY: All of our objects are Object<T>.
unsafe { crate::container_of!(obj, Object<T>, obj) as *mut Object<T> }
@@ -132,6 +140,11 @@ fn size(&self) -> usize {
self.gem_obj().size
}
+ /// Sets the exportable flag, which controls whether the object can be exported via PRIME.
+ fn set_exportable(&mut self, exportable: bool) {
+ self.mut_gem_obj().exportable = exportable;
+ }
+
/// Creates a new reference to the object.
fn reference(&self) -> ObjectRef<Self> {
// SAFETY: Having a reference to an Object implies holding a GEM reference
diff --git a/rust/kernel/drm/gem/shmem.rs b/rust/kernel/drm/gem/shmem.rs
index cd080d820727fb39cb91cb0617df39310b5b68c8..fdf7dd7f2408bd2857f5b72027ef48e29c9dd9e3 100644
--- a/rust/kernel/drm/gem/shmem.rs
+++ b/rust/kernel/drm/gem/shmem.rs
@@ -261,6 +261,10 @@ fn gem_obj(&self) -> &bindings::drm_gem_object {
&self.obj.base
}
+ fn mut_gem_obj(&mut self) -> &mut bindings::drm_gem_object {
+ &mut self.obj.base
+ }
+
fn from_gem_obj(obj: *mut bindings::drm_gem_object) -> *mut Object<T> {
// SAFETY: The invariant guarantees this is correct.
unsafe {
--
2.48.1
Powered by blists - more mailing lists