public inbox for rust-for-linux@vger.kernel.org
 help / color / mirror / Atom feed
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>,
	<nouveau@lists.freedesktop.org>, <rust-for-linux@vger.kernel.org>
Subject: [PATCH v5 6/8] gpu: nova-core: use pin projection in method boot()
Date: Fri, 16 Jan 2026 15:49:57 -0600	[thread overview]
Message-ID: <20260116214959.641032-7-ttabi@nvidia.com> (raw)
In-Reply-To: <20260116214959.641032-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


  parent reply	other threads:[~2026-01-16 21:50 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-01-16 21:49 [PATCH v5 0/8] gpu: nova-core: expose the logging buffers via debugfs Timur Tabi
2026-01-16 21:49 ` [PATCH v5 1/8] rust: pci: add device name method Timur Tabi
2026-01-17 11:09   ` Danilo Krummrich
2026-01-27 21:04     ` Timur Tabi
2026-01-27 21:07       ` Danilo Krummrich
2026-01-16 21:49 ` [PATCH v5 2/8] rust: debugfs: add Dir::empty() for conditional debugfs usage Timur Tabi
2026-01-19 12:08   ` Gary Guo
2026-01-20 17:54   ` Matthew Maurer
2026-01-20 18:19     ` Danilo Krummrich
2026-01-16 21:49 ` [PATCH v5 3/8] rust: uaccess: add UserSliceWriter::write_buffer() for raw pointer writes Timur Tabi
2026-01-17 11:18   ` Danilo Krummrich
2026-01-17 11:19     ` Danilo Krummrich
2026-01-17 13:23   ` Alice Ryhl
2026-01-17 14:23     ` Alice Ryhl
2026-01-17 14:35       ` Danilo Krummrich
2026-01-19 12:13         ` Gary Guo
2026-01-19 12:38           ` Danilo Krummrich
2026-01-16 21:49 ` [PATCH v5 4/8] gpu: nova-core: implement BinaryWriter for LogBuffer Timur Tabi
2026-01-17 11:22   ` Danilo Krummrich
2026-01-19 12:17   ` Gary Guo
2026-01-28 20:20     ` Timur Tabi
2026-01-16 21:49 ` [PATCH v5 5/8] gpu: nova-core: Replace module_pci_driver! with explicit module init Timur Tabi
2026-01-17 11:24   ` Danilo Krummrich
2026-01-28 20:52     ` Timur Tabi
2026-01-16 21:49 ` Timur Tabi [this message]
2026-01-16 21:49 ` [PATCH v5 7/8] gpu: nova-core: create debugfs root in " Timur Tabi
2026-01-17 12:18   ` Danilo Krummrich
2026-01-17 12:29   ` Danilo Krummrich
2026-01-17 20:58     ` Timur Tabi
2026-01-17 21:35       ` Danilo Krummrich
2026-01-17 21:52         ` Timur Tabi
2026-01-17 22:00           ` Danilo Krummrich
2026-01-16 21:49 ` [PATCH v5 8/8] gpu: nova-core: create GSP-RM logging buffers debugfs entries Timur Tabi
2026-01-17 12:21   ` 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=20260116214959.641032-7-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