From nobody Thu Apr 9 07:04:59 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010042.outbound.protection.outlook.com [52.101.56.42]) (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 07F533EB819; Tue, 10 Mar 2026 08:16:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.42 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773130614; cv=fail; b=W2aWmUE+49c8i00FOf5dsgeh6JJ1hxoKiKy+jhfUSVXlKAZlFGY5vR4L0s9bAmcExXTkl2RFGyjQXogJfLd5Oy595Y4uPcpHEC7sy4sLS0LkA4FyS2zN+dYklTYmdWmYQ98WUNGpzXi0QKqL8t7NBr0D3rsiaSR8zP8T+JztVyM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773130614; c=relaxed/simple; bh=Tzg/HG84XhRFTzErGkqLuBIOX8HaP8/jPiZyryyOmdo=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=sHFVAwmYpQ5Xzqlknq9lWxOeWXFutEeT3neJqVj1glLFqIM8voOfg9uvyflm1fKm8qaKGIgwNkZLns0qgMEk1BjNCi8/5TXYLUKi5uPFOGhGsW4L84HOR1iRVv4cHzL39+bfNqq5+AOE/tWeqOQnHYK8r9QP4FnpUpGT/PhKqZw= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=ueyULfIO; arc=fail smtp.client-ip=52.101.56.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="ueyULfIO" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tlcrKM5RPoCH9YIMSOCeBZnfsleE8NX5DonZSLq27oQsBHJquF8cuPribkLlUTmAk8Q4eVX4XPrxh546yzjzqlDU9ZK1iErYEymaZ6t8HMwj9WqnS0+60TZsDq3X0oukKZEhjV9/JnwSVkD82hRc1kPOQajuPSL6GjAMYJH5Jcd8BAWDiMW6elhqEq6P3Ion4B5I7Zd9fFS+zH4DTdPIHc7HdnSVRdYNUUUVSNGa68F6absZ4SOC+BT2ZduUPNVB1cEVSu1IgXDzbbiV9mxtGoE+ZQ9x3Mp2ncr5BOhmp4KPCisNzzRhuvw4ukRG5W2ahAO4/vnaMCOkKicBHcpTtA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=Qlxm/LlCzCweNqeQ7heMcbfk24hOiVRPRrb0hPfZAg4=; b=TZOJeiHlJ8mRPaCC7BwyuNGZPqIDyaBTHbb8Ms6yiKdrXHPaw5DJ5xTNc0471iaA8t9GL6Ao0DASLFOmfe1bjfoqPf9RfdnZP+r9dC5EOblj/bxMesk0ArVEoirsDtrcEQiAfCKgb2kVAW+D+MirwNiiUo//BKppx+Nx9l2ZGNcAJRmMhVzaUwt7/QFKiZrwhOEjw1AF1j7t9GD4mLuVNg3EZR56xKKkutWhR34i1KDmrYSs+NJepMg2MfYQDVtqdhQ8XUMkBrKAEQVEhpTfHQxvaCnlG/gfbHKEwcmDBqVz0oKe1enNGjL2CGSSW8IJ3zwkitEDHfS3r/SjrLpVFQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Qlxm/LlCzCweNqeQ7heMcbfk24hOiVRPRrb0hPfZAg4=; b=ueyULfIOsgFmqxbnkofKCtAzoE4lyCG5FSeu3z5pCnok6eDL+ubzo/N2atjU1PnUbKW6KwKxysDLnGpSdxkLGUOmRtQbm8Wo0PPBHPDWQU33ocYtLFD5QMUAACL1aQ2NrSb/Qsri02Itsb9X0s0CJEWxHRLc764QkyD5ysV8dGirqnGLjZEbZpQuFBOMtvYeuUaigl3bQwP8+3DJxpiv6PxH3enZxu0CyzYdT1DibZMgWwkcj0D/VkA//Gz3hDczI+ypJI+uRo27IwyFVGW2fabYpfn3UeGkyh5XsqDmLqvtOFzUfdXe1Ex4t4DfWruZds+j3zQvS5hrjd6BqFYZwA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by IA1PR12MB7614.namprd12.prod.outlook.com (2603:10b6:208:429::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.11; Tue, 10 Mar 2026 08:16:48 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9700.010; Tue, 10 Mar 2026 08:16:48 +0000 From: Eliot Courtney Date: Tue, 10 Mar 2026 17:09:15 +0900 Subject: [PATCH v4 1/5] gpu: nova-core: gsp: fix stale doc comments on command queue methods Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260310-cmdq-locking-v4-1-4e5c4753c408@nvidia.com> References: <20260310-cmdq-locking-v4-0-4e5c4753c408@nvidia.com> In-Reply-To: <20260310-cmdq-locking-v4-0-4e5c4753c408@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Benno Lossin , Gary Guo Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Eliot Courtney , Zhi Wang X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYCP286CA0282.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c9::9) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|IA1PR12MB7614:EE_ X-MS-Office365-Filtering-Correlation-Id: 8b566a1e-1ad3-400e-ed29-08de7e7d601f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|366016|1800799024|7416014|376014; X-Microsoft-Antispam-Message-Info: c85/iwSPCEUhaVs+Xme2hnsGDDZDiqeQZpdtBsMyzRG22gKllZCuuS+nE79RiMmPK4Wbn+PGYNAmMvD4QCNiQ5GC60kGsfLc6e1hrQYzCNfnn4opr+paS9kDT0YuKt2n4iLVo2Hkv9wUoE4Pkp/Zo9BTEfC2X+K5Od37yhzrlI2ANXkbpHnfFLaQjdBm4bekdGCq0+RIcy+waUkvXAj77cX6ZTdBT5Yfirivn6qNS6KR22lk6IPFgClCeAM0K358984WjZ6UJqFUzTK0o47dkQgs9uBFem19qpmc4uQtb1gurR5qJk3qmqQ1f4+TEOA3Wk0SL/ajpPcfYKnfWGF+7Zbqa4D1Dq6ylqORsRCgBi5lXtFqXMCODP4S4PVs0zWOhejgtCbqUBMKn9WIXOA7IvQD0wiXmuLDhNsiS7CXkyYowzW+c5kx9CW7cUGXP4dPH1oFl8THi6VqI341PNn+qlb0kpSbVkQ+wjac3I6/Cyt6ew3vj6jVEkqv98/RCRo3Ac0h1ADC5RrCvdOYOOyW0nnm29t/qn2aPu10X7Kzjw2bxjv6Z1tMcNPZYXgU1Hw2Q99qAK3KGGyoL8MrG66VFAP998LMv7+KcftUvoNR9pYy8BoAcp6cqJSaT5IXCxyUX1y+i1NhMZe37SzVt1vLfutZYojjOOxviAcoDwVaLEsCLybZse0+HKoQA7VvY3OypEcMPVddDDCHDleP2uIUYECwb6k6STs/elIJO16JQUc= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(366016)(1800799024)(7416014)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MWdOL081dTRJRkxFckg3K3gzYWtUUCtFYVJmU2JZOSs2ZDhuMjlvd2RheWVj?= =?utf-8?B?WDA2Sm1NVXpnYmF2NnRuK0tKZkM0WG51VkRLZTJZRGRveVVDUGlGZXVvMTVz?= =?utf-8?B?MzJyVi9Vd2FIY2dabEZkS29JYzNYQWNMNHBrdnRKaUF1ZmJZM1pXenhRZXZS?= =?utf-8?B?OGtubk1DblVlNDQxWGl5L1l1OURMbHN3bTZMelFRa0s0ZlF3MUdlWm1SN0Js?= =?utf-8?B?QWdwdENPeUZURDVWa3VXZlAwSzZLaVdiSlZGWENIWTNzS2JYTm96QzRoOG82?= =?utf-8?B?ZERzOGV4M09QV3pvSzNWL3BOdmdLS2dqVUFMS2lqUm1XZDJ4b1NiWEl0L0dl?= =?utf-8?B?eVNyUUtpNG9UNThtenJ0NnRJd0lsUlNyOTFYV3phaUZoRDY4ZXdwVDJwczVo?= =?utf-8?B?MlpDK3NXU3RrYUdZeUhhZXpkbGtGSkQ3bm5oR2VnM3VHMXdnMzVXaVlVV2wz?= =?utf-8?B?OUlyeStDS1VHS1J1Z0QzdDlVWlAwY3dsUElPalM4SFJyelhuOGJhS29LRUJw?= =?utf-8?B?Q0J2Z2NiYTdpa0ViQUdEUnVhZHJ4TXFrSURReGV3QWwzU3p3UFZMV0x1ZzF3?= =?utf-8?B?KzQ3TlNpdVEwVENUc00vYnVzQkxUU3hDU1duYUQ1LzUrcmh1MGpmMm01c2VB?= =?utf-8?B?WHZwdG5iZllzbVJiQUdROUU5M0JQbzZDZkZiU2piTW5CU0JkMkgzVHgxMWFP?= =?utf-8?B?OTFVQlFlNHJCSlpIRy9NMnZTckdPWHpza3BCZ3NVajZhUWpaakkvbTUxTGtk?= =?utf-8?B?MkRmWWZ6SEhVQTJVamM4NXJuK0ZHcHdVb2hZeHNkNFlnRHBaeDRTd1JDZDlN?= =?utf-8?B?Nm1qYUxYdnlQVnVkUU1rNEVTR3M2bXNiUklYaWtaRHZwY0xoc1hJT0ErUzV0?= =?utf-8?B?MFBCdWxHYjFnbGsyT0NyVmRvSXJCZTlISE9jTlFVTnRjQVUxdUd2SHFRR2VJ?= =?utf-8?B?NGdIWTU0bTNnM0U5Mi93VHdseHZJYmZZU2QzQ1c0Nyt5S251dHZPUEoraHFG?= =?utf-8?B?dlZaRGVxZWh4OHVXelpJWUdUOGM1VjNmMjhFRmkvYzZEaGlwMUltVVdXblhv?= =?utf-8?B?bDlJVjV1ZmlZNHNUOXJXRXRoUDBOL3dYNXlWcmZLaTJZOU5nRXVULyt5M2l5?= =?utf-8?B?MEZkWXJ2YTZwNXJMMnR5cWFkZHVjNFo3WUJYTlZhK0duWkJJVjNIVG5IVGVv?= =?utf-8?B?QldBU0pXZGpvU3Z0T1A0SkVSaGRpQmcvUTlyOFJUelpWZEUxWTBTckJUdVF0?= =?utf-8?B?YW12TCtaYngvYk5oUjFnUkRCc2ZSdDdKbC9ZcDlGQzF2VVo0czU3OFJob0k4?= =?utf-8?B?OGNXZ3YwWmQ5NS9iWVJwdWpPYW0wbElZYVIyMWJ3djdjK3BHTXg2VFkzRGt5?= =?utf-8?B?UG9RN3lTMVkzZXUzWTIvR2gzTzI3Y2FQWEU4YlJ3WDE0bWJVa1Z1ZHhTOGtR?= =?utf-8?B?UWpPeG1uVk1VU2FibEdVd0VLVTVzN2JIWEdka0FhbXhDaGM0TGxIMG4wcVpP?= =?utf-8?B?bzdHY1M4bU1iZ2dsMUVvUDlzN05veW11MXpuL21OZk10UVdjQU9rQ3dXTW52?= =?utf-8?B?QzUreUdHV092bldMVnpyUmdOM2t0TU83UVZlaEc5VTBUTVUwamkyaHBxTWRJ?= =?utf-8?B?NVBjeXlYRS9SOHpUZEQ2MDM1UmgvNXN2VzlkU1p0RDcrcHlIVHQ0MHVvM3BT?= =?utf-8?B?aS9lUjVkcEROTm1nKzJiWmJ6Q05VR2ExZ21zSUtBcWQrR0M0TDc2SFlpUDBj?= =?utf-8?B?QTV4WlJwOWJyRHhlUlBuYlY4aGJlMTB5UkdPc3Y3ZFZ1NFArVSs0TmR1RXc3?= =?utf-8?B?NzBlc1N2RXJRRzVVcjlyWFViaXRodURyWTNQYzV4NHg5V0ErdEFHLzd3V0o3?= =?utf-8?B?WjExdkhoZnoySHZRTEFxSHpBMkF3THBxL0NiWWFDdWczSUlqK2F5V2d3bDJ4?= =?utf-8?B?Kzc5L0szdGMvcXQvajFucm1XVU9ReFV1eFZyWmdhaHVHRVV6R1RWd0hXNFR5?= =?utf-8?B?b242ZGtrMFdZYnFaZ1l0NDJRV0NhWnRnYXBhRUlMWGs3TTIycTFjako1dWM1?= =?utf-8?B?SVFTYTZMaHlsc2JqcGkzTG5hM05xT2hHQVVLSHJ2Q2tQTHlPTE9FaHdyN1ZO?= =?utf-8?B?MlV1UHB6dzBwOWtZMS9WMlU1T0k3Z1RXV250bXpXanFXaHJzbzg5b0xXZkow?= =?utf-8?B?Q0ZwdGIzUHRCNG05VDkxNUlSaEVYY0dFR2ZlaDA2YlMzMklzVWNJK3g5czBC?= =?utf-8?B?N08rb3hYT0xMemVIYzNTYmt6SmNoMTU4N2lKdDMwVmVRUUNSRzJMdXorOHRX?= =?utf-8?B?VUhxQmpiaVhLRlIvMXdWdUlBOUU5T09MTW1mOXBDNHp6Z2R4T1IxaVk5WlVs?= =?utf-8?Q?0aSTiTQ9sEat8QmMZHpWYpx4Ivd6f/lpZbjnp30GCT6kp?= X-MS-Exchange-AntiSpam-MessageData-1: nkDFtnzb57uZew== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8b566a1e-1ad3-400e-ed29-08de7e7d601f X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2026 08:16:48.4696 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8XvYBYfOtyB8r9fHZ1n9Nipqt36rEayn+BjHjGkXrdSqgshmhGKE9kevBi/5hGQ/z0b/42UCw4KtQnWhyj53gA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB7614 Fix some inaccuracies / old doc comments. Reviewed-by: Zhi Wang Tested-by: Zhi Wang Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/gsp/cmdq.rs | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/cmdq.rs b/drivers/gpu/nova-core/gsp/= cmdq.rs index e0b096546d23..cbdc76a33a54 100644 --- a/drivers/gpu/nova-core/gsp/cmdq.rs +++ b/drivers/gpu/nova-core/gsp/cmdq.rs @@ -531,6 +531,7 @@ fn notify_gsp(bar: &Bar0) { /// /// # Errors /// + /// - `EMSGSIZE` if the command exceeds the maximum queue element size. /// - `ETIMEDOUT` if space does not become available within the timeou= t. /// - `EIO` if the variable payload requested by the command has not b= een entirely /// written to by its [`CommandToGsp::init_variable_payload`] method. @@ -711,22 +712,20 @@ fn wait_for_msg(&self, timeout: Delta) -> Result> { =20 /// Receive a message from the GSP. /// - /// `init` is a closure tasked with processing the message. It receive= s a reference to the - /// message in the message queue, and a [`SBufferIter`] pointing to it= s variable-length - /// payload, if any. + /// The expected message type is specified using the `M` generic param= eter. If the pending + /// message has a different function code, `ERANGE` is returned and th= e message is consumed. /// - /// The expected message is specified using the `M` generic parameter.= If the pending message - /// is different, `EAGAIN` is returned and the unexpected message is d= ropped. - /// - /// This design is by no means final, but it is simple and will let us= go through GSP - /// initialization. + /// The read pointer is always advanced past the message, regardless o= f whether it matched. /// /// # Errors /// /// - `ETIMEDOUT` if `timeout` has elapsed before any message becomes = available. /// - `EIO` if there was some inconsistency (e.g. message shorter than= advertised) on the /// message queue. - /// - `EINVAL` if the function of the message was unrecognized. + /// - `EINVAL` if the function code of the message was not recognized. + /// - `ERANGE` if the message had a recognized but non-matching functi= on code. + /// + /// Error codes returned by [`MessageFromGsp::read`] are propagated as= -is. pub(crate) fn receive_msg(&mut self, timeout: Delta= ) -> Result where // This allows all error types, including `Infallible`, to be used= for `M::InitError`. --=20 2.53.0 From nobody Thu Apr 9 07:04:59 2026 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11013035.outbound.protection.outlook.com [40.107.201.35]) (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 F25403CB2E1; Tue, 10 Mar 2026 08:16:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.35 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773130619; cv=fail; b=ONyXE0aEjkAAplMISLyJTwzntKuMkhrydMSZj3Je8RmM4slQlx+aQoOjwwo6dhpz5iilmnnKGFr0AeloskK/ff2CIzEnkTlD29D70tIgs2klOrZBjkBC6tw/32Yc9tcRGvaMGREFTQjan1YMtnsl5eb6AQKxhqK35FL+tbcYRRA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773130619; c=relaxed/simple; bh=46uqKRIBsTDPFGWwdvyIF0sAMLj/oje4SJyMV33nI0A=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=KWWZnEnjZhLTaetsBV1PFnTF+QPqppH1lXPyGmC7dhKh6ZrrdhSmhsMZW8q8a/pVQsVRaUgKFMf4kGbcy1tx6F30YD5D95rtGLY0byD2YsWURtLPvUm6dOs+SaUOPDRGf60uUVekRfsSt5BoT9h5PoZlVO6Zks6CAOwuJm4fKJo= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=ljoD1XYx; arc=fail smtp.client-ip=40.107.201.35 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="ljoD1XYx" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=w4rCE7uBvbhJs5XmvHeF6kvvO3oVwGZTEj49zhj3GcCO01WUk2xACeedIs7K2miNHvU4bhM0VMSRK1WsMGoSxQ6CIT457IA4hExnc4S69+sGmrKkMR+tS6Dt9QIwfzvJQ1udF5KFU23hPdTX4n3F/EC/yidxrwgQlVqx/iq6//dl/aFikuFTOUfYOZFu8RHGvVykXJpFDL0hZQQ4Vwm6a7kgJbmX7QAWigptEttsl97Zefsalf+LaFFEyMpuYoprcf05D/MJ9sL5y8PZfHv0gQdrSQOW90ZYuwuOQDPrrG2btKZWmJ+EH7M1ZPECpWuS+f9n2c8V2HSFfukHjAxPJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=vMPEm/x8/cGs8vzBEtrPPuSFwWczTT7Fm9pE7blVcfY=; b=ccGwEK3cx917nSMhCh3ihv5s0ScxViJm7WsT3KeEtQ6NLlG7EU5JRfTHbR2wBS1d1JYpofxq2Ig945s69aL2dnyvBK1tR499Te7Oty/cGme3jtbNlxwQX3TKUTKuLI39z8ZxCT+R3Fanws+JsDbVomVysy4JEnvsNmEopSIWD6DzNTu0fBuk7Bp2aSR6xVWbx+6A/3cnT+Nrg/W6rUcc5h3bXCd+lnb7nvT+fRN5+5lvSmA8sVFi/UZYuupaf66EFh05hvHRYuVJFvOA13Jqc0s4a06OBFkLfl+8XQJSswBfVeDD5CrHW43XGYZDP1dI6NlUVMvk/J2uoz2vgXiKbQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=vMPEm/x8/cGs8vzBEtrPPuSFwWczTT7Fm9pE7blVcfY=; b=ljoD1XYx33dwGrqC9PEzxDbh2aZjHZr8X48v8yISC5CbfW9eSRMKgsj0zO7sCn+ZeJd1I1ghI+Rz9ktjZzKd/bu4SWXIN7YxMmEDsHpL/OP4tDXZg7WL2pRMCZnSKapYAx5nBbgEs+sGTFVh4hayeqFj8WZps/x10nwxml3MJnwttE0Aa84FqGLsg0LS263mNQkRPpQAusPrgNvuZJxQFAXusNxgGWzYMm9h5Op3p0aWNSYwHGnAbYHjzNkg1RIxF5Mssh72MuqNK4BJMJ2Hw07ApVmGhHhGv728Ji7L/vi/tZ1KDhOOSPN2eu04UnBovjrfWDlci/+dmYyN+Ity+A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by IA1PR12MB7614.namprd12.prod.outlook.com (2603:10b6:208:429::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.11; Tue, 10 Mar 2026 08:16:54 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9700.010; Tue, 10 Mar 2026 08:16:53 +0000 From: Eliot Courtney Date: Tue, 10 Mar 2026 17:09:16 +0900 Subject: [PATCH v4 2/5] gpu: nova-core: gsp: add `RECEIVE_TIMEOUT` constant for command queue Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260310-cmdq-locking-v4-2-4e5c4753c408@nvidia.com> References: <20260310-cmdq-locking-v4-0-4e5c4753c408@nvidia.com> In-Reply-To: <20260310-cmdq-locking-v4-0-4e5c4753c408@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Benno Lossin , Gary Guo Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Eliot Courtney , Zhi Wang X-Mailer: b4 0.14.3 X-ClientProxiedBy: TY4P301CA0094.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:37a::13) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|IA1PR12MB7614:EE_ X-MS-Office365-Filtering-Correlation-Id: 46d8cc43-c88f-46f5-9032-08de7e7d62dd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|366016|1800799024|7416014|376014; X-Microsoft-Antispam-Message-Info: T5ES8HfLhc7AbClrYLJSDAw8A76Glhcsic3mQV4hzDBSiM9WIhm7dUztk2ayR+kUP3Z2TMM/JF43yVLA4ouIWBM6JCF99oyhd0LS/2QeCoFB+jv6qOa/S+gvJwTqdm9qxUTORaajfhE2OEkUiP7DKNyjVvhVwMUdF039quGPO1ooeQSQsvjzdLPfBcJanYOvs3bD7GwAzUga+y6X9Lqf1llgYVSBB46Y8dL/Ty3z4KlfDXLR2toBGfY51q8THkuopZc9kUX4uudZ7zMlpteMlNnwYaMzMSfi57IbldX75iPswVTdL/zX6fDEuOEtjFdbf8nycGggl0S8xD6D/5V0dkeyI0RW4Hxl7LfmzKDywpl73M9BDetmjRwcrPr2zlH5o1cQC5WbqDsuzyFoqxodJ4hRxNswCeky2Oecw8yqOwIhBb2elgq6U/6E6HuV7RjFHvZvWv0OMwRmyYD/0e6brcZnul1qNbLXZ+MybUXSNaoemoyjIewW1XBhgMfpFTWNSw+NKWIydozP6JqvqeZXjoZn83U5aYxDuhRtFXZzUhgw+vVEkBVh8ISZDk938Hi5OumFUxmS0t2iZgAaOyirZTjgauO6RLn/BTmWbqppqGSSJlaKLHN0nhJpqzQ2s11InR1SOBIIseFckhgJgnOEWWQygxQSuZBJoJtP7wuWD/QwI67eVJlHIPOyzPGO8gVozVHr/sgnRO637D5UcAjjAMCEhuCGU8gVJudGXYuNbOw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(366016)(1800799024)(7416014)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SUJvSE9lR1RUYjA3ME1DRGhISHY0N3I1Yk5wMzUvMlVRdmt4RW5CUjBZVVBI?= =?utf-8?B?djVkM2Q4Q2lMbFh4WTFYMEp6empVanR6WXlndzlHamtiZkdnVHFTeis1ODlp?= =?utf-8?B?YW9qMm1Xa3BQQ3VacC80N0llMytwaW03RFVHb1VtMyt1U2JkTUJ1aGdsVG1Z?= =?utf-8?B?RzM1MDFLMWtwZjY1S29DOG9ERnJwa3JXMmU5TmlwSWpZdTVHZHlXd0dXLzBy?= =?utf-8?B?K3licHlGci9INlkyMFduMTNJTVRoRUtqanFuZXh4NEpqdzQzeEV2OW9kRFlN?= =?utf-8?B?RWRWbkNqeUJEN09odXM4OGZsRDUyZm03dUY0U1lFK1FzTXVQYitpYVRrbU03?= =?utf-8?B?eVczcjJrZnJsckhwWVpCVTNFMHgyR1lhNXlaZHp2cHFOd2FERGFtcU1xbXk3?= =?utf-8?B?bHRLVGg4TjVWN2FycUwwb3RDcGtGeU5LUFZTaUdrb3ltdVRUS1hmbnF0Y3ZI?= =?utf-8?B?aFBYdlhMTkUrZFlXbkdYc1M0bi9UcDd3QWNCMmd0SC9ibFZLL0xiTkh2RmFp?= =?utf-8?B?T0pzRXBXaEVsT2NUYXA4MFpML2lrRXBrWGgzU0Z6QUFpalhFRHVkL1pCYlpt?= =?utf-8?B?bWxtWEdock5OemZ1Ni9oUFZzSFpGRmduY3hpendQVHlqN3VaSUExRTY5YlBa?= =?utf-8?B?YnMwd2c2NzZydDU4YzQxK0tvZlhObkFTcFFHVlpOUVl1Y1gxTDVGUDhCK05x?= =?utf-8?B?MGRwY2gySFAwWUxid1hVaE55U0Zid2syWG16QXEwTnJWVDdodW4wK1Vvdm1W?= =?utf-8?B?UXBiaHROOFhXMEcxaWxCRjdsTllNUFVyTHJ1dkZTcVN1QWxUdm1VUDc2cDZE?= =?utf-8?B?Wmp2LzBvaXNWQTdBNWpMOGd6V0F0VlhTeDNtbFBTRnBzZ1duTWZyZGx5WU9j?= =?utf-8?B?NEp3d1Nvc1ZiT1RFdXBhVjZPTDIxUURGMjVONkRKc2FabVZzcmtVTmxSb2FN?= =?utf-8?B?TzlmU2VheDd4V1E3Zjg0c3ljOGVWcEFlcGlwRkRsMk5rYmlMWHQvOEdNQ1Jz?= =?utf-8?B?djVDVjRwM2QvVlVVTDFtZlFsdEQ0dGNqK29XeUN2cUtpWW1tdzVTVTFhbzZH?= =?utf-8?B?V0pNa1p3dmVqZUtpZVNzaHZreTFUU0I0SDI4VVdjYmxCazhuTnVSaUtQaTFx?= =?utf-8?B?dHkvdDdmV05sVHpmeHNMcHh3Sy9rZmx2SDRQa3YzeEsyVXlkeUg0ZmtCRHFk?= =?utf-8?B?ajJUenFXRnBCTnJiUzBhMWt6aFIvdHhsV0FMQW1CV3FtTU56UkhEb3JmWmlk?= =?utf-8?B?UVd2aTk5L1NZRWxrc0wrQ21GZ3EweWtSMWs1Y2JiVUtXdVJWUjJ1Y3BzUDln?= =?utf-8?B?cWhtaTFpK2Z3MVhYOHExblZYS1JqN2lDWEovUWtJOTBhU3pjVXVTd2JKcnlu?= =?utf-8?B?MEMvejJzUkN1cHlVMWowYUdYUzZFVW5TUGppWkNWZ2RWZGNkaFlnN2FVYm93?= =?utf-8?B?TUZ2bGRFZUVYc1pHTnN5UWZ6bkhWQ2N6UnlGN1RXSmFraHFIYVNiQnBzM3Ay?= =?utf-8?B?VmZkc3U3cUkybEhoWDVqdEl3S0Z6b1dXTEZHTkd2aDB0Y0lhOXUxeURTVFlt?= =?utf-8?B?VXBoWUZ3M25ibk5ncEgxTFdoV1VlZitKUEo5cUttdzUzRnlwV24rUHV1OEF5?= =?utf-8?B?MkFBeDlVZ2JHYWg1UnZBZmhoT2VHdnhMZjJwbjAyYUhNcVZBL1FRY3hnMENG?= =?utf-8?B?YW0xWTdUMmJVeUtjcmVCNW96NTl1UTUrbDFlTURBSlRBSHZmY3JUWm1jZHNM?= =?utf-8?B?SWNuUmNIOGFocXNnWTREamZGZWtaQ3lIa0R6S2VaZjNmbFNkVHJPOXFOV3hW?= =?utf-8?B?b0dVb2tpK3ZvUlJrUmxlNm1Qd056TEVsSWREUkJEU3BzWFhMY2tzaVVaeGxZ?= =?utf-8?B?NnF3WFpIZWhSQTlreXVEeDJ3TVM5YkVxamhoVTJJV1VFTFdIc2RWbHJETkRs?= =?utf-8?B?VzVRRVZEUHVhNUtJdG9ia3cxb05jNUpZMFpYT1l2dkFlWWlvMEV6M1czRDE5?= =?utf-8?B?d2d4WEpoUTlqbFh2bFlXbk1ZaU9jSXRtRGphUm9vSHVJSkdXbDY5T0N4UStW?= =?utf-8?B?WEk2VkdRTElWTjNUZDkrb09IbHVHK1dmemtLRElqWVdQN3g3bDdqTEl5dm1O?= =?utf-8?B?NVJZc1YvR1FwRm55WjB1ZzkzRWNYbmNGTU1xbFpTQVh6TzlHb3V3RGltOWxk?= =?utf-8?B?ZUltYnU3L3MyZUo2TWYzTGtFRnFjSjlVLzRCUER5VVFPNUFpNEJLeWxqV3di?= =?utf-8?B?ZXZXam1HaTQzbG80dkcyeWVMSHU3N2ZBNnR0ZUpYOGxmdG1MVGgrS1ZkaWFq?= =?utf-8?B?anMrVG9TZU5SV05CdFZzcTJSUlJEV0RKT3F3RjFDSURsS1RpWjNaSFpzNC8v?= =?utf-8?Q?os0wKxTWrkJtdZRFqUxUW9J96by1FbzWD7SBBPJS0zrIH?= X-MS-Exchange-AntiSpam-MessageData-1: 4Pwnusg2lvnvDg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 46d8cc43-c88f-46f5-9032-08de7e7d62dd X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2026 08:16:52.9714 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: WW/LFk9Y0yqDRvQSBm64CUYrKRJVkkchh8u2oMHdHRjAXXlKJAJSZylLg1bBIC40GICZPFAGhZxRAzyargdpHQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB7614 Remove magic numbers and add a default timeout for callers to use. Tested-by: Zhi Wang Reviewed-by: Gary Guo Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/gsp/cmdq.rs | 3 +++ drivers/gpu/nova-core/gsp/commands.rs | 5 ++--- drivers/gpu/nova-core/gsp/sequencer.rs | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/cmdq.rs b/drivers/gpu/nova-core/gsp/= cmdq.rs index cbdc76a33a54..08ac3067f1b5 100644 --- a/drivers/gpu/nova-core/gsp/cmdq.rs +++ b/drivers/gpu/nova-core/gsp/cmdq.rs @@ -496,6 +496,9 @@ impl Cmdq { /// Timeout for waiting for space on the command queue. const ALLOCATE_TIMEOUT: Delta =3D Delta::from_secs(1); =20 + /// Default timeout for receiving a message from the GSP. + pub(super) const RECEIVE_TIMEOUT: Delta =3D Delta::from_secs(5); + /// Creates a new command queue for `dev`. pub(crate) fn new(dev: &device::Device) -> Result= { let gsp_mem =3D DmaGspMem::new(dev)?; diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/= gsp/commands.rs index 8f270eca33be..88df117ba575 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -11,7 +11,6 @@ device, pci, prelude::*, - time::Delta, transmute::{ AsBytes, FromBytes, // @@ -165,7 +164,7 @@ fn read( /// Waits for GSP initialization to complete. pub(crate) fn wait_gsp_init_done(cmdq: &mut Cmdq) -> Result { loop { - match cmdq.receive_msg::(Delta::from_secs(10)) { + match cmdq.receive_msg::(Cmdq::RECEIVE_TIMEOUT) { Ok(_) =3D> break Ok(()), Err(ERANGE) =3D> continue, Err(e) =3D> break Err(e), @@ -235,7 +234,7 @@ pub(crate) fn get_gsp_info(cmdq: &mut Cmdq, bar: &Bar0)= -> Result(Delta::from_secs(5= )) { + match cmdq.receive_msg::(Cmdq::RECEIVE_TIME= OUT) { Ok(info) =3D> return Ok(info), Err(ERANGE) =3D> continue, Err(e) =3D> return Err(e), diff --git a/drivers/gpu/nova-core/gsp/sequencer.rs b/drivers/gpu/nova-core= /gsp/sequencer.rs index 0cfbedc47fcf..ce2b3bb05d22 100644 --- a/drivers/gpu/nova-core/gsp/sequencer.rs +++ b/drivers/gpu/nova-core/gsp/sequencer.rs @@ -358,7 +358,7 @@ pub(crate) struct GspSequencerParams<'a> { impl<'a> GspSequencer<'a> { pub(crate) fn run(cmdq: &mut Cmdq, params: GspSequencerParams<'a>) -> = Result { let seq_info =3D loop { - match cmdq.receive_msg::(Delta::from_secs(10)) { + match cmdq.receive_msg::(Cmdq::RECEIVE_TIMEOUT) { Ok(seq_info) =3D> break seq_info, Err(ERANGE) =3D> continue, Err(e) =3D> return Err(e), --=20 2.53.0 From nobody Thu Apr 9 07:04:59 2026 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11013035.outbound.protection.outlook.com [40.107.201.35]) (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 5DD6C36A01F; Tue, 10 Mar 2026 08:16:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.35 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773130621; cv=fail; b=RI2UxljaN3EmP7FvO41STq4VdSFwYeMCDAIFm89HuEAm+Ds7YXezAg5bqNXtGCVUWB+t5dNIotI8jvkePiO6ism22WLfdcPg7h/hkNKzzM0A79ic9S//AqYXUMEbmRI8ZWwyzKJFNrlkgeiiHQh4VbW7BnJ9JbyIJdVKYccfvCc= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773130621; c=relaxed/simple; bh=Ch03aK3PuE97zDo/rDsbSE7zK0p2tDfLuXuQZBshrAw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=XP5NjAXP3NO6G2IwzoTmVFuibZJ1wfdCdkZTimSuQgSphBJ9rpxvU92k55hhFX6wsInkQDg1rZ8abGqa6RlaqZ+kCcThDBLTMMBYSjFPKHDAwA14cKeFVuSyXTRE8mqtuQc5HxdVPbQ02F2GjLK3I6DWtrCxXbNImHkOSpEm9k0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=BkKXjYIs; arc=fail smtp.client-ip=40.107.201.35 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="BkKXjYIs" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GurN97h0JSryfE8mZy6SFN+QdFBQ7g+OzSJ5eHF1kr7dE273l+rrsRD1NeG0+oTYJnWl9eNCayQCVP+ZiN5te2Pn9iFo+pgqCziHgOouV41cKx/ugw8tmxG5vy7r/NAO6nRwz1UerIzEjh+RHyIFv18eixn6S7hMdJDZdx7hGoKGG9St/tl80i0z53Yr+5YiDW5lEyR4tCJMBvElTZFq6xwr82Zn8e+ZHdITYYiek4xoroJx6h8ewOE2dJ42jgrI9CGrlEB+lA2eTS1kZrM6jL4G4xyIWYEAUEr+Iw3mugPDCW0I83c+S+AnXE8/Qh7LMoz5pIskJOtVB9ajVgMNOg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=38DF3dR/rn5xz5WgdkXVlyjoOfmXuyqzamWhjT3bUYA=; b=dnZywwMs+V2MHFx4LY9J1z5weYknh3nnG+X062dLNcwNZh21pwzccOacZDfyEXmqWl1eWdW0EPjvvVP/eeAXpAfYKxT+7i8ADUQHTIs761zaS6Wm8uUNENm/vsQ69+jC/u0oU5Qv4MXzPXZnEXwkIkhPJJ8na8gNO0C76dWUIjaogahq0noau2hsetwIiZVC8C155E52U9rwknBPJBdaPdF5hD1IW2VATTjmt57k/v+V0uehg40M97SPPY9BceSFSkfKEC0kscU3F8tTiquVK9O2mTmgX/dCIKMsKwTeQmdwXEsZEf2CKjfh8LHGpUMJFx5mXAHVqbPtfyycgxD97w== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=38DF3dR/rn5xz5WgdkXVlyjoOfmXuyqzamWhjT3bUYA=; b=BkKXjYIs3EWnTJOpnK61PjjUOYPXxXpG8535ihO2k/Cfrxt6r3/2/5naTX5o/RhW8J2LMCm3Mev1Z7yVe0dVzRVIUDtlGcqtrO4u4ub4WucB3oOpus2njV21UMu/1rWN5l71Qgawjur9WWGrPAZJmphVT7iXmfXkY1xY0hxLgNnAI777l4gpv2WnkIuy3dv7sqHZfr7m5/+lIQtjYySl57y2xkMnCoBSw+C1GNJOrtMGp37s92JvSfOgFpi1K4IPN6w/AMWlEXmQFiEy4/CtZMjP2KsE4FH2/JeLJ++KUC1feP/ijAOkHSsxFLKg+IFsDa4vaaBzyfTCa3yvohc6xg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by IA1PR12MB7614.namprd12.prod.outlook.com (2603:10b6:208:429::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.11; Tue, 10 Mar 2026 08:16:56 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9700.010; Tue, 10 Mar 2026 08:16:56 +0000 From: Eliot Courtney Date: Tue, 10 Mar 2026 17:09:17 +0900 Subject: [PATCH v4 3/5] gpu: nova-core: gsp: add reply/no-reply info to `CommandToGsp` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260310-cmdq-locking-v4-3-4e5c4753c408@nvidia.com> References: <20260310-cmdq-locking-v4-0-4e5c4753c408@nvidia.com> In-Reply-To: <20260310-cmdq-locking-v4-0-4e5c4753c408@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Benno Lossin , Gary Guo Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Eliot Courtney , Zhi Wang X-Mailer: b4 0.14.3 X-ClientProxiedBy: TY4PR01CA0112.jpnprd01.prod.outlook.com (2603:1096:405:378::14) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|IA1PR12MB7614:EE_ X-MS-Office365-Filtering-Correlation-Id: b6a3d1ad-3d58-437f-a4f1-08de7e7d64fd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|366016|1800799024|7416014|376014; X-Microsoft-Antispam-Message-Info: KiNmOigQvW3rzImecUE+8TgqYuCz9bq16KS8CPxfEpVv3W8T+Azrcym4hrFP6RN0Ielj2pgJJPor3Ekte/ERLkYzLUmdvRKRMTMu3vkgvgPiq9iZEpdwYpFfRn9uoLDjh26rOVdlb4RWOJGR1HXh7QfOUz5s3X6arQmfwXFmuqHDTJGijtKCqwCFsiKtz4HbrB6O126nvPbiQijaxWjg905Dnl5YSaiitTxXLXHpm3QuL/+Ndd7+nRjftzzVraSKMF7FFLa3dFcAE6vIOOwL88XZr3PDpr9T4EtqD+j4wshhMq20NWgOnrNFA5YuhxjMUEuOaYCNsLbWPfn4blsP4gH/z87U2kOJ7e0TsmlYSdfgADDrVBaEoKbkg74wL2GSd9pIxoSDZ1vFFTtNRznKpZrCcn88bvZ/PfmLfmCCciWpwUq0a6usWjvYMPsnHLt8m6DtPBMwATTHuQAGz9AcYULhtAMyJv8b7teC5rrrGoQ0u9US8kfA/cNtRe6KEuTvP+sChdJuzol7jM4cbsz1eiZugDmtYPByFjY22NPTGnKTsCZgkfcpdvnXx6/KECmx1vAcvVFYt9cA7NB2Qv4CwdEjW72ilXrCgrkjBJ1RYzkQDfF6wXMlX0bFgZ5NPdSJe9r328JCSEirafVJ0J8lHkjfNTsXo+biphk3RHDu5cb7VqkOb8qKAlhkHRSMCkJs7c1/CkEJemo/xK28y/sZp6iv0JY514AxZI7bzXD6rzw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(366016)(1800799024)(7416014)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TG9BZ2Y2ZE93VE1zWngzdG15NEVnRmE0TVhCdG1BcVNQYzN5a3JlUEczbE1O?= =?utf-8?B?czY0UjFJbGdPRUVSQVVHWm9xVmdQZGpjUXREbmNyR3RuUHkxcGNiZk5QYnd5?= =?utf-8?B?V2VIQ0pVaTlpcnpOaHIrRHFxOTJ1NGp0dHU1dzF1WG5aZUxUaWNGSDRET0U5?= =?utf-8?B?RGhjMmV1dnRGdGhlZkhWOTZwMy9KVkhJVXRlNlRJcUlFZXB3U2l5Y3ZTdUdD?= =?utf-8?B?S0RUR0Q5ZzYrVWRMTUExQXNXVTE5STlDL0pjV3crU25wbmQrZStwek9lYVBP?= =?utf-8?B?d1NjVSsvcVduKzlSSTN3RjYzd0ovVFJuVHVjaE43NUtmM3U5OExob3IzdVVP?= =?utf-8?B?ankwSFNMdkRvbHRWMGUzODdRbFFGNGEraTcxMHVvaVE0em9JVlJqc3d0ZXpY?= =?utf-8?B?d0J3Ky91MGtwNFVxbXFKQTV0Tm51Z3FRR25VT0hsTmhVeDZlQWFiS0YyMVNv?= =?utf-8?B?eldtUndkdEl1RnhCSjIzY2NLd1NMUWkyNTgvR1NUZ21pS1J3SUhOdXNSbEM0?= =?utf-8?B?ZG9UZmlLQmFDcko4all6Q1pBTmQvMkpGc3AyRXYyVXh0MFZZYkVxQVZTM3dE?= =?utf-8?B?aDhkY1BBM2QyandjQ0pzMTBZSEZHbTJlNW1sQ2FpVjhJaG94OXZlamZPNHp1?= =?utf-8?B?NEZhVmpBZmVLbGYwNjRxa2ZuQStidTNKUTd4L1Jwb1d5UGNYRUtrQldIdzJo?= =?utf-8?B?YXZEOW1sbVdnOVpibDZ6RUR1WkpYT0NGY2hBRjhIZW0wZE5zSWY3TmlxaTJl?= =?utf-8?B?K2pzYkROcG92bGZTaFdPQ2VORk1walZqeER4QVNyd1FwQmprSVlvNGZESVhz?= =?utf-8?B?djVJUCtWcXNreSszamtJQnVSNk5zTU9VUDNzL0ZEemJobTE4RDVkRzRqVVlH?= =?utf-8?B?d1g3S05tL0IxcXB0NFZHTDc2OXBJcVRiMitQVzB6ZGErT1lhU3AxWXdBdWta?= =?utf-8?B?dXFCcGhsZGJwMlpMV2tRL0wrRXBQNGptc3BQcFM1dTZUMkxFVEhUUm9qNzln?= =?utf-8?B?QkNnYStUUnBIazZ4N1VDcG5SOTdQOG1NdGVGdUExZ0Z4RW9NcWMxYXhtQzJi?= =?utf-8?B?aWRTSXFXSjUxSnh2Sk5aYmhocVZraS92MU5IdmJJWmt6eTZLdG9qVWhqQnl1?= =?utf-8?B?T3dGSytRR3hFZEd2UjBQeWxSUUtrWHBXUUtoVFd1MWExOEdoL3JuRFJZTWlz?= =?utf-8?B?cm5mc0Q2NzYxVktTVmxXZkRlcmRFWXp2d2RDRFZJZGhkWVgzQnJadTlGMWZU?= =?utf-8?B?c0Zia01CTVNaZS91ZzJlK1hKZDBoUmdYQ1ZDbWk2aHh6Kzg1TnN1NklxUW1u?= =?utf-8?B?K0l1Z1dhWFdDelNLbXBzNFp6Ukxub0pvTGJHT2xNbXNrNUxYYlljMGlKKzA0?= =?utf-8?B?R1lBaTJyUHFhcmoyb1V5MGljMjQrVlplbTVodjJEaVVTb1NOVks0N2Z6TzZy?= =?utf-8?B?RkFhSHVSaFJOLzBkNU03YkpudG1QTVN2d2ROZEVqb2JqVTh0Ly80dzZKOFZp?= =?utf-8?B?ZW5kVjVmVjEyMXJTdC9odmdkSlZXdjZCUW9EL2VQbFcvRTRDbjFOSmFWcysz?= =?utf-8?B?V3BrUWVwTFpjVC9wNStsalVSc2pvY0JURENwOTJhc1o3bUNSaDloNmtCYTRI?= =?utf-8?B?d3g0OEpUYllhemFKVVN2ZlhaRVpBSjRmWmE4UHhEM1NwdnJ5U0hpT1diVlhj?= =?utf-8?B?OU01TVFURGtjKzlFZzFTODZ0NHdmMi9Bd0NQUWFRL2c0QTB5U3R0UkNmaXlo?= =?utf-8?B?alZETW83ZDZBekVCVjlzSUpaTnZBZWdGWStwcWlYU3lDR1hSVEVlUFRmaVpX?= =?utf-8?B?ZTgzbStLQjZRU2k1d3BWKzNvblBhbHQ5aGlMODdFZGZGU3VvdUNtSTNaWGhU?= =?utf-8?B?NUlra0lDcmlkNS9TdWt1NHlLcjRJTWdldHRPM2VObWFiZUd0QU5DbC9PQk8r?= =?utf-8?B?UlJRcTExOWxycURjV3hiY1BXNnE0QTlWNHBBV3NSbDJ6WmozZHhjUzgrdDFE?= =?utf-8?B?V25tY2VKc0k3YzhwbFhXMjhkNjJXcnV2YUwvU2JKcUdYMjNLVkVqSlowdDAr?= =?utf-8?B?MVJoSXQ1YXdhQVIyV2dUaUI5N3hzNitwS3lWUy9kck9xTy9mZTcrSTZBdnZw?= =?utf-8?B?c3B3OHgrM1R0YUtZbWNlVXNkbmE2eHdWQ0JKL1puTHBvK2JBU200NGdYbzVW?= =?utf-8?B?Qzl2cVFxRFgzdU9rTWxOYk1iVU5OR3g4MTNNYUhQR3dzWFJrUUNoNS8wVGdV?= =?utf-8?B?bXhmLzBkTXA4ajBTWXF1c0V5YUU3UXpVQWhOa1lrREpHRjIzdU5SaHhUUU5J?= =?utf-8?B?Q1hYWEg5ckQySVpiVnpjRjRjcU9OdGpPbmUrT1RPM05vUTBiYmtuaFUrNDZ0?= =?utf-8?Q?3eaNQLM67Vw4JIfVy8OhxAZX8BtFfGfYy+OnRQS0P0Jdw?= X-MS-Exchange-AntiSpam-MessageData-1: Hx7fcMKOvjzUvQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b6a3d1ad-3d58-437f-a4f1-08de7e7d64fd X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2026 08:16:56.4622 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: QaBuhg0ZHMX+WFYcUrO5MjMfkKBWXr6ob+ITsYCXBz/5rA1zXFZzCUGFNB/4qZDFoyC78ls+taKkGgeCKzRapw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB7614 Add type infrastructure to know what reply is expected from each `CommandToGsp`. Uses a marker type `NoReply` which does not implement `MessageFromGsp` to mark commands which don't expect a response. Update `send_command` to wait for a reply and add `send_command_no_wait` which sends a command that has no reply, without blocking. This prepares for adding locking to the queue. Tested-by: Zhi Wang Reviewed-by: Gary Guo Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/gsp/boot.rs | 5 ++- drivers/gpu/nova-core/gsp/cmdq.rs | 59 ++++++++++++++++++++++= ++-- drivers/gpu/nova-core/gsp/cmdq/continuation.rs | 8 +++- drivers/gpu/nova-core/gsp/commands.rs | 16 +++---- 4 files changed, 72 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index c56029f444cb..991eb5957e3d 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -160,8 +160,9 @@ pub(crate) fn boot( dma_write!(wpr_meta[0] =3D GspFwWprMeta::new(&gsp_fw, &fb_layout))= ?; =20 self.cmdq - .send_command(bar, commands::SetSystemInfo::new(pdev))?; - self.cmdq.send_command(bar, commands::SetRegistry::new())?; + .send_command_no_wait(bar, commands::SetSystemInfo::new(pdev))= ?; + self.cmdq + .send_command_no_wait(bar, commands::SetRegistry::new())?; =20 gsp_falcon.reset(bar)?; let libos_handle =3D self.libos.dma_handle(); diff --git a/drivers/gpu/nova-core/gsp/cmdq.rs b/drivers/gpu/nova-core/gsp/= cmdq.rs index 08ac3067f1b5..b631daae5642 100644 --- a/drivers/gpu/nova-core/gsp/cmdq.rs +++ b/drivers/gpu/nova-core/gsp/cmdq.rs @@ -51,10 +51,14 @@ sbuffer::SBufferIter, // }; =20 +/// Marker type representing the absence of a reply for a command. Command= s using this as their +/// reply type are sent using [`Cmdq::send_command_no_wait`]. +pub(crate) struct NoReply; + /// Trait implemented by types representing a command to send to the GSP. /// -/// The main purpose of this trait is to provide [`Cmdq::send_command`] wi= th the information it -/// needs to send a given command. +/// The main purpose of this trait is to provide [`Cmdq`] with the informa= tion it needs to send +/// a given command. /// /// [`CommandToGsp::init`] in particular is responsible for initializing t= he command directly /// into the space reserved for it in the command queue buffer. @@ -69,6 +73,10 @@ pub(crate) trait CommandToGsp { /// Type generated by [`CommandToGsp::init`], to be written into the c= ommand queue buffer. type Command: FromBytes + AsBytes; =20 + /// Type of the reply expected from the GSP, or [`NoReply`] for comman= ds that don't + /// have a reply. + type Reply; + /// Error type returned by [`CommandToGsp::init`]. type InitError; =20 @@ -610,7 +618,7 @@ fn send_single_command(&mut self, bar: &Bar0, comman= d: M) -> Result /// written to by its [`CommandToGsp::init_variable_payload`] method. /// /// Error codes returned by the command initializers are propagated as= -is. - pub(crate) fn send_command(&mut self, bar: &Bar0, command: M) -> Re= sult + fn send_command_internal(&mut self, bar: &Bar0, command: M) -> Resu= lt where M: CommandToGsp, Error: From, @@ -630,6 +638,51 @@ pub(crate) fn send_command(&mut self, bar: &Bar0, c= ommand: M) -> Result } } =20 + /// Sends `command` to the GSP and waits for the reply. + /// + /// # Errors + /// + /// - `ETIMEDOUT` if space does not become available to send the comma= nd, or if the reply is + /// not received within the timeout. + /// - `EIO` if the variable payload requested by the command has not b= een entirely + /// written to by its [`CommandToGsp::init_variable_payload`] method. + /// + /// Error codes returned by the command and reply initializers are pro= pagated as-is. + pub(crate) fn send_command(&mut self, bar: &Bar0, command: M) -> Re= sult + where + M: CommandToGsp, + M::Reply: MessageFromGsp, + Error: From, + Error: From<::InitError>, + { + self.send_command_internal(bar, command)?; + + loop { + match self.receive_msg::(Self::RECEIVE_TIMEOUT) { + Ok(reply) =3D> break Ok(reply), + Err(ERANGE) =3D> continue, + Err(e) =3D> break Err(e), + } + } + } + + /// Sends `command` to the GSP without waiting for a reply. + /// + /// # Errors + /// + /// - `ETIMEDOUT` if space does not become available within the timeou= t. + /// - `EIO` if the variable payload requested by the command has not b= een entirely + /// written to by its [`CommandToGsp::init_variable_payload`] method. + /// + /// Error codes returned by the command initializers are propagated as= -is. + pub(crate) fn send_command_no_wait(&mut self, bar: &Bar0, command: = M) -> Result + where + M: CommandToGsp, + Error: From, + { + self.send_command_internal(bar, command) + } + /// Wait for a message to become available on the message queue. /// /// This works purely at the transport layer and does not interpret or= validate the message diff --git a/drivers/gpu/nova-core/gsp/cmdq/continuation.rs b/drivers/gpu/n= ova-core/gsp/cmdq/continuation.rs index 2aa17caac2e0..05e904f18097 100644 --- a/drivers/gpu/nova-core/gsp/cmdq/continuation.rs +++ b/drivers/gpu/nova-core/gsp/cmdq/continuation.rs @@ -6,7 +6,10 @@ =20 use kernel::prelude::*; =20 -use super::CommandToGsp; +use super::{ + CommandToGsp, + NoReply, // +}; =20 use crate::{ gsp::fw::{ @@ -63,6 +66,7 @@ fn new(data: &'a [u8]) -> Self { impl<'a> CommandToGsp for ContinuationRecord<'a> { const FUNCTION: MsgFunction =3D MsgFunction::ContinuationRecord; type Command =3D (); + type Reply =3D NoReply; type InitError =3D Infallible; =20 fn init(&self) -> impl Init { @@ -144,6 +148,7 @@ fn new(command: C, payload: KVVec) -> Self { impl CommandToGsp for SplitCommand { const FUNCTION: MsgFunction =3D C::FUNCTION; type Command =3D C::Command; + type Reply =3D C::Reply; type InitError =3D C::InitError; =20 fn init(&self) -> impl Init { @@ -206,6 +211,7 @@ fn new(len: usize) -> Result { impl CommandToGsp for TestPayload { const FUNCTION: MsgFunction =3D MsgFunction::Nop; type Command =3D TestHeader; + type Reply =3D NoReply; type InitError =3D Infallible; =20 fn init(&self) -> impl Init { diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/= gsp/commands.rs index 88df117ba575..77054c92fcc2 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -23,7 +23,8 @@ cmdq::{ Cmdq, CommandToGsp, - MessageFromGsp, // + MessageFromGsp, + NoReply, // }, fw::{ commands::*, @@ -48,6 +49,7 @@ pub(crate) fn new(pdev: &'a pci::Device) -= > Self { impl<'a> CommandToGsp for SetSystemInfo<'a> { const FUNCTION: MsgFunction =3D MsgFunction::GspSetSystemInfo; type Command =3D GspSetSystemInfo; + type Reply =3D NoReply; type InitError =3D Error; =20 fn init(&self) -> impl Init { @@ -99,6 +101,7 @@ pub(crate) fn new() -> Self { impl CommandToGsp for SetRegistry { const FUNCTION: MsgFunction =3D MsgFunction::SetRegistry; type Command =3D PackedRegistryTable; + type Reply =3D NoReply; type InitError =3D Infallible; =20 fn init(&self) -> impl Init { @@ -178,6 +181,7 @@ pub(crate) fn wait_gsp_init_done(cmdq: &mut Cmdq) -> Re= sult { impl CommandToGsp for GetGspStaticInfo { const FUNCTION: MsgFunction =3D MsgFunction::GetGspStaticInfo; type Command =3D GspStaticConfigInfo; + type Reply =3D GetGspStaticInfoReply; type InitError =3D Infallible; =20 fn init(&self) -> impl Init { @@ -231,13 +235,5 @@ pub(crate) fn gpu_name(&self) -> core::result::Result<= &str, GpuNameError> { =20 /// Send the [`GetGspInfo`] command and awaits for its reply. pub(crate) fn get_gsp_info(cmdq: &mut Cmdq, bar: &Bar0) -> Result { - cmdq.send_command(bar, GetGspStaticInfo)?; - - loop { - match cmdq.receive_msg::(Cmdq::RECEIVE_TIME= OUT) { - Ok(info) =3D> return Ok(info), - Err(ERANGE) =3D> continue, - Err(e) =3D> return Err(e), - } - } + cmdq.send_command(bar, GetGspStaticInfo) } --=20 2.53.0 From nobody Thu Apr 9 07:04:59 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012004.outbound.protection.outlook.com [52.101.53.4]) (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 55B243D7D79; Tue, 10 Mar 2026 08:17:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.4 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773130625; cv=fail; b=aBrzo7bu2FA6n0PZd9N6THF7aoS56HbfYSlGfBKt+63+NL+jifPRGyRk9bDTuFfk8XWDF7YPp8ujn8jBZ5tNKMXtex0rBWj9nT6bpzXkEMnu3jkf0N4lYriqGYvKa55Ml53qIKVd1YNhpdCD2IfoHupa8RQH6gx9tSFcGbN/8iI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773130625; c=relaxed/simple; bh=oT5Rf4+yI9uFn/X2JhBJFy56p4YLiqPmobze5Y2uxYY=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=F3sDSvo1wE57MU9kaWT5IiDu5MT82Iv+2PNVZJzSbNkAps97Lhq1CfFQWaQpO6fLu6FC5AU1j5OkNEMZz0LLquYJudJYEpGV30BE4r4YsQ3KbIg4cYKTVN1VFJSx2RiaTL0HZt0tXyK/BlYrJH2ilXE0+WYC812LYoIW2FidtI8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=lFJpX7mX; arc=fail smtp.client-ip=52.101.53.4 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="lFJpX7mX" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=uGjC3Ne3/Pw6+9Syn4sCzn5pfr4XxMRcTAdfJ7S0H/85XLe8lkpWWwRzyxb/zrwAkyP0ie5IazCVXc9QWB2nHoW0oGYmpTI6y7RKTERHkR17H51uoTnV4J5PQfHGARWq2pcrMLhP+UnQ8a0jaKQxDrKapt7K64jbbLGqV0m2OjIDCNXRUz3MFfOrTUQXRxDGJVpCxxHO21gggX5K8NgbznkwoZogXTvSY8F1le5uSVk+MJTIPJNAW80FcRft68d3pOtyAO8DGU4497Hu33hazGtQ2NIYCPnq82Div/H4vyz/dDVcIIp5yqd3zBg1Hd8+3277u0f9I48Xntsh15BR6g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=BdqambEv260iikzFGz7EvvaL5qF4ZK7MRAfGo9B3TAQ=; b=SJobKZD1H4U+4qhidSAlH28r4reguxJI19PXAtkp9RlGRFfz1kU64tgB9lC0Ndfl8BqeuFhmX1q7WtTVCo6ktttAu1U4XnjaZs/gmPC8olH/PzBlN2rTZitih4clUP+zeW9q0ipZN1uYEj0w4Ujeqpf8aCuxhiUyix8mZlp+k/AMiVdfMANi3vs/fPxK+X6E9ikdfXD++WKIp/ruPoUqsqFr4JguTvZIFVpPfAKJCsYvXAkUNfH7Em8xaFLeRtTag9ojWrecT0A8HY7ZQ1ltROHhc5vGnjH8kbDw2dB/gLaJO/cCkrqdm1iSZZkEhYMUxFWwO13fBvl458+ibSCD2Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=BdqambEv260iikzFGz7EvvaL5qF4ZK7MRAfGo9B3TAQ=; b=lFJpX7mXGOLpa+Tga9r7IJiPTxJlqelDGo6bycaSw4jrS6Df4+yJx6HOY1rk4fuq6/ktfnUh/xH6RUX82bkbqvCTTwNegJ+D9TiuuT6oHNBVh++breARsT362aSze2IS8hNapa9iuOoPl+zA3/WhdZHy6gglx0LZJO5/CY48+jmYikvXW+v6dpS5I/BToj6y4St5wUAfEeblL2+NloSPLGSzb85FJFtHpSdxv56AJ2BDIB/8EO8ke7se9c7ShJTkTslZWAX+aQDIdXqV2lRU1tC7n2EhPulAa77Jfo3dyzqrZ6TvlU5dgywoZZR3wwtiayR+S2WlC5vbXXVuI99D/A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by IA1PR12MB7614.namprd12.prod.outlook.com (2603:10b6:208:429::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.11; Tue, 10 Mar 2026 08:17:00 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9700.010; Tue, 10 Mar 2026 08:17:00 +0000 From: Eliot Courtney Date: Tue, 10 Mar 2026 17:09:18 +0900 Subject: [PATCH v4 4/5] gpu: nova-core: gsp: make `Cmdq` a pinned type Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260310-cmdq-locking-v4-4-4e5c4753c408@nvidia.com> References: <20260310-cmdq-locking-v4-0-4e5c4753c408@nvidia.com> In-Reply-To: <20260310-cmdq-locking-v4-0-4e5c4753c408@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Benno Lossin , Gary Guo Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Eliot Courtney , Zhi Wang X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYCP286CA0287.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c8::9) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|IA1PR12MB7614:EE_ X-MS-Office365-Filtering-Correlation-Id: fc45e83c-cc8b-408f-c40e-08de7e7d6764 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|366016|1800799024|7416014|376014; X-Microsoft-Antispam-Message-Info: aGCmKutfdmdGt6kUNHnX82WAxfVvPWOjL00FkKc/ywoNvDSVSIV6SfOrBNt1kj5DTBm9z6FGrXq90l7cCrfSS8s7iIWALPOnzm2iNmmxUlSkpCaM9bODnISPdePLxmrhot5oSD+9KozZCWIlW77g6IgMAREKe0aK5ZZqAjGG1Bcuq+QGGNgG5tsLyIqDrro5KKjSeabo4vvTxhqCB1IXPnYev2CVAVqMxU59kbiM/y4CFKPSPMARWU8Wl9P/snaWjmp0c7CYDi2w20XYp/ofn/FJ/9M+eRk+T0pVACuhNJHjzBUDzl8H1NH2owfnEoDgfo9jp6Gwt5fs254cWKakzhxKjpOGNLXuExbJd4G0EjziIddUn9BKFZ5yF2cV5lhCA+JPME30nb6FxXlhhC5zmJ7uCfjBhoIc+YEMSqZQa8OlSPiQBZMKozu6aWCyHnVNdTmF50NIBc+bxffytkvuFQFU+Kfjpn7QrsV6E60W369YxzvzQNJBb3wKuXgV9A9XtCopUpmumH9ZYOQJlN8CsUY7gMvxEHDCc0oxvADYVEjQlXqyIooGKizvs0Pppaus17Gj+ayalkNdwLxRuQaXgPCZWmFUZugE5WCq8ZxRU7jF3f4YzGAzQ2wlmUBC/lRikDlVXTFJGIzi2OPxUGz3NjU2fxFSefPBcPzTWSyw6m3cnJmsTbQQiNed2F0lwSDDChDAj+R25PdDvpxseNNNJH/Hw7V/L4afE0/0DrIHpM8= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(366016)(1800799024)(7416014)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RmlBUkhlRm81dExtZ1pNR09nQ1BkWEJ5NTdHNzlmY0RRMlFGNjdQL1VVS1ZJ?= =?utf-8?B?WHZEWVFVUWRyeWZEMEZpOWkxdXFuM0wvSmpYUkM4Q0VhS1pDTzcweWdyb1VT?= =?utf-8?B?NnQrTU9WNVU0RXdjemZxdHJTVnNIY01idWxGaDUvUVpBOFROODAzaFFPWlNl?= =?utf-8?B?UDZXcjFqbVBiRjhNVnZlZG5sZlBwWUdSZDNFOXB6NjZGOEIrcUhkTkRGTEZu?= =?utf-8?B?ZlZnNTBLSTIyS25LdHFjYkkvVUdpQmg2aFEvMjIrQmNSQm1CZ2w0UXl4a3l6?= =?utf-8?B?VDBxVHhMams3V1AwL09YK0xJUDdiS0RGaFdCWXJ0b2psSDFTSC9tV0VsWWR4?= =?utf-8?B?RDdUbllCa1R5TDUxWjE4bCtvQkRmZ0Vkc3lOdGYyMm90NUZZNVo3cjBDU29U?= =?utf-8?B?V3g2SDJzZ0ZRVlZrRzlCVXVUU0lBYmxuTjV3aVNzVCtodTQ3NGwxaHZQR3Fl?= =?utf-8?B?ZUlPRW80Unc4TGxPak40MVRwcXgzN21PWXdKRWluWlhRREk4M0hnOXpMWTBE?= =?utf-8?B?dXZXdFZiSk9sdDNUckhHK21Cc1Y0OEdCUUJUZisveGpPWkY2MDJnbDcxMXN2?= =?utf-8?B?bm5aZU1xYnJ4UFJZditoRTNXb1N1bk8zdlBobEI4ajlIRkZRR2RnbmRQTUtJ?= =?utf-8?B?UGY2OHp1bDMvQUhGUis3K3A1YVNUU0dxd2IrMldILzRkWk9hNy9rQjY5cjE0?= =?utf-8?B?UkJJRVRod3NYa3I5MXp3R3F6SkFZYWgwOEdnRkNuSjZJR1dXV2xUV1FGKzRR?= =?utf-8?B?T0dEWlEzeGZIZWdUVGRnS01sWWJOZTlFTGJxbC9LZG0rK0habjRlakRGKzg1?= =?utf-8?B?OHFOUGhueDV0Q05iblA0eTF1cis3YTNpTlozK2RwMVNxVjhXZEJmSUdsU0RG?= =?utf-8?B?b2NuOEhRWWVFMnVaRHc4MzlnVFF3bUcweXJhVlNjOC9jcFhpY1VwU3BrSmlH?= =?utf-8?B?c0JDS29tTThJdHk3V3ZsZkRMMFR0bTJ4RW9la2RQRjZLbVBwQzJaRlJJKy85?= =?utf-8?B?MXNsN1pKU2NYZ2loUFJCdURBb3dmZThtUU8wY2tVS1B2SlE5anBheFowdGs5?= =?utf-8?B?UmtNVUtjb0MvWFJZUlMxMThEMEtIK1d4NmN1ZFRMc1EvZitTbC90dTZGcE5y?= =?utf-8?B?TnF2VjdjcWFkTXVYM3R3anBMUE5ENzRQMHlVSXFXUnk5RWxidVZ1VTZ4ZHBa?= =?utf-8?B?L0F3c0E2YUVpSFNCZ2JUZmFEZVJYOERWUjBETi84Y3k5ZzZkZWlYYnlWLzQ4?= =?utf-8?B?T2RKK05UTXZQR3M5bkI3aUFkYlE0andGdmpHZXErZXhhZmt6anloZC9va1Nm?= =?utf-8?B?OThlNTNtZVplVE9iSExkWHhKMlhkWS9OK2p6VFArRlhieUd1aC9NWmZLNjZ2?= =?utf-8?B?bmFvck8vMHhHYkJ3T25xMlBlclFzZFFiRUN3Z21FczJQbTlNZE90ZXRTRDRF?= =?utf-8?B?VFZXOWlLTGp1TXVydlp6TVcwKzAzNXZoVnNqaGM1dWlNK29TK3gzcmRRd05J?= =?utf-8?B?U0hnUkduSWc4R0dNL2VkTVdSamFFaWxET1lRU3pWM0hMQUJFcUQ1eVdpYmhB?= =?utf-8?B?NC8rMk1BMlJpMUFrRVV0ZVk4YmtUelJuSUZyaXNjUmFZUzkrSDloVUNTQXdJ?= =?utf-8?B?Z3lHbVhuWXVIWldIVWZiZDNkUXRDM2p6ejl1WDFyY1RSRGJtUnM0ejJkYjJl?= =?utf-8?B?blNwdVd4V1FrU0FmQ1BxUWw3OGVlN0R0bWcvMFNONDFPaGNYU2FwSmhWQ0lB?= =?utf-8?B?NlBOWVQyVzIxMkhrVnJPMnlyb3BsaXErTUhoZnFVVGJNMlJJV2RRNFc5RTRG?= =?utf-8?B?NE8vNkNLUHdHMitFZ3dPNFVCeVp6TnV5Y0tYK3p0ZzJlK2REWHprcE5jNnFn?= =?utf-8?B?TFRLeVZTdjRjOXZjT2ZRUW04L0NEdEY1VGNzdk5jUllzUU0zNmJzR2JjZkFx?= =?utf-8?B?RUNvM0NHZlk3QWlMSkF1YXNVcFdRd3FXcENDQXRFdWhmWWVnaFFGQktYRE5y?= =?utf-8?B?MjVkcDNUVXBRNEhpNkRhQWo2dk9KQWE4dCtBemZVeXNJYVBSbzh0c1IxQlBG?= =?utf-8?B?Z2c0WDBxajZaTTdTQnBZTU4xT2M5V0ZZNnlTS2lXV2x4b2NwaHM0MEJsUm1z?= =?utf-8?B?M2tJUXRuSzhSSXNjL09CTXhxanl0K3lycVlzZnBvbXN0MzFlYVpYOHlDNTBl?= =?utf-8?B?ZkZDQ0ZtWGFuU0E4cWxiOGlBR0xoODRNYXQ1Yno1RTNlTzk2eW1MZXFQUjNS?= =?utf-8?B?eThRSFdmWnNLNlcwclhYYXZ6b2dWN2VkYmxTU2o0WlpFR082cWtkdDZNcFFo?= =?utf-8?B?bzBzVkZnc2YzQXcvMmhreUI3VFZaeXZMclJ6Vi84QnJKVTRaQUFqclNVL0J1?= =?utf-8?Q?671+g4ESC2cCp2QowNVWbZcggH1zNAaT+PpT5/z8DPAPi?= X-MS-Exchange-AntiSpam-MessageData-1: XtkSGwx56Da9iQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: fc45e83c-cc8b-408f-c40e-08de7e7d6764 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2026 08:17:00.6664 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: PjsWuFyW0jZseSqcCrRrNtK9avwoDDYmGx8YhdCDtaiaHQmQ95VUzurFjufakoQIzzzHtAkCJ2NMBO8pGThUpg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB7614 Make `Cmdq` a pinned type. This is needed to use Mutex, which is needed to add locking to `Cmdq`. Reviewed-by: Zhi Wang Tested-by: Zhi Wang Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/gsp.rs | 5 +++-- drivers/gpu/nova-core/gsp/cmdq.rs | 9 ++++----- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/drivers/gpu/nova-core/gsp.rs b/drivers/gpu/nova-core/gsp.rs index 174feaca0a6b..a6f3918c20b1 100644 --- a/drivers/gpu/nova-core/gsp.rs +++ b/drivers/gpu/nova-core/gsp.rs @@ -112,6 +112,7 @@ pub(crate) struct Gsp { /// RM log buffer. logrm: LogBuffer, /// Command queue. + #[pin] pub(crate) cmdq: Cmdq, /// RM arguments. rmargs: CoherentAllocation, @@ -132,7 +133,7 @@ pub(crate) fn new(pdev: &pci::Device) ->= impl PinInit::alloc_co= herent( dev, 1, @@ -149,7 +150,7 @@ pub(crate) fn new(pdev: &pci::Device) ->= impl PinInit { /// /// Provides the ability to send commands and receive messages from the GS= P using a shared memory /// area. +#[pin_data] pub(crate) struct Cmdq { /// Device this command queue belongs to. dev: ARef, @@ -508,13 +509,11 @@ impl Cmdq { pub(super) const RECEIVE_TIMEOUT: Delta =3D Delta::from_secs(5); =20 /// Creates a new command queue for `dev`. - pub(crate) fn new(dev: &device::Device) -> Result= { - let gsp_mem =3D DmaGspMem::new(dev)?; - - Ok(Cmdq { + pub(crate) fn new(dev: &device::Device) -> impl PinInit= + '_ { + try_pin_init!(Self { + gsp_mem: DmaGspMem::new(dev)?, dev: dev.into(), seq: 0, - gsp_mem, }) } =20 --=20 2.53.0 From nobody Thu Apr 9 07:04:59 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010023.outbound.protection.outlook.com [52.101.56.23]) (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 EAE403ED12B; Tue, 10 Mar 2026 08:17:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.23 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773130630; cv=fail; b=P3R1pigD+xxVj+3weP80rZW9JOYnqVuThu26rq2GYigH8N1q4GKOQOrGim7kcegW7iGukbIvxlmKdD5JhDhsnKQXrnLdAG7QriFAN2fBFjNUIZ10iWrNyhxGMsL4YRjze2W/Ea02sHD/CcGGtikaSkygRbCtqX2Vy6qsAeH2oZ0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773130630; c=relaxed/simple; bh=VSn4VCijgxUm7dTtG1oek+XXoy+o55OWcMpT3QPyOkU=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=QSNyiy1LfVuQrsMVCHOAkyXoQUfLDUBjtkbFUe1IZ6CuF19A4OX/roYS2O2D6Nw9ADpOvlfE65qKFDwvNvews7XmC3nWFzPVCFZzusANCuSY4r6CxhPz0EctK/bu3yQjEQTZNQp+vdXYY1NLV/8XAmmmbq8TopjSL/MUlcH6u78= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=TWvSi8/5; arc=fail smtp.client-ip=52.101.56.23 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="TWvSi8/5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QXBSL8qNDVN0+vGKHiPPwbmEcxfGvzLo8xRO9mzjhAQoLx/yHVKiU6cX7/wrRNml6utCPHHRiII2L0DTDqXN/eKviwnVy4YgxfuuOJLgCBZY1XK0Z3pOLQcdrruF+QbLuFN01XkB5U19e6do4RJRpoxggWsOKF8XvUy6W5SDh64fgqunf0q8mIpnIyH9IJmIvrBgllRdsZFyfPnTy5dA4nEolfO4RymZJQ56LnbaiZ9X2gBHOXmHsF7Z+xY9DQjPZ/xKNhoPyMQcsqyiTIfyUzQNYNCeOWF17CtDuh8flGZnMfJdjCPp4US1UkGcuupe+VNvutsR5cPkT6x+2y1aCw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=0W6bv5+Hx3bqTliEH6SnPwvSIeZxrQCVGblm+qpGsqU=; b=q4kAzOmz/oyN9Ww8E1IJAaioM1Z12VuiaWzZ+a5B0necOvnSnZi7lHmGnRxzEKjZq0JxQP6YfY3n4rZuD51NWEhMLyTuX3s2fpOS6hO9/qR3BLBBI+VA75/X1bsaId8B6sCZ5JMo1ZUYtFTX1dR33pGPNCeJlY+OiaabDpwRstHpyutD55SQHd4WEDmmv/UpnH8qqr7zb4CpXtjt8z0hQ1pz9bfgsZltl4Pvbfxiv/kf3MEHhBLCqIOZvVXafHtUa1cu70sB43VSIEYbUcJU2SoFDDLO+wKTGv9Emue/BTEFI1SdBgBbWhTyJuT7VsTuVeIkk7RfrYozfrCVD48okA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0W6bv5+Hx3bqTliEH6SnPwvSIeZxrQCVGblm+qpGsqU=; b=TWvSi8/5U/vdHpNHUcDz2dCnERcbn1zTzn0OG9pJO/jQIRSYQqOSF/fHca5DIVz2BMfMehrpobTcl/zLglEMoF4hQLkDum/cPpExbpprbuT8uptHTbBJDiMtLYhb0OK/J9e5o3D7uhL7qOFVmo3tTSVs2lZbk4y3MQVhPpZyHRLUaGALDZ4m+Sk44g1cgn9yN0lSCM5DmXcpl0Ifpcj5prjhXhe5tJ0lPV7WCZeVRqv/d0j9mcOiVL4nJI+O9bJMxDJSzQlIX+o4HwHtVzWUhSxihT4l5Qp2M/J+ceDiG2G3UrddPs+6asPbSwDwKcMJP651Q0U67aYGGtXo/6l2Bg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by IA1PR12MB7614.namprd12.prod.outlook.com (2603:10b6:208:429::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9700.11; Tue, 10 Mar 2026 08:17:04 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.20.9700.010; Tue, 10 Mar 2026 08:17:04 +0000 From: Eliot Courtney Date: Tue, 10 Mar 2026 17:09:19 +0900 Subject: [PATCH v4 5/5] gpu: nova-core: gsp: add mutex locking to Cmdq Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260310-cmdq-locking-v4-5-4e5c4753c408@nvidia.com> References: <20260310-cmdq-locking-v4-0-4e5c4753c408@nvidia.com> In-Reply-To: <20260310-cmdq-locking-v4-0-4e5c4753c408@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Alexandre Courbot , David Airlie , Simona Vetter , Benno Lossin , Gary Guo Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, Eliot Courtney , Zhi Wang X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYWPR01CA0006.jpnprd01.prod.outlook.com (2603:1096:400:a9::11) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|IA1PR12MB7614:EE_ X-MS-Office365-Filtering-Correlation-Id: 2ec17f86-6866-4e87-eb31-08de7e7d69cf X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|366016|1800799024|7416014|376014; X-Microsoft-Antispam-Message-Info: p06bbyiX0IjcbIhXxiU215dbL4nJsYArx5E5gYlW5V8ZRxHMsa0jOBO45epRiVCXz2h+88kIy0vMDpSSdj8oJ36jp+D9aYBamCONN7N8d+eG+Ux/TtnJN5sTFPMJT/yfEATfQiekLH+fHKNAeoQ6eu5ISZ7eUCEk/pbFF8EV9+sRz/pXMs6MPMyMMgd0Emmj+RfnUrNe7q1b5q3u64mcNZzhss4vfb0pL7d/8ZBVzTY1KjGmo7wxBRWLZwlXCi1MFLK3CMvZSHSh2CeZZJUHGMxPoGLL4P+LB6HZrXlRWS/znFfm5CC6FOIDBZL/sEZzQRJTpxXg4chpv/4sBV8t163DkCehnbUi/hg1wGfd3Psec3gZ//8RspVKY6L2LvcKG/eHWMC46pG5rDbHq49fHE57f/tBzltIDXkgnWKh5vCUHiPI1uLiI9nWcld2KfJsNJ6ZCPzdX9p9kRVfUjBBXAV6B0EqxOPp34whv7T3YAxtvqMh6gJmJGls87eA2vxiIOhLpyAu6h78zI/AxfUE9W7t4qWMoRvKZ5xAE2fj5TIIfauts0DpEbiu1kDqkfhDrmZgKMO9jK6yzvDbiC045E8IGnPpGE1iPicpdPwmFd8xY+VN2GcRSD2k0K+YIXM//Aa+lUpI+bHcQo/ILW+m39WAxonzaJyi1csaembdFjsaEMbc2Wj8IMGH+f98VdMnuzmFa2O5OspOPIjepkbgRKcdHwD3hSZLgxpCiDQaSM0= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(366016)(1800799024)(7416014)(376014);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QkpSNEZaV3pEUjNqK0NEcUpJL0duTWZvaE9WZjc3NEZBT1VuM054dFZvK3F2?= =?utf-8?B?SmwvUkNYUnVFaHJjN2JxYUN3cUZzdVlQZU5PVzlHSXlMUVpCT09uM1BwUGZT?= =?utf-8?B?aWJmWVdkRHA2VVJ2Zlp5SFN5UElEY2pEWHg0Z0lNNEhXcjJhQ05HWkF3V20x?= =?utf-8?B?NHRLNVZZVjBRdlpLdkJMV2tLS29kZjhxNG5IbW9iUDBHR3RvNUVRNHkzZExF?= =?utf-8?B?QnZBMndDQnVSb1Z3ZkVCYjZKL3QzUlRzOFByNE56Qnp6UjJQUnBqdDJaM1ZQ?= =?utf-8?B?WUtNcU5CendTTkdxT3lCVXlxQS9CNDJabkhrR3VaTDB1R3lrWFV5Mi84OUEw?= =?utf-8?B?TGI2eU5HZ3h6MWZvZDhEenNiQlgzTEJTaGJmS05rN1U0dG8xckROdVk1UlVo?= =?utf-8?B?Tkw4SHdvcFFPakZlM3dmTnZUUFU1K2xvOFJBYkE2RjNOdllqMVRnN2dxSzN0?= =?utf-8?B?Q1FSRjZ4TVdkcFNXa0NnTGpwTzl0K0Q5UExObERZMVVlTGxzT05aREJoOXpJ?= =?utf-8?B?SHRvTVlETGMvSHZSZEtnNjJpU0lJUmZKVzE4ZDV4UnRqWitSQXVKZE5tV2JC?= =?utf-8?B?NVRUbmRHNEhxMzZicG04aTgrZGxhYnV6eUNEVGFYVEVSU282UzVuL3hOTFla?= =?utf-8?B?ZEVaaDNITGJrRXJHNEdlZnlRM2lQR00wdTBoUndURS9QQko2NTdTdFJDeXNw?= =?utf-8?B?cEV5dWI0djNkQWlwWXEzMVZyYU1UbHlpcXk2T1piRDlPNGRKbjRtQU1NT01r?= =?utf-8?B?Wi83S2xELzhQUFZoSW5ramxhVlZ0MmpvQWJ6cEdhN2RrSWx0aUZ6U1I2Mjlh?= =?utf-8?B?RkxLWlhwOWpaQ2VsZUxUdDJFeWtDMURwWHgxNGhBUE85Y1NUUjFYV1FucVcv?= =?utf-8?B?Yjd5UUNGaVhqUWRvQnpjckxjdHlERTFDeGxHVUd4NEd3TCtLTjNXdE1LbWxJ?= =?utf-8?B?eVh1Vm5NNFlCMkZENjlMWk5Fb3BJeTg5WHhTU2hQTWQ1N0FnOStqd3d0b0kz?= =?utf-8?B?a3F1azNXUWM1Zkdpd1dDQ2g0bXJMOFhlQldyYUp2L1dRUEU5R2lFZE9KT0ZC?= =?utf-8?B?MW0rdkwxazd1ZVg2OEJsQ1luN1QwT0tFMHF0NTZWbkFCOTdLbm9RYmVXTjhR?= =?utf-8?B?WWE3aFNsSHZRVStNbTF2ZFpHai9SRjhqL3pLRkJvdWp4WStWSVM0U3N4cXpY?= =?utf-8?B?eThhWHhLQWIwMXF1Z0xLaGY2MGdzVXBvb0Vld3NMR1NaTVNISGVOTEQraXIv?= =?utf-8?B?UWpyaWZieWthcEJRc3J3YSt3bG0zV0lMTWtqREJtbkw3Tm1qS1ZsRlY2aHJY?= =?utf-8?B?eGVhS0VrdkxpK1l2SlpPZEY1MGg1d0FjVFYyaTNIVmFKNm4vdVRYOUREekxO?= =?utf-8?B?MTRBaDJNM2FBQ0FWL2dISzh6UW1WZjdOc1JLMWF1QzMyQlZqcW5FVWlnRHpu?= =?utf-8?B?Mk5qUkVUaGtLREdXWE9YNTQzSWFYSWs3QVZQZ08yYmpYWVZlM1VIUThSNFZ4?= =?utf-8?B?MlJrSzRTRyt2bGdPRVZEeUJTclU0ZDRiYnVpZXlqZ2FtVEVpMjY4U1FqaEQ3?= =?utf-8?B?S1Fab21hdUtuOXd1dVdtMCsyZUdsb3Z3dlpKKzB2ZzNFMUtCek50VXFxTkRE?= =?utf-8?B?ZFZhVDROTEdZNEloRkQ1KzVBUys5VWpMWVJmdzd2cEpsY212c2dON3lkT0Vz?= =?utf-8?B?NUptTUNPemNOZHNVbzRGbUhEM2dIZ1kxU0d4K0tZSWhUY2VrL3lyanFjMzV0?= =?utf-8?B?ZzdtMTdVUFF1NmxHbGd5RHZNYzkxOWVodGVRZmtxdEhYOHh6TjdzMzNraU4x?= =?utf-8?B?b1d0eG8vaTR3ZnlqZ2ZKeEVma2JkWXo2VjlwOWs0dm9oTDJTRUlEbkVBRzRB?= =?utf-8?B?Wjl5U0owTmxOVTJpNjV4YVBkbmQxblo3UnBZMlZUK3RLcEo1Y1pvdDhCcDVF?= =?utf-8?B?L25zcUF4eVhjUXR1bndFMkJVdXR6Ukh4WFl4TTJlRGVtMGF3R0IzNkZXZzZO?= =?utf-8?B?YjFKakNGYUs3NVJtdnl2WkVsQzIxRitES2wvNkNRZGRBMnlLVnVhc2ptMlNY?= =?utf-8?B?RGMyTnAwbWxwSEVIb0RZTk91ZU1MUjlZMHhtbW5MUk54dXFlQjF4Vnc4Nklq?= =?utf-8?B?VWVEZy9acmI0dUpMd0t1ZWE1SDVXOCsyMUhCWUI0eFlsYXhhOXUwazN2Sk9H?= =?utf-8?B?bEpzRmZuNjBMcDVpeDBSUHNhcm1Jdk5KWVZTdk9Ha1d0YWN0VmpOQXozbkhq?= =?utf-8?B?bjh2RnNrUnlOekZiNjM3SGhEMXZMVjJTWkhBZm9mSVROTm04V3VxZ0hKdGN1?= =?utf-8?B?V3FsOGxhOUNYbVY4b01xbE1NdnBxS2tuclVpNkdnaldxcW9ubzlaazE1RlRz?= =?utf-8?Q?PFyckf6SlvCa+MaKtAB1k5wYmkQnqtRad/Jpx8v1jEC59?= X-MS-Exchange-AntiSpam-MessageData-1: d+Q98bkEYb0l1g== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2ec17f86-6866-4e87-eb31-08de7e7d69cf X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Mar 2026 08:17:04.6619 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SN7TNAq/YdoK5qY5ohvYouMSEnitZHog1ZYzceMUSlKlEmsyMK0onkKAGVFgod4NQ15yuZibJ6JsfrDeau9ElQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB7614 Wrap `Cmdq`'s mutable state in a new struct `CmdqInner` and wrap that in a Mutex. This lets `Cmdq` methods take &self instead of &mut self, which lets required commands be sent e.g. while unloading the driver. The mutex is held over both send and receive in `send_command` to make sure that it doesn't get the reply of some other command that could have been sent just beforehand. Reviewed-by: Zhi Wang Tested-by: Zhi Wang Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/gsp/boot.rs | 8 +- drivers/gpu/nova-core/gsp/cmdq.rs | 165 ++++++++++++++++++++---------= ---- drivers/gpu/nova-core/gsp/commands.rs | 4 +- drivers/gpu/nova-core/gsp/sequencer.rs | 2 +- 4 files changed, 105 insertions(+), 74 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 991eb5957e3d..bc53e667cd9e 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -128,7 +128,7 @@ fn run_fwsec_frts( /// /// Upon return, the GSP is up and running, and its runtime object giv= en as return value. pub(crate) fn boot( - mut self: Pin<&mut Self>, + self: Pin<&mut Self>, pdev: &pci::Device, bar: &Bar0, chipset: Chipset, @@ -214,13 +214,13 @@ pub(crate) fn boot( dev: pdev.as_ref().into(), bar, }; - GspSequencer::run(&mut self.cmdq, seq_params)?; + GspSequencer::run(&self.cmdq, seq_params)?; =20 // Wait until GSP is fully initialized. - commands::wait_gsp_init_done(&mut self.cmdq)?; + commands::wait_gsp_init_done(&self.cmdq)?; =20 // Obtain and display basic GPU information. - let info =3D commands::get_gsp_info(&mut self.cmdq, bar)?; + let info =3D commands::get_gsp_info(&self.cmdq, bar)?; match info.gpu_name() { Ok(name) =3D> dev_info!(pdev, "GPU name: {}\n", name), Err(e) =3D> dev_warn!(pdev, "GPU name unavailable: {:?}\n", e), diff --git a/drivers/gpu/nova-core/gsp/cmdq.rs b/drivers/gpu/nova-core/gsp/= cmdq.rs index 90179256a929..47406d494523 100644 --- a/drivers/gpu/nova-core/gsp/cmdq.rs +++ b/drivers/gpu/nova-core/gsp/cmdq.rs @@ -18,8 +18,12 @@ }, dma_write, io::poll::read_poll_timeout, + new_mutex, prelude::*, - sync::aref::ARef, + sync::{ + aref::ARef, + Mutex, // + }, time::Delta, transmute::{ AsBytes, @@ -477,12 +481,9 @@ struct GspMessage<'a> { /// area. #[pin_data] pub(crate) struct Cmdq { - /// Device this command queue belongs to. - dev: ARef, - /// Current command sequence number. - seq: u32, - /// Memory area shared with the GSP for communicating commands and mes= sages. - gsp_mem: DmaGspMem, + /// Inner mutex-protected state. + #[pin] + inner: Mutex, } =20 impl Cmdq { @@ -502,18 +503,17 @@ impl Cmdq { /// Number of page table entries for the GSP shared region. pub(crate) const NUM_PTES: usize =3D size_of::() >> GSP_PAGE_S= HIFT; =20 - /// Timeout for waiting for space on the command queue. - const ALLOCATE_TIMEOUT: Delta =3D Delta::from_secs(1); - /// Default timeout for receiving a message from the GSP. pub(super) const RECEIVE_TIMEOUT: Delta =3D Delta::from_secs(5); =20 /// Creates a new command queue for `dev`. pub(crate) fn new(dev: &device::Device) -> impl PinInit= + '_ { try_pin_init!(Self { - gsp_mem: DmaGspMem::new(dev)?, - dev: dev.into(), - seq: 0, + inner <- new_mutex!(CmdqInner { + dev: dev.into(), + gsp_mem: DmaGspMem::new(dev)?, + seq: 0, + }), }) } =20 @@ -537,6 +537,87 @@ fn notify_gsp(bar: &Bar0) { .write(bar); } =20 + /// Sends `command` to the GSP and waits for the reply. + /// + /// The mutex is held for the entire send+receive cycle to ensure that= no other command can + /// be interleaved. Messages with non-matching function codes are sile= ntly consumed until the + /// expected reply arrives. + /// + /// # Errors + /// + /// - `ETIMEDOUT` if space does not become available to send the comma= nd, or if the reply is + /// not received within the timeout. + /// - `EIO` if the variable payload requested by the command has not b= een entirely + /// written to by its [`CommandToGsp::init_variable_payload`] method. + /// + /// Error codes returned by the command and reply initializers are pro= pagated as-is. + pub(crate) fn send_command(&self, bar: &Bar0, command: M) -> Result= + where + M: CommandToGsp, + M::Reply: MessageFromGsp, + Error: From, + Error: From<::InitError>, + { + let mut inner =3D self.inner.lock(); + inner.send_command(bar, command)?; + + loop { + match inner.receive_msg::(Self::RECEIVE_TIMEOUT) { + Ok(reply) =3D> break Ok(reply), + Err(ERANGE) =3D> continue, + Err(e) =3D> break Err(e), + } + } + } + + /// Sends `command` to the GSP without waiting for a reply. + /// + /// # Errors + /// + /// - `ETIMEDOUT` if space does not become available within the timeou= t. + /// - `EIO` if the variable payload requested by the command has not b= een entirely + /// written to by its [`CommandToGsp::init_variable_payload`] method. + /// + /// Error codes returned by the command initializers are propagated as= -is. + pub(crate) fn send_command_no_wait(&self, bar: &Bar0, command: M) -= > Result + where + M: CommandToGsp, + Error: From, + { + self.inner.lock().send_command(bar, command) + } + + /// Receive a message from the GSP. + /// + /// See [`CmdqInner::receive_msg`] for details. + pub(crate) fn receive_msg(&self, timeout: Delta) ->= Result + where + // This allows all error types, including `Infallible`, to be used= for `M::InitError`. + Error: From, + { + self.inner.lock().receive_msg(timeout) + } + + /// Returns the DMA handle of the command queue's shared memory region. + pub(crate) fn dma_handle(&self) -> DmaAddress { + self.inner.lock().gsp_mem.0.dma_handle() + } +} + +/// Inner mutex protected state of [`Cmdq`]. +struct CmdqInner { + /// Device this command queue belongs to. + dev: ARef, + /// Current command sequence number. + seq: u32, + /// Memory area shared with the GSP for communicating commands and mes= sages. + gsp_mem: DmaGspMem, +} + +impl CmdqInner { + /// Timeout for waiting for space on the command queue. + const ALLOCATE_TIMEOUT: Delta =3D Delta::from_secs(1); + /// Sends `command` to the GSP, without splitting it. /// /// # Errors @@ -617,7 +698,7 @@ fn send_single_command(&mut self, bar: &Bar0, comman= d: M) -> Result /// written to by its [`CommandToGsp::init_variable_payload`] method. /// /// Error codes returned by the command initializers are propagated as= -is. - fn send_command_internal(&mut self, bar: &Bar0, command: M) -> Resu= lt + fn send_command(&mut self, bar: &Bar0, command: M) -> Result where M: CommandToGsp, Error: From, @@ -637,51 +718,6 @@ fn send_command_internal(&mut self, bar: &Bar0, com= mand: M) -> Result } } =20 - /// Sends `command` to the GSP and waits for the reply. - /// - /// # Errors - /// - /// - `ETIMEDOUT` if space does not become available to send the comma= nd, or if the reply is - /// not received within the timeout. - /// - `EIO` if the variable payload requested by the command has not b= een entirely - /// written to by its [`CommandToGsp::init_variable_payload`] method. - /// - /// Error codes returned by the command and reply initializers are pro= pagated as-is. - pub(crate) fn send_command(&mut self, bar: &Bar0, command: M) -> Re= sult - where - M: CommandToGsp, - M::Reply: MessageFromGsp, - Error: From, - Error: From<::InitError>, - { - self.send_command_internal(bar, command)?; - - loop { - match self.receive_msg::(Self::RECEIVE_TIMEOUT) { - Ok(reply) =3D> break Ok(reply), - Err(ERANGE) =3D> continue, - Err(e) =3D> break Err(e), - } - } - } - - /// Sends `command` to the GSP without waiting for a reply. - /// - /// # Errors - /// - /// - `ETIMEDOUT` if space does not become available within the timeou= t. - /// - `EIO` if the variable payload requested by the command has not b= een entirely - /// written to by its [`CommandToGsp::init_variable_payload`] method. - /// - /// Error codes returned by the command initializers are propagated as= -is. - pub(crate) fn send_command_no_wait(&mut self, bar: &Bar0, command: = M) -> Result - where - M: CommandToGsp, - Error: From, - { - self.send_command_internal(bar, command) - } - /// Wait for a message to become available on the message queue. /// /// This works purely at the transport layer and does not interpret or= validate the message @@ -717,7 +753,7 @@ fn wait_for_msg(&self, timeout: Delta) -> Result> { let (header, slice_1) =3D GspMsgElement::from_bytes_prefix(slice_1= ).ok_or(EIO)?; =20 dev_dbg!( - self.dev, + &self.dev, "GSP RPC: receive: seq# {}, function=3D{:?}, length=3D0x{:x}\n= ", header.sequence(), header.function(), @@ -752,7 +788,7 @@ fn wait_for_msg(&self, timeout: Delta) -> Result> { ])) !=3D 0 { dev_err!( - self.dev, + &self.dev, "GSP RPC: receive: Call {} - bad checksum\n", header.sequence() ); @@ -781,7 +817,7 @@ fn wait_for_msg(&self, timeout: Delta) -> Result> { /// - `ERANGE` if the message had a recognized but non-matching functi= on code. /// /// Error codes returned by [`MessageFromGsp::read`] are propagated as= -is. - pub(crate) fn receive_msg(&mut self, timeout: Delta= ) -> Result + fn receive_msg(&mut self, timeout: Delta) -> Result= where // This allows all error types, including `Infallible`, to be used= for `M::InitError`. Error: From, @@ -817,9 +853,4 @@ pub(crate) fn receive_msg(&mut self,= timeout: Delta) -> Resul =20 result } - - /// Returns the DMA handle of the command queue's shared memory region. - pub(crate) fn dma_handle(&self) -> DmaAddress { - self.gsp_mem.0.dma_handle() - } } diff --git a/drivers/gpu/nova-core/gsp/commands.rs b/drivers/gpu/nova-core/= gsp/commands.rs index 77054c92fcc2..c89c7b57a751 100644 --- a/drivers/gpu/nova-core/gsp/commands.rs +++ b/drivers/gpu/nova-core/gsp/commands.rs @@ -165,7 +165,7 @@ fn read( } =20 /// Waits for GSP initialization to complete. -pub(crate) fn wait_gsp_init_done(cmdq: &mut Cmdq) -> Result { +pub(crate) fn wait_gsp_init_done(cmdq: &Cmdq) -> Result { loop { match cmdq.receive_msg::(Cmdq::RECEIVE_TIMEOUT) { Ok(_) =3D> break Ok(()), @@ -234,6 +234,6 @@ pub(crate) fn gpu_name(&self) -> core::result::Result<&= str, GpuNameError> { } =20 /// Send the [`GetGspInfo`] command and awaits for its reply. -pub(crate) fn get_gsp_info(cmdq: &mut Cmdq, bar: &Bar0) -> Result { +pub(crate) fn get_gsp_info(cmdq: &Cmdq, bar: &Bar0) -> Result { cmdq.send_command(bar, GetGspStaticInfo) } diff --git a/drivers/gpu/nova-core/gsp/sequencer.rs b/drivers/gpu/nova-core= /gsp/sequencer.rs index ce2b3bb05d22..474e4c8021db 100644 --- a/drivers/gpu/nova-core/gsp/sequencer.rs +++ b/drivers/gpu/nova-core/gsp/sequencer.rs @@ -356,7 +356,7 @@ pub(crate) struct GspSequencerParams<'a> { } =20 impl<'a> GspSequencer<'a> { - pub(crate) fn run(cmdq: &mut Cmdq, params: GspSequencerParams<'a>) -> = Result { + pub(crate) fn run(cmdq: &Cmdq, params: GspSequencerParams<'a>) -> Resu= lt { let seq_info =3D loop { match cmdq.receive_msg::(Cmdq::RECEIVE_TIMEOUT) { Ok(seq_info) =3D> break seq_info, --=20 2.53.0