public inbox for rust-for-linux@vger.kernel.org
 help / color / mirror / Atom feed
From: "Gary Guo" <gary@garyguo.net>
To: "Timur Tabi" <ttabi@nvidia.com>,
	"John Hubbard" <jhubbard@nvidia.com>,
	"gary@garyguo.net" <gary@garyguo.net>,
	"mmaurer@google.com" <mmaurer@google.com>,
	"rust-for-linux@vger.kernel.org" <rust-for-linux@vger.kernel.org>,
	"nouveau@lists.freedesktop.org" <nouveau@lists.freedesktop.org>,
	"Joel Fernandes" <joelagnelf@nvidia.com>,
	"dakr@kernel.org" <dakr@kernel.org>,
	"aliceryhl@google.com" <aliceryhl@google.com>,
	"Alexandre Courbot" <acourbot@nvidia.com>
Subject: Re: [PATCH v6 7/7] gpu: nova-core: create GSP-RM logging buffers debugfs entries
Date: Fri, 30 Jan 2026 23:58:35 +0000	[thread overview]
Message-ID: <DG2BY691US2F.36NWWJ18OPTBP@garyguo.net> (raw)
In-Reply-To: <95b913a1d344f603d17abc7f6d78da166068bc91.camel@nvidia.com>

On Fri Jan 30, 2026 at 11:36 PM GMT, Timur Tabi wrote:
> On Wed, 2026-01-28 at 20:28 -0600, Timur Tabi wrote:
>> +                    #[allow(static_mut_refs)]
>> +                    // SAFETY: `DEBUGFS_ROOT` is created before driver registration and
>> cleared
>> +                    // after driver unregistration, so no probe() can race with its
>> modification.
>> +                    let log_parent = unsafe { crate::DEBUGFS_ROOT.as_ref() }
>> +                        .expect("DEBUGFS_ROOT not initialized");
>> +
>> +                    log_parent.scope(log_buffers, dev.name(), |logs, dir| {
>> +                        dir.read_binary_file(c_str!("loginit"), &logs.loginit.0);
>> +                        dir.read_binary_file(c_str!("logintr"), &logs.logintr.0);
>> +                        dir.read_binary_file(c_str!("logrm"), &logs.logrm.0);
>
> I think there might be a problem with this code that I don't know how to resolve.
>
> If CONFIG_NOVA_CORE_DEBUGFS=n, then DEBUGFS_ROOT is None, and so the .as_ref() will also be
> none, and the .expect will cause a panic.  We don't want that.
>
> If I remove the .expect(), then log_parent becomes None, but then the .scope() won't compile.
>
> I could wrap the whole thing in #[cfg(CONFIG_NOVA_CORE_DEBUGFS)], but my understanding is that
> the call to .scope() is necessary to ensure that LogBuffers is not dropped at the end of this
> function.
>
> It seems like I'm going to need to do something like this in struct Gsp:
>
> 	#[cfg(CONFIG_NOVA_CORE_DEBUGFS)]
> 	#[pin]
> 	logs: debugfs::Scope<LogBuffers>,
>
> 	#[cfg(not(CONFIG_NOVA_CORE_DEBUGFS))]
> 	logs: LogBuffers,  // Just own them directly, no debugfs
>
> But the design of debugfs is to have it not care if debugfs is disabled.
>
> Any suggestions?

I think the rationale behind current debugfs design is that when it is disabled
in its entirety, then all of the code are compiled out and you're leaved with
ZST, so code don't have to care at all and you'll still have no codegen in the
end.

However, when debugfs is enabled, but CONFIG_NOVA_CORE_DEBUGFS=n, then using
debugfs functionalities would *not* be compiled out (so, for the `Dir::empty()`
patch in the previous iteration, all of the debugging facility would still be
around with CONFIG_DEBUG_FS=y and CONFIG_NOVA_CORE_DEBUGFS=n, which is not
desirable).

The straightforward solution is thus sprinkle `#[cfg(CONFIG_NOVA_CORE_DEBUGFS)]`
everywhere where debugfs is touched, which is non-ideal.

One idea is to create types that look exactly like `Dir` but always ZST and
no-op regardless whether CONFIG_DEBUG_FS is enabled... But that feel a bit..
weird. Matthew, what do you think?

Best,
Gary

  reply	other threads:[~2026-01-30 23:58 UTC|newest]

Thread overview: 25+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-29  2:28 [PATCH v6 0/7] gpu: nova-core: expose the logging buffers via debugfs Timur Tabi
2026-01-29  2:28 ` [PATCH v6 1/7] rust: device: add device name method Timur Tabi
2026-01-29  2:28 ` [PATCH v6 2/7] rust: uaccess: add write_dma() for copying from DMA buffers to userspace Timur Tabi
2026-01-29 17:24   ` Gary Guo
2026-01-31  0:14   ` Danilo Krummrich
2026-01-29  2:28 ` [PATCH v6 3/7] gpu: nova-core: implement BinaryWriter for CoherentAllocation<u8> Timur Tabi
2026-01-30  8:31   ` Alice Ryhl
2026-01-30 18:53     ` Timur Tabi
2026-01-29  2:28 ` [PATCH v6 4/7] gpu: nova-core: Replace module_pci_driver! with explicit module init Timur Tabi
2026-01-29  2:28 ` [PATCH v6 5/7] gpu: nova-core: use pin projection in method boot() Timur Tabi
2026-01-29  2:28 ` [PATCH v6 6/7] gpu: nova-core: create debugfs root in module init Timur Tabi
2026-01-30  8:34   ` Alice Ryhl
2026-01-30 14:59     ` Timur Tabi
2026-01-29  2:28 ` [PATCH v6 7/7] gpu: nova-core: create GSP-RM logging buffers debugfs entries Timur Tabi
2026-01-30 23:36   ` Timur Tabi
2026-01-30 23:58     ` Gary Guo [this message]
2026-01-31  0:07       ` John Hubbard
2026-01-31  0:10       ` Danilo Krummrich
2026-01-31  0:16         ` John Hubbard
2026-01-31  0:20           ` Danilo Krummrich
2026-01-31  0:24             ` John Hubbard
2026-01-31  4:11           ` Timur Tabi
2026-01-31  0:26         ` Timur Tabi
2026-01-31  0:35           ` Danilo Krummrich
2026-01-31  0:51             ` Timur Tabi

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=DG2BY691US2F.36NWWJ18OPTBP@garyguo.net \
    --to=gary@garyguo.net \
    --cc=acourbot@nvidia.com \
    --cc=aliceryhl@google.com \
    --cc=dakr@kernel.org \
    --cc=jhubbard@nvidia.com \
    --cc=joelagnelf@nvidia.com \
    --cc=mmaurer@google.com \
    --cc=nouveau@lists.freedesktop.org \
    --cc=rust-for-linux@vger.kernel.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox