[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <CAGSQo03RGzmP2diL-vvLDZHduu=d4oFy8X46Fc8vg0SzE-XfDw@mail.gmail.com>
Date: Tue, 19 Aug 2025 16:14:40 -0700
From: Matthew Maurer <mmaurer@...gle.com>
To: 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>,
Andreas Hindborg <a.hindborg@...nel.org>, Alice Ryhl <aliceryhl@...gle.com>,
Trevor Gross <tmgross@...ch.edu>, Danilo Krummrich <dakr@...nel.org>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>, "Rafael J. Wysocki" <rafael@...nel.org>,
Sami Tolvanen <samitolvanen@...gle.com>, Timur Tabi <ttabi@...dia.com>,
Benno Lossin <lossin@...nel.org>, Dirk Beheme <dirk.behme@...bosch.com>
Cc: linux-kernel@...r.kernel.org, rust-for-linux@...r.kernel.org
Subject: Re: [PATCH v10 0/7] rust: DebugFS Bindings
On Tue, Aug 19, 2025 at 3:53 PM Matthew Maurer <mmaurer@...gle.com> wrote:
>
> This series provides safe DebugFS bindings for Rust, with sample
> modules using them.
>
> Shortly after this is sent, you will see a real driver WIP using this
> implenting the qcom socinfo driver.
Now mailed. [1]
[1] https://lore.kernel.org/all/20250819-qcom-socinfo-v1-0-e8d32cc81270@google.com/
>
> Signed-off-by: Matthew Maurer <mmaurer@...gle.com>
> ---
> Changes in v10:
> - Introduced Scoped to show how either a File or Dir can be bound to
> data
> - Remove use of `use<>` for MSRV compatibility
> - Added Write support
> - Added more complex sample driver using scoped interface
> - Updated original sample driver to use writes to drive mutation
> - Added `FileOps<T>` (only for DebugFS, not a kernel-wide abstraction)
> to decrease needed `unsafe` for keeping vtables paired to types.
> - Centralized `dentry` lifecycle management to `entry.rs`.
> - Link to v9: https://lore.kernel.org/r/20250709-debugfs-rust-v9-0-92b9eab5a951@google.com
>
> Changes in v9:
> - Switched to `PinInit` backing instead of `ForeignOwnable`
> - Changed sample to be a platform driver
> - Exported a static property
> - Demonstrated runtime mutation in platform driver (`inc_counter`)
> - Demonstrated how driver code would interact with data structures
> exported through DebugFS (`Wrapper`)
> - Link to v8: https://lore.kernel.org/r/20250627-debugfs-rust-v8-0-c6526e413d40@google.com
>
> Changes in v8:
> - Switched from casts to `core::from_{ref, mut}` in type change
> - Link to v7: https://lore.kernel.org/r/20250624-debugfs-rust-v7-0-9c8835a7a20f@google.com
>
> Changes in v7:
> - Rewrote `entry::Entry` -> `Entry`
> - Use `c_int` and `c_void` from kernel prelude rather than core
> - Removed unnecessary `display_open` cast
> - Switched from `Deref` + an explicit box to `ForeignOwnable` for
> attaching owned data.
> - Made `&'static` and `&'static mut` implement `ForeignOwnable`
> - Swapped "driver" to "module" in sample code
> - Link to v6: https://lore.kernel.org/r/20250618-debugfs-rust-v6-0-72cae211b133@google.com
>
> Changes in v6:
> - Replaced explicit lifetimes with children keeping their parents alive.
> - Added support for attaching owned data.
> - Removed recomendation to only keep root handles and handles you want
> to delete around.
> - Refactored some code into separate files to improve clarity.
> - Link to v5: https://lore.kernel.org/r/20250505-debugfs-rust-v5-0-3e93ce7bb76e@google.com
>
> Changes in v5:
> - Made Dir + File wrappers around Entry
> - All functions return owning handles. To discard without drop, use
> `forget`. To keep a handle without drop, use `ManuallyDrop`.
> - Fixed bugs around `not(CONFIG_DEBUG_FS)`
> - Removed unnecessary `addr_of!`
> - Link to v4: https://lore.kernel.org/r/20250502-debugfs-rust-v4-0-788a9c6c2e77@google.com
>
> Changes in v4:
> - Remove SubDir, replace with type-level constant.
> - Add lifetime to Dir to prevent subdirectories and files from outliving
> their parents and triggering an Oops when accessed.
> - Split unsafe blocks with two calls into two blocks
> - Access `private` field through direct pointer dereference, avoiding
> creation of a reference to it.
> - Notably not changed - owning/non-owning handle defaults. The best read
> I had from the thread was to continue with this mode, but I'm willing
> to change if need be.
> - Comment changes
> - More comment markdown
> - Remove scopes from examples
> - Put `as_ptr` properties into a `# Guarantees` section.
> - Link to v3: https://lore.kernel.org/r/20250501-debugfs-rust-v3-0-850869fab672@google.com
>
> Changes in v3:
> - Split `Dir` into `Dir`/`SubDir`/`File` to improve API.
> - Add "." to end of all comments.
> - Convert INVARIANT to # Invariants on types.
> - Add backticks everywhere I found variables/types in my comments.
> - Promoted invariant comment to doc comment.
> - Extended sample commenting to make it clearer what is happening.
> - Link to v2: https://lore.kernel.org/r/20250430-debugfs-rust-v2-0-2e8d3985812b@google.com
>
> Changes in v2:
> - Drop support for builder / pinned bindings in initial series
> - Remove `ARef` usage to abstract the dentry nature of handles
> - Remove error handling to discourage users from caring whether DebugFS
> is enabled.
> - Support CONFIG_DEBUG_FS=n while leaving the API available
> - Fixed mistaken decimal/octal mixup
> - Doc/comment cleanup
> - Link to v1: https://lore.kernel.org/r/20250429-debugfs-rust-v1-0-6b6e7cb7929f@google.com
>
> ---
> Matthew Maurer (7):
> rust: debugfs: Add initial support for directories
> rust: debugfs: Add support for read-only files
> rust: debugfs: Add support for writable files
> rust: debugfs: Add support for callback-based files
> samples: rust: Add debugfs sample driver
> rust: debugfs: Add support for scoped directories
> samples: rust: Add scoped debugfs sample driver
>
> MAINTAINERS | 4 +
> rust/bindings/bindings_helper.h | 1 +
> rust/kernel/debugfs.rs | 613 +++++++++++++++++++++++++++++++
> rust/kernel/debugfs/callback_adapters.rs | 122 ++++++
> rust/kernel/debugfs/entry.rs | 164 +++++++++
> rust/kernel/debugfs/file_ops.rs | 246 +++++++++++++
> rust/kernel/debugfs/traits.rs | 97 +++++
> rust/kernel/lib.rs | 1 +
> samples/rust/Kconfig | 22 ++
> samples/rust/Makefile | 2 +
> samples/rust/rust_debugfs.rs | 151 ++++++++
> samples/rust/rust_scoped_debugfs.rs | 134 +++++++
> 12 files changed, 1557 insertions(+)
> ---
> base-commit: f3c5631f70e434e318c44001e2417d4770f06cd0
> change-id: 20250428-debugfs-rust-3cd5c97eb7d1
>
> Best regards,
> --
> Matthew Maurer <mmaurer@...gle.com>
>
Powered by blists - more mailing lists