From 69795aedaa28fe4d852fe575b6fb2ec925954df1 Mon Sep 17 00:00:00 2001
From: Lyude Paul <lyude@redhat.com>
Date: Mon, 2 Dec 2024 15:51:04 -0500
Subject: [PATCH] squash! WIP: rust: drm/kms: Add OpaqueEncoder

* Add safety comments for AsRawEncoder
---
 rust/kernel/drm/kms/encoder.rs | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/rust/kernel/drm/kms/encoder.rs b/rust/kernel/drm/kms/encoder.rs
index 0c4577fde7f5d..a6d8681959539 100644
--- a/rust/kernel/drm/kms/encoder.rs
+++ b/rust/kernel/drm/kms/encoder.rs
@@ -294,7 +294,11 @@ unsafe impl<T: KmsDriver> ModeObject for OpaqueEncoder<T> {
 // SAFETY: Encoders do not have a refcount
 unsafe impl<T: KmsDriver> StaticModeObject for OpaqueEncoder<T> {}
 
-impl<T: KmsDriver> AsRawEncoder for OpaqueEncoder<T> {
+// SAFETY:
+// * Via our type variants our data layout is identical to  with `drm_encoder`
+// * Since we don't expose `Encoder` to users before it has been initialized, this and our data
+//   layout ensure that `as_raw()` always returns a valid pointer to a `drm_encoder`.
+unsafe impl<T: KmsDriver> AsRawEncoder for OpaqueEncoder<T> {
     fn as_raw(&self) -> *mut bindings::drm_encoder {
         self.encoder.get()
     }
-- 
GitLab