Thread (18 messages) 18 messages, 3 authors, 15d ago

Re: [PATCH v3 1/6] rust: module: add `THIS_MODULE` const to `ModuleMetadata` trait

From: "Gary Guo" <gary@garyguo.net>
Date: 2026-06-22 13:06:45
Also in: dri-devel, driver-core, linux-block, linux-kselftest, lkml, nova-gpu, rust-for-linux

On Mon Jun 22, 2026 at 1:52 PM BST, Alvin Sun wrote:
On 6/22/26 18:50, Gary Guo wrote:
quoted
On Mon Jun 22, 2026 at 3:44 AM BST, Alvin Sun wrote:
quoted
Since `const_refs_to_static` has been stable as of the MSRV bump, a
`ThisModule` pointer can now be used in const contexts.

Add a `THIS_MODULE` const to the `ModuleMetadata` trait so that modules
can provide their `ThisModule` pointer in const contexts such as static
`file_operations`.

Move the `THIS_MODULE` static from the `module!` macro into the
`ModuleMetadata` impl, add a `this_module()` helper, and update `__init`
to use it.

Signed-off-by: Alvin Sun <redacted>
---
  rust/kernel/lib.rs    |  8 ++++++++
  rust/macros/module.rs | 34 +++++++++++++++++-----------------
  2 files changed, 25 insertions(+), 17 deletions(-)
diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs
index b72b2fbe046d6..50f5a7b5f028e 100644
--- a/rust/kernel/lib.rs
+++ b/rust/kernel/lib.rs
@@ -184,6 +184,14 @@ fn init(module: &'static ThisModule) -> impl pin_init::PinInit<Self, error::Erro
  pub trait ModuleMetadata {
      /// The name of the module as specified in the `module!` macro.
      const NAME: &'static crate::str::CStr;
+
+    /// The module's `THIS_MODULE` pointer.
+    const THIS_MODULE: ThisModule;
+}
+
+/// Returns a reference to the `THIS_MODULE` of the given module type.
+pub const fn this_module<M: ModuleMetadata>() -> &'static ThisModule {
+    &M::THIS_MODULE
  }
Also, FWIW I think this should not put this in the crate root. Perhaps create a
modules.rs?
Makes sense. I'll create a new `module.rs` and move the module-related items
(`ModuleMetadata`, `ThisModule`, `this_module()`) there, then re-export from
`lib.rs`.
Please do not re-export `this_module`. For the other two, I think it's fine to
re-export to avoid tree-wide changes, but please do update users on code that
would route via the Rust tree.

Best,
Gary
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help