From nobody Sun Feb 8 11:26:24 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D2D9435B120; Thu, 18 Dec 2025 15:52:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766073179; cv=none; b=BAmnLO4rUEW7wcludUhnN60HrPLfW6pom3WYeRtjzdvksm084ZFkWuDlOtBSZ080lYTGEpsIR6dHlergjH+tIA2iCZPULywoJyklzv5o1keZbRJCIJk7d0HrnVmZnQ0ppuKnq7TejLbPr/1wtiQ+lllozd35qLLru/BBq1N+pBE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1766073179; c=relaxed/simple; bh=mAqob5mbv6FapcPS/iSYQO3lcLOl40s89j9fmY+JxAo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=QKgUQfApd8QX5FMz+t3TroPfe9O84IEHFbuUygWEnOwOmiznpkv9sHmNLRdDm8jpH+N4m9Op/JuohxGIsPPgZJNAPLd5mdVlBnsakbMe7STSVOCOCSKv5Ek5Ir7vISxoXRs2Gnrn6je13e/PyOI4TJqOV+y4+LHhS3eUY8Tga3w= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=lzH6VXSa; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="lzH6VXSa" Received: by smtp.kernel.org (Postfix) with ESMTPSA id EA34FC19421; Thu, 18 Dec 2025 15:52:56 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1766073179; bh=mAqob5mbv6FapcPS/iSYQO3lcLOl40s89j9fmY+JxAo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=lzH6VXSaSYuzW+LM5rHFjXy9bUhqsaHVxwYEUqlZwBYk6+ZIauHjc4tYlHr9Yzf3u UfxCd230qworoQfHVYyjcU1dxlgT5x8evbKGdbuIpKO0mMFHWzyIpEjHzriS2K3RTx 6g6DG21lveBY/IrymygKwRMyIcX1svj5Enh3XLqNEdpnQZIIP9KS7FBru+7qEoqVnQ 9s3SpEvxRofLo27TiLo2pB1bPjwNK/SjSsMWDUMg+vudQmJFT/1cHUB47vH1qIeZXK H3/dR48VYxI1bl+QBXRJWaHpp2hKwu7roF/lxc7NxLJ4lXkI9UJ/c1veerQpBtHFaq 4m6nRKTSNUemA== From: Danilo Krummrich To: acourbot@nvidia.com, jhubbard@nvidia.com, apopple@nvidia.com, joelagnelf@nvidia.com, aliceryhl@google.com, lossin@kernel.org Cc: nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, Danilo Krummrich Subject: [PATCH 3/4] gpu: nova-core: gsp: get rid of redundant Result in Gsp::new() Date: Thu, 18 Dec 2025 16:50:50 +0100 Message-ID: <20251218155239.25243-4-dakr@kernel.org> X-Mailer: git-send-email 2.52.0 In-Reply-To: <20251218155239.25243-1-dakr@kernel.org> References: <20251218155239.25243-1-dakr@kernel.org> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" In Gsp::new(), utilize pin_init_scope() to get rid of the Result in the returned Result> which is unnecessarily redundant. Signed-off-by: Danilo Krummrich --- drivers/gpu/nova-core/gpu.rs | 2 +- drivers/gpu/nova-core/gsp.rs | 78 ++++++++++++++++++------------------ 2 files changed, 41 insertions(+), 39 deletions(-) diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 629c9d2dc994..50d76092fbdd 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -281,7 +281,7 @@ pub(crate) fn new<'a>( =20 sec2_falcon: Falcon::new(pdev.as_ref(), spec.chipset)?, =20 - gsp <- Gsp::new(pdev)?, + gsp <- Gsp::new(pdev), =20 _: { gsp.boot(pdev, bar, spec.chipset, gsp_falcon, sec2_falcon= )? }, =20 diff --git a/drivers/gpu/nova-core/gsp.rs b/drivers/gpu/nova-core/gsp.rs index fb6f74797178..8bc86e1bcac5 100644 --- a/drivers/gpu/nova-core/gsp.rs +++ b/drivers/gpu/nova-core/gsp.rs @@ -119,43 +119,45 @@ pub(crate) struct Gsp { =20 impl Gsp { // Creates an in-place initializer for a `Gsp` manager for `pdev`. - pub(crate) fn new(pdev: &pci::Device) -> Result> { - let dev =3D pdev.as_ref(); - let libos =3D CoherentAllocation:::= :alloc_coherent( - dev, - GSP_PAGE_SIZE / size_of::(), - GFP_KERNEL | __GFP_ZERO, - )?; - - // Initialise the logging structures. The OpenRM equivalents are i= n: - // _kgspInitLibosLoggingStructures (allocates memory for buffers) - // kgspSetupLibosInitArgs_IMPL (creates pLibosInitArgs[] array) - let loginit =3D LogBuffer::new(dev)?; - dma_write!(libos[0] =3D LibosMemoryRegionInitArgument::new("LOGINI= T", &loginit.0))?; - - let logintr =3D LogBuffer::new(dev)?; - dma_write!(libos[1] =3D LibosMemoryRegionInitArgument::new("LOGINT= R", &logintr.0))?; - - let logrm =3D LogBuffer::new(dev)?; - dma_write!(libos[2] =3D LibosMemoryRegionInitArgument::new("LOGRM"= , &logrm.0))?; - - let cmdq =3D Cmdq::new(dev)?; - - let rmargs =3D CoherentAllocation::::alloc_coh= erent( - dev, - 1, - GFP_KERNEL | __GFP_ZERO, - )?; - dma_write!(rmargs[0] =3D fw::GspArgumentsCached::new(&cmdq))?; - dma_write!(libos[3] =3D LibosMemoryRegionInitArgument::new("RMARGS= ", &rmargs))?; - - Ok(try_pin_init!(Self { - libos, - loginit, - logintr, - logrm, - rmargs, - cmdq, - })) + pub(crate) fn new(pdev: &pci::Device) -> impl PinInit + '_ { + pin_init::pin_init_scope(move || { + let dev =3D pdev.as_ref(); + let libos =3D CoherentAllocation::::alloc_coherent( + dev, + GSP_PAGE_SIZE / size_of::(), + GFP_KERNEL | __GFP_ZERO, + )?; + + // Initialise the logging structures. The OpenRM equivalents a= re in: + // _kgspInitLibosLoggingStructures (allocates memory for buffe= rs) + // kgspSetupLibosInitArgs_IMPL (creates pLibosInitArgs[] array) + let loginit =3D LogBuffer::new(dev)?; + dma_write!(libos[0] =3D LibosMemoryRegionInitArgument::new("LO= GINIT", &loginit.0))?; + + let logintr =3D LogBuffer::new(dev)?; + dma_write!(libos[1] =3D LibosMemoryRegionInitArgument::new("LO= GINTR", &logintr.0))?; + + let logrm =3D LogBuffer::new(dev)?; + dma_write!(libos[2] =3D LibosMemoryRegionInitArgument::new("LO= GRM", &logrm.0))?; + + let cmdq =3D Cmdq::new(dev)?; + + let rmargs =3D CoherentAllocation::::alloc= _coherent( + dev, + 1, + GFP_KERNEL | __GFP_ZERO, + )?; + dma_write!(rmargs[0] =3D fw::GspArgumentsCached::new(&cmdq))?; + dma_write!(libos[3] =3D LibosMemoryRegionInitArgument::new("RM= ARGS", &rmargs))?; + + Ok(try_pin_init!(Self { + libos, + loginit, + logintr, + logrm, + rmargs, + cmdq, + })) + }) } } --=20 2.52.0