From: Asahi Lina <lina@xxxxxxxxxxxxx> 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@xxxxxxxxxxxxx> Signed-off-by: Daniel Almeida <daniel.almeida@xxxxxxxxxxxxx> --- 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