From: Timur Tabi <ttabi@nvidia.com>
To: Matthew Maurer <mmaurer@google.com>,
Danilo Krummrich <dakr@kernel.org>, Gary Guo <gary@garyguo.net>,
John Hubbard <jhubbard@nvidia.com>,
"Joel Fernandes" <joelagnelf@nvidia.com>,
Alexandre Courbot <acourbot@nvidia.com>,
<rust-for-linux@vger.kernel.org>, <nouveau@lists.freedesktop.org>
Subject: [PATCH v4 4/9] gpu: nova-core: use pin projection in method boot()
Date: Tue, 13 Jan 2026 16:54:03 -0600 [thread overview]
Message-ID: <20260113225408.671252-5-ttabi@nvidia.com> (raw)
In-Reply-To: <20260113225408.671252-1-ttabi@nvidia.com>
Struct Gsp in gsp.rs is tagged with #[pin_data], which allows any of its
fields to be pinned (i.e. with #[pin]). When #[pin] is added to any
field in a #[pin_data] struct, fields can no longer be directly accessed
via normal field access. Instead, pin projection must be used to access
those fields.
Currently, no fields are pinned, but that will change. The boot() method
receives self: Pin<&mut Self>. When struct Gsp contains any pinned
fields, direct field access like self.cmdq is not allowed through
Pin<&mut Self>, as Pin prevents obtaining &mut Self to protect pinned
data from being moved.
Use pin projection via self.as_mut().project() to access struct fields.
The project() method, generated by #[pin_data], returns a projection
struct providing &mut references to non-pinned fields, enabling mutable
access while preserving pin invariants.
Signed-off-by: Timur Tabi <ttabi@nvidia.com>
---
drivers/gpu/nova-core/gsp/boot.rs | 14 ++++++++------
1 file changed, 8 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/boot.rs
index 581b412554dc..68a8acaf8c54 100644
--- a/drivers/gpu/nova-core/gsp/boot.rs
+++ b/drivers/gpu/nova-core/gsp/boot.rs
@@ -159,12 +159,14 @@ pub(crate) fn boot(
CoherentAllocation::<GspFwWprMeta>::alloc_coherent(dev, 1, GFP_KERNEL | __GFP_ZERO)?;
dma_write!(wpr_meta[0] = GspFwWprMeta::new(&gsp_fw, &fb_layout))?;
- self.cmdq
+ let this = self.as_mut().project();
+
+ this.cmdq
.send_command(bar, commands::SetSystemInfo::new(pdev))?;
- self.cmdq.send_command(bar, commands::SetRegistry::new())?;
+ this.cmdq.send_command(bar, commands::SetRegistry::new())?;
gsp_falcon.reset(bar)?;
- let libos_handle = self.libos.dma_handle();
+ let libos_handle = this.libos.dma_handle();
let (mbox0, mbox1) = gsp_falcon.boot(
bar,
Some(libos_handle as u32),
@@ -231,13 +233,13 @@ pub(crate) fn boot(
dev: pdev.as_ref().into(),
bar,
};
- GspSequencer::run(&mut self.cmdq, seq_params)?;
+ GspSequencer::run(this.cmdq, seq_params)?;
// Wait until GSP is fully initialized.
- commands::wait_gsp_init_done(&mut self.cmdq)?;
+ commands::wait_gsp_init_done(this.cmdq)?;
// Obtain and display basic GPU information.
- let info = commands::get_gsp_info(&mut self.cmdq, bar)?;
+ let info = commands::get_gsp_info(this.cmdq, bar)?;
match info.gpu_name() {
Ok(name) => dev_info!(pdev.as_ref(), "GPU name: {}\n", name),
Err(e) => dev_warn!(pdev.as_ref(), "GPU name unavailable: {:?}\n", e),
--
2.52.0
next prev parent reply other threads:[~2026-01-13 22:54 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-01-13 22:53 [PATCH v4 0/9] gpu: nova-core: expose the logging buffers via debugfs Timur Tabi
2026-01-13 22:54 ` [PATCH v4 1/9] rust: pci: add PCI device name method Timur Tabi
2026-01-13 22:54 ` [PATCH v4 2/9] gpu: nova-core: implement BinaryWriter for LogBuffer Timur Tabi
2026-01-13 22:54 ` [PATCH v4 3/9] gpu: nova-core: Replace module_pci_driver! with explicit module init Timur Tabi
2026-01-13 22:54 ` Timur Tabi [this message]
2026-01-13 22:54 ` [PATCH v4 5/9] rust: debugfs: implement Directory trait for Dir Timur Tabi
2026-01-15 17:27 ` kernel test robot
2026-01-13 22:54 ` [PATCH v4 6/9] rust: debugfs: wrap Entry in an enum to prep for LookupDir Timur Tabi
2026-01-13 22:54 ` [PATCH v4 7/9] rust: debugfs: add LookupDir Timur Tabi
2026-01-13 22:54 ` [PATCH v4 8/9] gpu: nova-core: create debugfs root when driver loads Timur Tabi
2026-01-13 22:54 ` [PATCH v4 9/9] gpu: nova-core: create GSP-RM logging buffers debugfs entries Timur Tabi
2026-01-13 23:11 ` [PATCH v4 0/9] gpu: nova-core: expose the logging buffers via debugfs Danilo Krummrich
2026-01-13 23:26 ` Timur Tabi
2026-01-13 23:50 ` Danilo Krummrich
2026-01-13 23:59 ` Timur Tabi
2026-01-14 1:09 ` Gary Guo
2026-01-14 11:17 ` Danilo Krummrich
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=20260113225408.671252-5-ttabi@nvidia.com \
--to=ttabi@nvidia.com \
--cc=acourbot@nvidia.com \
--cc=dakr@kernel.org \
--cc=gary@garyguo.net \
--cc=jhubbard@nvidia.com \
--cc=joelagnelf@nvidia.com \
--cc=mmaurer@google.com \
--cc=nouveau@lists.freedesktop.org \
--cc=rust-for-linux@vger.kernel.org \
/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