> 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 >
