> On Dec 13, 2025, at 6:00 AM, Timur Tabi <[email protected]> wrote:
> 
> Create read-only debugfs entries for LOGINIT, LOGRM, and LOGINTR, which
> are the three primary printf logging buffers from GSP-RM.  LOGPMU will
> be added at a later date, as it requires it support for its RPC message
> first.
> 
> This patch uses the `pin_init_scope` feature to create the entries.
> `pin_init_scope` solves the lifetime issue over the `DEBUGFS_ROOT`
> reference by delaying its acquisition until the time the entry is
> actually initialized.
> 
> Co-developed-by: Alexandre Courbot <[email protected]>

Co-developed tag needs a sign off tag with it from the developer.

- Joel


> Signed-off-by: Timur Tabi <[email protected]>
> ---
> drivers/gpu/nova-core/gsp.rs | 25 +++++++++++++------------
> 1 file changed, 13 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/gpu/nova-core/gsp.rs b/drivers/gpu/nova-core/gsp.rs
> index ba4f789d8ac1..2267ec3391dd 100644
> --- a/drivers/gpu/nova-core/gsp.rs
> +++ b/drivers/gpu/nova-core/gsp.rs
> @@ -108,11 +108,13 @@ pub(crate) struct Gsp {
>     pub(crate) libos: CoherentAllocation<LibosMemoryRegionInitArgument>,
>     /// Init log buffer.
>     #[pin]
> -    pub loginit: debugfs::File<LogBuffer>,
> +    loginit: debugfs::File<LogBuffer>,
>     /// Interrupts log buffer.
> -    logintr: LogBuffer,
> +    #[pin]
> +    logintr: debugfs::File<LogBuffer>,
>     /// RM log buffer.
> -    logrm: LogBuffer,
> +    #[pin]
> +    logrm: debugfs::File<LogBuffer>,
>     /// Command queue.
>     pub(crate) cmdq: Cmdq,
>     /// RM arguments.
> @@ -177,18 +179,17 @@ pub(crate) fn new<'a>(
>         dma_write!(libos[3] = LibosMemoryRegionInitArgument::new("RMARGS", 
> &rmargs))?;
> 
>         #[allow(static_mut_refs)]
> -        let debugfs_dir =
> -            // SAFETY: `DEBUGFS_ROOT` is never modified after 
> initialization, so it is safe to
> -            // create a shared reference to it.
> -            unsafe { crate::DEBUGFS_ROOT.as_ref() }
> -            .map(|root| root.subdir(pdev.name()))
> -            .ok_or(ENOENT)?;
> +        // SAFETY: `DEBUGFS_ROOT` is never modified after initialization, so 
> it is safe to
> +        // create a shared reference to it.
> +        let novacore_dir = unsafe { crate::DEBUGFS_ROOT.as_ref() 
> }.ok_or(ENOENT)?;
> +
> +        let root = novacore_dir.subdir(pdev.name());
> 
>         Ok(try_pin_init!(Self {
>             libos,
> -            loginit <- 
> debugfs_dir.read_binary_file(kernel::c_str!("loginit"), loginit),
> -            logintr,
> -            logrm,
> +            loginit <- root.read_binary_file(kernel::c_str!("loginit"), 
> loginit),
> +            logintr <- root.read_binary_file(kernel::c_str!("logintr"), 
> logintr),
> +            logrm <- root.read_binary_file(kernel::c_str!("logrm"), logrm),
>             rmargs,
>             cmdq,
>         }))
> --
> 2.52.0
> 

Reply via email to