All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Danilo Krummrich" <dakr@kernel.org>
To: "Greg Kroah-Hartman" <gregkh@linuxfoundation.org>
Cc: "Matthew Maurer" <mmaurer@google.com>,
	"Miguel Ojeda" <ojeda@kernel.org>,
	"Alex Gaynor" <alex.gaynor@gmail.com>,
	"Boqun Feng" <boqun.feng@gmail.com>,
	"Gary Guo" <gary@garyguo.net>,
	"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
	"Andreas Hindborg" <a.hindborg@kernel.org>,
	"Alice Ryhl" <aliceryhl@google.com>,
	"Trevor Gross" <tmgross@umich.edu>,
	"Rafael J. Wysocki" <rafael@kernel.org>,
	"Sami Tolvanen" <samitolvanen@google.com>,
	"Timur Tabi" <ttabi@nvidia.com>,
	"Benno Lossin" <lossin@kernel.org>,
	"Dirk Beheme" <dirk.behme@de.bosch.com>,
	linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org
Subject: Re: [PATCH v11 2/7] rust: debugfs: Add support for read-only files
Date: Mon, 08 Sep 2025 18:30:10 +0200	[thread overview]
Message-ID: <DCNK8EHQ7OZ5.3U3VC187LUU66@kernel.org> (raw)
In-Reply-To: <2025090808-slicer-consent-6db0@gregkh>

On Mon Sep 8, 2025 at 6:19 PM CEST, Greg Kroah-Hartman wrote:
> On Mon, Sep 08, 2025 at 04:59:16PM +0200, Danilo Krummrich wrote:

<snip>

>> We agree on the goal here, but unfortunately it's not really possible. There are
>> two options that were already exercised:
>> 
>> 	(1) Force that FooFiles (or FooDir) is bound to the lifetime of a
>> 	    reference of Foo with FooDir<&'a Foo>.
>> 
>> 	    This isn't workable because we then can't store both of them into
>> 	    the same parent structure.
>> 
>> 	(2) Reference count Foo (Arc<Foo>) and make FooDir own a referenc count
>> 	    of Foo.
>> 
>> 	    But this is bad for the mentioned reasons. :(
>> 
>> 	(3) The File<T> API we have now, which gives you the behavior you ask
>> 	    for with Scope<T>.
>> 
>> 	    Where Scope<T> creates a directory and owns the data you pass to it,
>> 	    e.g. a pci config descriptor.
>> 
>> 	    The user can create an arbitrary number of files exporting any of
>> 	    the fields in date that live in the scope and don't need to be tracked
>> 	    separately, i.e. don't create separate object instances.
>> 
>> 	    The directory (and hence all the files) is removed once the Scope<T>
>> 	    is dropped, including the data it owns.

<snip>

>> I can provide some working code later on (currently in a meeting). :)
>
> Working code for the simple "foo" example will be good.  Here's my
> horrible (and will not build) example I was trying to get to work.

Here it comes [1]. :)

[1] rust_debugfs_soc_info.rs

// SPDX-License-Identifier: GPL-2.0

//! Simple `debugfs::Scope` example.

use kernel::c_str;
use kernel::debugfs::{Dir, Scope};
use kernel::prelude::*;

module! {
    type: MyModule,
    name: "MyModule",
    description: "Just a simple test module.",
    license: "GPL",
}

#[derive(Debug)]
struct HwSocInfo {
    name: &'static CStr,
    ver: u32,
    id: u32,
}

impl HwSocInfo {
    fn new(name: &'static CStr, ver: u32, id: u32) -> Self {
        Self { name, ver, id }
    }
}

struct MyModule {
    // Dropped when MyModule is released (e.g. through `rmmod`).
    //
    // This will drop the inner `HwSocInfo`, the "foo" directory, and all files created within this
    // directory.
    _scope: Pin<KBox<Scope<HwSocInfo>>>,
}

impl kernel::Module for MyModule {
    fn init(_module: &'static kernel::ThisModule) -> Result<Self, Error> {
        let root_dir = Dir::new(c_str!("my_module"));

        // Obtain some `HwSocInfo`, could from anywhere.
        let soc_info = HwSocInfo::new(c_str!("foo"), 24, 42);

        let scope = KBox::pin_init(
            // Create directory scope, that contains some data and a bunch of files exporting this
            // data.
            root_dir.scope(soc_info, c_str!("hw_soc_info"), |soc_info, dir| {
                dir.read_only_file(c_str!("name"), &soc_info.name);
                dir.read_only_file(c_str!("ver"), &soc_info.ver);
                dir.read_only_file(c_str!("id"), &soc_info.id);
            }),
            GFP_KERNEL,
        )?;

        // Print the contents of `soc_info` that were moved into `scope`.
        pr_info!("HwSocInfo: {:?}\n", &**scope);

        Ok(Self { _scope: scope })
    }
}

  reply	other threads:[~2025-09-08 16:30 UTC|newest]

Thread overview: 38+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-09-04 21:13 [PATCH v11 0/7] rust: DebugFS Bindings Matthew Maurer
2025-09-04 21:13 ` [PATCH v11 1/7] rust: debugfs: Add initial support for directories Matthew Maurer
2025-09-04 21:13 ` [PATCH v11 2/7] rust: debugfs: Add support for read-only files Matthew Maurer
2025-09-08 10:17   ` Greg Kroah-Hartman
2025-09-08 10:54     ` Danilo Krummrich
2025-09-08 10:56       ` Danilo Krummrich
2025-09-08 12:48       ` Greg Kroah-Hartman
2025-09-08 13:22         ` Danilo Krummrich
2025-09-08 13:30           ` Greg Kroah-Hartman
2025-09-08 13:34             ` Alice Ryhl
2025-09-08 13:38               ` Danilo Krummrich
2025-09-08 13:36             ` Danilo Krummrich
2025-09-08 14:16               ` Greg Kroah-Hartman
2025-09-08 14:59                 ` Danilo Krummrich
2025-09-08 16:19                   ` Greg Kroah-Hartman
2025-09-08 16:30                     ` Danilo Krummrich [this message]
2025-09-08 16:55                       ` Danilo Krummrich
2025-09-10 15:21                         ` Greg Kroah-Hartman
2025-09-08 17:58                     ` Danilo Krummrich
2025-09-09  7:29   ` Dirk Behme
2025-09-09  8:29     ` Danilo Krummrich
2025-09-10 15:22       ` Greg Kroah-Hartman
2025-09-10 15:23         ` Danilo Krummrich
2025-09-10 15:36           ` Greg Kroah-Hartman
2025-09-10 15:43             ` Danilo Krummrich
2025-09-10 17:10               ` Danilo Krummrich
2025-09-04 21:13 ` [PATCH v11 3/7] rust: debugfs: Add support for writable files Matthew Maurer
2025-09-04 21:13 ` [PATCH v11 4/7] rust: debugfs: Add support for callback-based files Matthew Maurer
2025-09-04 21:13 ` [PATCH v11 5/7] samples: rust: Add debugfs sample driver Matthew Maurer
2025-09-05  9:00   ` Danilo Krummrich
2025-09-06  3:19     ` Matthew Maurer
2025-09-07 23:25       ` Danilo Krummrich
2025-09-08 13:08   ` Greg Kroah-Hartman
2025-09-08 13:30     ` Danilo Krummrich
2025-09-04 21:13 ` [PATCH v11 6/7] rust: debugfs: Add support for scoped directories Matthew Maurer
2025-09-04 21:13 ` [PATCH v11 7/7] samples: rust: Add scoped debugfs sample driver Matthew Maurer
2025-09-08 13:04   ` Greg Kroah-Hartman
2025-09-08  7:01 ` [PATCH v11 0/7] rust: DebugFS Bindings Dirk Behme

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=DCNK8EHQ7OZ5.3U3VC187LUU66@kernel.org \
    --to=dakr@kernel.org \
    --cc=a.hindborg@kernel.org \
    --cc=alex.gaynor@gmail.com \
    --cc=aliceryhl@google.com \
    --cc=bjorn3_gh@protonmail.com \
    --cc=boqun.feng@gmail.com \
    --cc=dirk.behme@de.bosch.com \
    --cc=gary@garyguo.net \
    --cc=gregkh@linuxfoundation.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=lossin@kernel.org \
    --cc=mmaurer@google.com \
    --cc=ojeda@kernel.org \
    --cc=rafael@kernel.org \
    --cc=rust-for-linux@vger.kernel.org \
    --cc=samitolvanen@google.com \
    --cc=tmgross@umich.edu \
    --cc=ttabi@nvidia.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.