Skip to content

rust: DebugFS Bindings

Matthew Maurer lkml rust-for-linux 11 versions – In review

Get series with b4
b4 am [email protected] change-id 20250428-debugfs-rust-3cd5c97eb7d1

Versions newest first

  1. v11 Latest7 patches 30 repliesIn review
  2. v107 patches 9 repliesSuperseded
  3. v95 patches 17 repliesSuperseded
Earlier versions · 8
VersionPostedPatchesRepliesStatus
v86 patches42 repliesSuperseded
v76 patches3 repliesSuperseded
v65 patches9 repliesSuperseded
v54 patches54 repliesSuperseded
v44 patches6 repliesSuperseded
v34 patches18 repliesSuperseded
v24 patches10 repliesSuperseded
v18 patches22 repliesSuperseded

Changes in v11 from the cover letter

- Rephrased comments/docs based on list feedback
- Switched longer polymorphic declarations to use where clauses
- Switched TI: PinInit to impl PinInit (this was previously required
for use<>
- Keep Scope private until the scoped interface is added
- Render -> Writer, UpdateFromSlice -> Reader
- Documented that Debug format is subject to change
- Link to v10: https://lore.kernel.org/r/[email protected]

Patches in v11 No applies recorded yet

#Subject and filesSizeRepliesApplied
1/7rust: debugfs: Add initial support for directoriesMAINTAINERS rust/bindings/bindings_helper.h rust/kernel/debugfs.rs +2 more+147 -00 replies
2/7rust: debugfs: Add support for read-only filesrust/kernel/debugfs.rs rust/kernel/debugfs/entry.rs rust/kernel/debugfs/file_ops.rs +1 more+350 -123 replies
3/7rust: debugfs: Add support for writable filesrust/kernel/debugfs.rs rust/kernel/debugfs/file_ops.rs rust/kernel/debugfs/traits.rs+216 -30 replies
4/7rust: debugfs: Add support for callback-based filesrust/kernel/debugfs.rs rust/kernel/debugfs/callback_adapters.rs rust/kernel/debugfs/file_ops.rs+219 -00 replies
5/7samples: rust: Add debugfs sample driverMAINTAINERS samples/rust/Kconfig samples/rust/Makefile +1 more+164 -05 replies
6/7rust: debugfs: Add support for scoped directoriesrust/kernel/debugfs.rs rust/kernel/debugfs/entry.rs+320 -150 replies
7/7samples: rust: Add scoped debugfs sample driverMAINTAINERS samples/rust/Kconfig samples/rust/Makefile +1 more+147 -01 reply

Reviews trailers per patch

None of the 7 patches has a Reviewed-by or Acked-by.

PatchDirk Behme
SeriesT-b
1/7
2/7
3/7
4/7
5/7
6/7
7/7

Trailers given in replies are filled; those carried in the patches from earlier versions are outlined with dashes.

Read the v11 thread

Cover letter [PATCH v11 0/7] rust: DebugFS Bindings

This series provides safe DebugFS bindings for Rust, with sample modules using them.

---
Changes in v11:
- Rephrased comments/docs based on list feedback
- Switched longer polymorphic declarations to use where clauses
- Switched TI: PinInit to impl PinInit (this was previously required
for use<>
- Keep Scope private until the scoped interface is added
- Render -> Writer, UpdateFromSlice -> Reader
- Documented that Debug format is subject to change
- Link to v10: https://lore.kernel.org/r/[email protected]

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/[email protected]

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/[email protected]

Changes in v8:
- Switched from casts to core::from_{ref, mut} in type change
- Link to v7: https://lore.kernel.org/r/[email protected]

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/[email protected]

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/[email protected]

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/[email protected]

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/[email protected]

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/[email protected]

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/[email protected]

---
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                   | 594 +++++++++++++++++++++++++++++++
 rust/kernel/debugfs/callback_adapters.rs | 122 +++++++
 rust/kernel/debugfs/entry.rs             | 164 +++++++++
 rust/kernel/debugfs/file_ops.rs          | 247 +++++++++++++
 rust/kernel/debugfs/traits.rs            | 102 ++++++
 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, 1544 insertions(+)

---
base-commit: f3c5631f70e434e318c44001e2417d4770f06cd0
change-id: 20250428-debugfs-rust-3cd5c97eb7d1

Best regards,

Signature · 1 line
Matthew Maurer <[email protected]>