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(+)
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. Signed-off-by: Matthew Maurer <mmaurer@google.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@google.com>
On 20/08/2025 00:53, Matthew Maurer 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. > > Signed-off-by: Matthew Maurer <mmaurer@google.com> On ARM64 on top of v6.17-rc1 I applied this series to use read_only_file() to export some u64 proprietary values. If you like feel free to add Tested-by: Dirk Behme <dirk.behme@de.bosch.com> Thanks! Dirk
On Tue, Aug 19, 2025 at 3:53 PM Matthew Maurer <mmaurer@google.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@google.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@google.com> >
© 2016 - 2025 Red Hat, Inc.