From nobody Mon Apr 6 19:38:14 2026 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010056.outbound.protection.outlook.com [52.101.201.56]) (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 D6EFA33BBB9; Wed, 18 Mar 2026 04:07:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.56 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773806865; cv=fail; b=ptmvieSW2ZIAcZ+Y1Qs/PyBp3Y2Mul85BdfMbYFtwtwofep8sSUFOBr3D5oAW7l9Q8In+7HbW0nG7Q5/57Y9bcXnBXIszXNzJ55tgGz0yhP/gKg4AYQdgkOc/Oxfzcev27C5vQC4q115WpCl4bTnrqqJZ+Y/5Ma4RguoyF7lFZE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773806865; c=relaxed/simple; bh=NileHyeel7PrgcRxz25ZdccPkMxZFH64yyNIwQcrpbw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=lzaD3jJw69Rc+fiGtsDZG5k8BSHhn5iH3vd8vOo2olVOcu/tkOaUv3TgEiWadwh7NuG8f5rkdGhvrSlTUM7JEu1By3aj42BsdHms6Y9r+6T/L5wMJNSByLGshl2pStyDk2EVQCpUpXN1YcFGNbyMHj5s5I8RQYuiUlHtyE2Y530= 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=OAqo+1CR; arc=fail smtp.client-ip=52.101.201.56 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="OAqo+1CR" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YEdc23YUHQM8DTJJHrBWeNii9YeH2d21ech9E5xY8NWDLAEVOrhgv8DfjVCtrDf+NWxgUEnWdZPN5XA+7LzDY+/5QfzflVBQVOSHsH5n/9xWBGKkYc3hP1QCdC3/iUHSiq9WKpSvYP+S0F8xIArkFdHPk4iuul3WQS1/hlODiUgMe0MIgVonCfuUkDgGMtvdUrmkB4n0KIS8GxltF5gBY1hUDta6Iame9DOdxJaU5sV2ki1slHuFwTiL0lQVIhJ2QM8u1NiJcc9n85zHhtmfISX9QDsmHyZfvjITGeyWuSaN/5vqiTqmwrI0703FM+TJV9rgNqIA/bELEGm6e3L/zQ== 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=1KED9xjZmKW5Eu+W5R+zqOTx8U5XGYz1w4pDseDYKk0=; b=MAAffPAWUABu4UU/HAgW3gxIoJi6NLF4NByHFdZgVZfXwHYThRyS40WtcRcqn9jg94j1CAOmgUPm3qv2WAIyWf4cJvfuqN4l2c5rovsTDk5mwSXVbimpNpUKZ4xK6fuSlg7j519+8mxWa2WPEJdKND0sjS2kcFQlKarVcUw39ddSx31Hb7+Frx7U6ac4mln177YOgqSi0ncE2Fvyql8CWjIZP6CiDDRsAP11wkaMu0Y1k/sGmsNvxZqZO9+252YXmWUEJBEsfuynoSW5dY6nvn3bpKO986abEYTyCdrCLGKvIzZOQLz3rt02K7Ft8dP/xlQU7JnOwaBwBhuHJmUdbQ== 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=1KED9xjZmKW5Eu+W5R+zqOTx8U5XGYz1w4pDseDYKk0=; b=OAqo+1CRuI8uCu4NvPpfugXh3GEm6hdvSbALeOoFTNF3edy0Qw6bLqCQBX30CJe2L/s9b7qTkT1Q5/joXizbUO4akuSRuOrZ/p17pYI5AAy4kJCIebQzIS81YbRxkPoZnUA9hRkejzvEa0cQfcxDJDg0LntTXRBYUItKud3FrqCsUeFG0OvN5gb10BmoKvmSVGHss9+yzOO4gogWgH+VwD0XXthlhiXnmnRBVhAL2HNQkMtmWd2BVKGQycdcynAm1HFTtmIZtmw4S/I7tR8hjmaIap+gCfdqJucuTu+jxLZJGvNFkVK8nTOOuJ1DYl4bbASD7MeVPPSEjcehJRbLUw== 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 DS4PR12MB9634.namprd12.prod.outlook.com (2603:10b6:8:280::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.19; Wed, 18 Mar 2026 04:07:38 +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.9723.016; Wed, 18 Mar 2026 04:07:38 +0000 From: Eliot Courtney Date: Wed, 18 Mar 2026 13:07:09 +0900 Subject: [PATCH v5 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: <20260318-cmdq-locking-v5-1-18b37e3f9069@nvidia.com> References: <20260318-cmdq-locking-v5-0-18b37e3f9069@nvidia.com> In-Reply-To: <20260318-cmdq-locking-v5-0-18b37e3f9069@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 , 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: TYCP301CA0053.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:384::20) 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_|DS4PR12MB9634:EE_ X-MS-Office365-Filtering-Correlation-Id: 569891c0-81a2-46a2-ecfc-08de84a3e498 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|10070799003|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: +NV5Y1JMg/f8Vfllz3wItH7NEFmwHBk9e5cd4Q49GLMUxYsAYxDP1wQD/XBId201sOxcmvAlGs+ExX0WqQlGkE1q+eB2sh2BP1GlhKBBCcmru719jVIfdJj1Vm14ywermXD+BVnLYuuicD/zrthT2ksiJb9jcYJhgb0k2I1ZPyEz7m+uU2IS+mdZUxTsl/sLePLnr+W41szUvK3ODP5W62GCsQrYFYzbU7pi8gcEseEBYa8Aamy6L1TQ+Fbo0/Xxii+gP1i2zMxWaEehkw9qZ4uFDL/hYsttxGusNXQDOBWQ3VyCLap2cdOx68kbGCm+dlqbcDNjJ88Mh5ETfHJILTVTmLlrbKq4d/fIQFo4vFIzWbe+xt5RmDWAtlVmNyyZsHzdV4A2tGX4ZWQxqVVERbxvmcj5xwmAHlf/ayqfHSl45smIRebaXjiw0S5V/ayb6+/JkylAaYxQsj1WEz9dkw6GdH066rwXGejOiYICBtEDCgAA75u1QFP+RmG0mDpU/JIaR+XJCAnH4LXYGofeE7+G9l+FH2kqMi/DN2MxZe0U4zhw7K6dy64KNLrA5QOokV07PLm2uMDnE4FeLQ6jUpy8mawHIfiSwaGpiz3YMEfL/3co0EwsgyfuW59EDLc4jpOf2LDt0w5yKOC6PmklvpuK/8rGXRIqaWRde1xXtvmG4WYgcu60Qrh0ckrsmxmFFCF/W2Xcaxa7HmFbci3TbfXhn0tl3n4Xq1gWWloh9xI= 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)(366016)(376014)(1800799024)(10070799003)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bURNN0FMT0luSTBoUkplK21FbVZ0c0UzYmZjd2hvUE8ycE9nRHp2dFlBYmRp?= =?utf-8?B?cEwwN0c2b2hZWjVRd2pBNFpFUTd2SFRsalJwa0Y4TDdiWUVSUnUrVURHalZ1?= =?utf-8?B?SDYrTlJaV3dEME9LQzlMV3EzZHVsZmpURXQ3c1R0QTd5RStzODNIQVg5MlVP?= =?utf-8?B?eUIzUVNHbmlENisvRXRnNEdYRStrSDc0bmloUVZqOW9jNEZTdStibDRrOVVX?= =?utf-8?B?SFlqTW1ZM1pRMXNLbmwwcXNrcUdrZUhBK1FJRUNVaGsyWVpLZGpOVmlrQ0pW?= =?utf-8?B?QmJMSHpzSmpZckhSQ0RITTd2Qy9UUllhS2F2bUU1WmQvN1lYMk9FQUlLVlZJ?= =?utf-8?B?RWllN3FXVlVTVkNBQ0hNWkxWZW8vMDE1OHkwam5uUEZkSVppVmhGV2V1bkla?= =?utf-8?B?M0p3QkI4Tkt5akt1ZmE0bUVJcWh3SkhmZTFSamErVkVVRVFnbGJkdjBXMHQv?= =?utf-8?B?MDhYb0FKU3YwTnU4TmxVbHVDQThaUGU5V1g0cWkzL2FwWFZSMFhNVVR2dStm?= =?utf-8?B?VWlOUzNXUTBWRE83MFRISWx5UjYxaDYvbENiRVhYUU4xbXJTUERRa3Y3TnFl?= =?utf-8?B?MFdiMDVrb01VQTgxM0FVSXd6VEw3S1ZLK1AydW9vRVU1VUhxcVBPU0xGakll?= =?utf-8?B?REVNa2RVTGRSWXVTcjVodG1kYnNPYzMrSy9kQUxzcUREeU1pUXkxdWhVMHh4?= =?utf-8?B?YUxlOWptRmMwcjRSOGdscm95MldWakRZRGRtZHJpK05NRUFrVzhaNERsZWNW?= =?utf-8?B?S0J6V2FiVXVBN0ZHOVNBeE5GNTJjU3lpSEpsaTFtMTFpTDZjUFo3V2FUNEV6?= =?utf-8?B?N09pNUZyRksvN1NOWmpFdUxXT0NPYVRwalJ6bVhTU1I4blBJY1RVNXJIbXY0?= =?utf-8?B?T21UeE1ZaUNKcXdrSCt1Qk5YY09XV0o0bzRkUENWQlZROThQTXZXYnh2WEda?= =?utf-8?B?cS9sU0pnQU9HZzFvOGNsTWcyS1dUVFY1dUZkeUR6Sno3VGhNQVdocTZQWmJw?= =?utf-8?B?T1ZvSlErOENmdW5CMDVhd0JMU1NDYnZOU3BRNmROTFNpODZDa2ROQlh0Vmtk?= =?utf-8?B?MTl4Z1RDa0dBczc4dVhRZmlvU25nazhIanBPcXpLNGxoM2ZUekFQN0Rzb3By?= =?utf-8?B?VTEvbUxUWE1ENStxcCtzTE9HYXNjRC9wR1RSM1NIbDZyY2VyQzZUYTVrNlBK?= =?utf-8?B?a2lpTnRUejlXaFpFbkVSNzBNTk5SMllvR2NLT0JzZTlha2cwSDJaQmR1b3B1?= =?utf-8?B?VVN5eFcxY24wTEpCNWJ5b3d6R05YaXQ3N0UyUnljQk1sOHU4WWhWZ1UvUjJv?= =?utf-8?B?a2lTdjV6RXlVU3hEYVdZV3h0VjFqcmVvWlFCYVFDY0E2ZWdleTlWditvU2dK?= =?utf-8?B?TThHdHlGUDBvcW0yUXhrUDRyVmlvNG5zMFI5UUY4VGU4SU9yUlg0VEg3bmp2?= =?utf-8?B?cUQ5aFBjb2VhMTBTMlZnOUVieVpBYlprMXJrRi9mcXVYUXk3WGt5TmJlYXNR?= =?utf-8?B?SFBtSzAva2F3Rk9WK2cxY21JcmJ2emRZa0ZCTGZib0ZHTmQ0S3IrdEZKZXl2?= =?utf-8?B?YWtYcnh4OTcyMWR4K2gySVQ4RnY3ME9RbmhmdlJjNTF6dmRIWWloZ2gxVVp3?= =?utf-8?B?UWc1NWF0UVNVZnVoajVOM0I4Qi83RS9iU2NNT1BaMmFGb216ckwxZ01aNkJ1?= =?utf-8?B?TDNlUU85WE85NER3ZkMwVlRhdmF4UDRLSytoY0xUVzVnbnFtZ2VrSHVPaXli?= =?utf-8?B?OUJwMmhZUUQxcUVWOVFqd2NiMWpPS0IrTi9pTDcrQlZXS09LcElHbU9WY0to?= =?utf-8?B?VllJcnFjWnZCRU1nS3pYY2l1UGFETURlc0NJVE5VZVJ6MTl1d1o4OE9iRFJT?= =?utf-8?B?NkRVd1pTTVBJeE9hK2g2SDYzUHArc0x4QmtmTzkzYTV5YU9LR2NxdjVBYWJh?= =?utf-8?B?MkhZQ3diaS92ck1XeVdscEZ1K29iR2xVcm50amRCZ21CVlVXS0oyYXVGRXhw?= =?utf-8?B?Z3YyR3k4RUdlQWl3K0FwVHJGSjFoSkt0WTl6VHdKUVpycHl6Y3JybExzeDJl?= =?utf-8?B?YjMvVHJjZFkwbW1iZ1FabVJSdThsSC90RURaS0VPdWwwUHFJWEpxc2FndG1P?= =?utf-8?B?cVpZa1pIMXU5VFhvdW1UTkREM0phaHFXNHBVQ0xSckg3QVY4cU9KcnFydStw?= =?utf-8?B?L0dwNFUzdko4TEZxUVZMM284YmczUlZ0Y0xndVBNdzZ4YTdHdGpaOURnWFhm?= =?utf-8?B?SEI2U0ZYWG5STFliTlEydjBtUzFxQ1g3NmhTV29RWkp6WXRZRDdtSVJ2Z0lI?= =?utf-8?B?Mk93OE5ocVlCOHd3WkdIMG9UOEZ1OTFsNFl1Qy9Pby9OVmhkaVpGWjNIcjIy?= =?utf-8?Q?hqmYSv0+CxwGmlarGt6YJHO5jHAWZ+8vwDSxz180OUPYN?= X-MS-Exchange-AntiSpam-MessageData-1: gV1UecTFfBPYFw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 569891c0-81a2-46a2-ecfc-08de84a3e498 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Mar 2026 04:07:38.4027 (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: ff0jj222iVohD91hz7SEmoqrYRCEDY/1wXKOUBG16Uy5RJD3uD1yjm92bjR4XC4FUHoeG7KrZgdLJPozLADIyg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9634 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 efa1aab1568f..f7ca6856ff35 100644 --- a/drivers/gpu/nova-core/gsp/cmdq.rs +++ b/drivers/gpu/nova-core/gsp/cmdq.rs @@ -502,6 +502,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. @@ -682,22 +683,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 Mon Apr 6 19:38:14 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012002.outbound.protection.outlook.com [52.101.53.2]) (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 E11A833123B; Wed, 18 Mar 2026 04:07:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773806871; cv=fail; b=ow/2bGRDqhLeW3vUz3QoSDa89SeT7cipG3DPzsrtu3nrP4mlfmkQotfwL+vqn+zs4y0j0t4bzi0CMeqVI5thK0VRJwBfYaShBVvOPQQznnEf9lb2sM7btJhR59ex4SOUjeqji7+rxUHFycbZ0q1ZxrhJLtsi5F04p6yGF+92/nw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773806871; c=relaxed/simple; bh=5vAA4gmMfz3gSgU/U8Yf4XEYpG0k/+YlbC2zw2msH/o=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=kdLrsSnsilPWUe5PMrE7UnLnt+lmgIOOrX1gXbw9Wf1+rS/XcsYwmEXwRnCYhmhIVJyeH4KgqcEqmrpgmx1vPPKuk9PLuVVGxhNXHNiuX3zbkAEykxilbgzmrYNCTMlSHhFWel6lYGU0jIT1JQva1eaKaiuPMctu6z+LdAz2v+Y= 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=oNLzxGn/; arc=fail smtp.client-ip=52.101.53.2 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="oNLzxGn/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=u5+WV7+Uyc9T8nRYooGPfR4J0MlxNvLB5y9llA5euXbBPOXOBgSoGb4tVO54g5qidPJsIvEOOmf9j+y1aBfLULWgJlm19lknBYNc/UlC24Ryh4vdRB36U9D2BlGss2k+heIMxfrR7kg4miDusSkJrWWSXq3y6XYUgVRdbUH/ossbei7933FRcNGyyV/DdmRyKQbmwZU91DiTjjVjUqJkgVzB82MrSOoxaltpa3q4xmfTYTj4FsKxYmwlsXcReiIrOCTGQJmZidtNcQ0ZE1X/Tqc0IAKgofbk18cAxqfJMHQULhbmZ30F3IBq8CUSBoOy4DpHSF834zjFK2DUVDEDCQ== 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=Huaf/o1Cjs+xS34E5Rj643prJfR5euRLoBT/pxx9S44=; b=t7a1cxAFqGo91pP8EEiJB3vpBWFOape7bVKi5/IDpeU9Z0YfdtFv5LZKUjOX+MKxKUFBoKAuFnH9Xl3pstpSgPgFW6Il+wHrqQsYc3uHz4ihuP25dHxivsKH4dYfcoXoa61p1Qn8OTOgyukTW1+QAmpSEpKSKsUoR+v+wDJid4dwZlzfIkvhGbpPiEt474PY6apR+1GuEH4LY8Z73JPR2VdYOJYz7HUCG9gIlijb+eO6Da6KPjphycHsp3slVR5/tQwrxp/HJbovZ4/pv5DOL+Hon7yKfBr1RZZ+QBvMs073/hY2gYY1vy8sKrwQGzkeh8tWhss0BLe4WJ0JRs2vAQ== 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=Huaf/o1Cjs+xS34E5Rj643prJfR5euRLoBT/pxx9S44=; b=oNLzxGn/UFnlzdc++QpRpSf7cEBnmOmgCdC/3VH7XhH1FHExgxVu9/o+ijjmhWTOorOmGBDzi0b0DLsOKKlt1l+Xe3rfsqTe17gCbRmqt0IKlUcfQRHbjGXABVQRvmxsjcZGGHKiIpzdNhlsU5iLb7A32UHmG6FSFT4jjEhLY1NHJOusFxPEsxuWvo0nXchs/mCx/zOi8PFi5+3wiyLZXHcdcjauFvlGVQU4aKDDgrAVawRZ3Rs2nU0xTgnAmUfkgbPxIleurfrPRPDvtofYmGc2ucOKJk7LLHaF+gYR3sGukUKt34gGaWK2tyeYWM2BAvXPtcpunhnzA7un4f8PSg== 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 DS4PR12MB9634.namprd12.prod.outlook.com (2603:10b6:8:280::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.19; Wed, 18 Mar 2026 04:07:43 +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.9723.016; Wed, 18 Mar 2026 04:07:43 +0000 From: Eliot Courtney Date: Wed, 18 Mar 2026 13:07:10 +0900 Subject: [PATCH v5 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: <20260318-cmdq-locking-v5-2-18b37e3f9069@nvidia.com> References: <20260318-cmdq-locking-v5-0-18b37e3f9069@nvidia.com> In-Reply-To: <20260318-cmdq-locking-v5-0-18b37e3f9069@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 , 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: TYWP286CA0007.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:178::15) 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_|DS4PR12MB9634:EE_ X-MS-Office365-Filtering-Correlation-Id: 7f697e9b-893a-4814-5010-08de84a3e774 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|10070799003|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: VGldUJKpwG+SLGb/fIOZn7bPvfn5vkWMCvT3HFuO3QsO3V1HbcgOEdHSyP5NZxcdtx+9iHLZ33Ky0CC/Hox0KOrATO4w5RdKIzVhqmoYcL2IWVljAXotN9jnezyY7qTA+PVoU8C9nk5uKTgNPe58JI/z0kvIfrRKEbStVQA8+thiuFGk0DcOjIF85K741eoCa52iyRKLkeACaspD1L8KZQ1ZmJJaR2cqDl8S/MJxQXOHPB9/Q63MFVS3ANWTRJgx0UdLy2imOWvumH9FX9cAP22Hd5epD+evwR62WvgSPdCvaLz5hbWa9hB6OY0D4j9itNbt902Dlc5PNGyZFGZVTOetoyfyRjWVhV/kqup0JRAK9XYuufIop9fi6+CFy/qUPJlaPZsxJOvCUYvx8leeG4cOiUSwKIel7A7NQkGs34oEylu+PRV9iAEeq0275XbFlbUn81z0mLH0bfpJUpfWFdLHwmByijg0oMFTeUmikfyU4XrDbTuGwSSZikzOh5cq/o00KPUeHMtgz9b0fiux04hnhPurfmdpq/Atf4A6uU/KMDlJvyF1hqmf3XtjoNVSCbRWUlvTNnT0xugB0jaCBFbJwsQjQIv9R+GbJbzwjI4BCklFjQA5gOtNfLYNKjr50FCqB940rrAW74sq2JIsnLDBc16cUEjO1/C5lQlXpPxe2xHLKtA4rc2rCMDmKIdD63UtTA21zA4OgNYYnxSnvELD+kq2F341EndgfVXi8aA= 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)(366016)(376014)(1800799024)(10070799003)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?K3NybjdOaGh4UHZjYy9Udm1NcXk5em5GYmRYRFkzV2U1SGRVRjRBclN4ejRw?= =?utf-8?B?Y1h6TVRuUnJ6YmNaQ1hNZ096cmMwZkh0cmtJZDdlbktSREF1dlFkVDlMck1I?= =?utf-8?B?MWZvU3dWSVFVSk56WW9Ydk9RSjBjdjByRXBoazdvMFFibmMwTCttdUIxQzMv?= =?utf-8?B?NUVmS0pzN2txZ2JSVThLenRNcW9NcDhrL2ZocU16REtFYjU1NUdtMXZDT0ho?= =?utf-8?B?YVVhdURUbGk5SmdHR00vY0dSckdjTzIzM0R3WC85SWY2U3RlM0lEb0ZUQjFU?= =?utf-8?B?VW1Qam05MHRwS3FIWnV4b3dxQ3Y2Q2NnbzVkM1k1SWRFYlNWYmk5eHU5ZVIx?= =?utf-8?B?TmNYQ014V1dGcU5ha1RwMGJDRi83OXpYOGFlQUYzNEpNRUxuUTVrV1k2dXBr?= =?utf-8?B?cVV1aFpxRXVDWTNrdzNsNEwxVmhTUGo2Nmw2U21xZm5JakI0enBTNkZOcDRx?= =?utf-8?B?S3h4U0g5UnJpZVlEa2R0YjhmTCtwT1VtMjY4aHBFMmx4T3JNdW9EOUlFYUNq?= =?utf-8?B?b0pyV3htLy92ZWVrZ0YveXg4M2E0N1hEYmxlT0Y2eTU5MDJQc0dteDA4SzRO?= =?utf-8?B?Ym9Obld6Qmo1VC9DK0FFdHljQXI4c0U2ZXRoZTNvM3hqZVJOTVJzZk5sQ3g5?= =?utf-8?B?Z1EwcjZ2dVVPdDBtVDc4YlJyZitrL1RCNEhUNWpmZjJpZlFSQktjeHpCYTJB?= =?utf-8?B?Y1R5R1drM0RucUlqVUU1TkJwQkJCT2pUL3IwSWttMmF5c1dROVBSbUxJcmtj?= =?utf-8?B?OHAwSm81R0o1a0lqWlcwdEVJNkxDS3lZVmRtUHRiWXZ5T3Y5YThLUzBKU2Fw?= =?utf-8?B?RmpaVjF1eWJPRlNsNm5MUmJXSFZXSC9ERXZnQ3c3OUk5MlUxWnRlK0VvMHhC?= =?utf-8?B?eG8vMktNcHdKZmFMLzhDelZ3R1VLa3VFNFlvYStFTXJsNTZXL3E3NkFFb3NR?= =?utf-8?B?eDZHUDBEaFFLUkw2VzBIZ2RPcWFhblROK1JuZU9oUXhMMU0wL0tTeWsxcE96?= =?utf-8?B?dndkUUtRQTRzRnk4aU9mTW1FNjRoOU93VUc2a2RZNGhZb0VMdzJ2ZjNLU0p2?= =?utf-8?B?MlR4U0Y5ZHdZSGlubHpwblp0OFU4TnByeHk1U3lyMVN4ZlJ2RHlsaTZSSmV2?= =?utf-8?B?NFlyczRzWlBqbzI1a1pnZEtTTmhBY3RmQVdrM3FzSnNXYnVlQVI2V2xVNkZP?= =?utf-8?B?OFZsSkQ0WW84Y3JFeE9aVi9ubndyNUFxRGlvd0ZyckhCeFI3OVhvdDBHTTNE?= =?utf-8?B?NmVFQ3BZZy9hUGtvMDQxdHRvK09FVjYzbDZqaWJWaXVpV3FxNEd2NW40NDky?= =?utf-8?B?ZXM4cWE5ckJTNWJxNUFaK29MSTk4L3BNOUQvckcwdi8vZ05aRUZOWmVMVGNM?= =?utf-8?B?Y2x0NVZFM0xHK21FMGlFUW1GQndiYlNhN0lVVjFmRkk5a0p2NnNtVE9JQVlh?= =?utf-8?B?TVYwc3R2VTdlSEZtMVRXemFQRFhDZzZocHI0VWMyaTkrNTJnQkRBT3hmMHRE?= =?utf-8?B?U2xNNk01N25NamZYRVBQR2ROOTNVUzhqdVd2NEZyTHRsTHZiTmpzTGFOR1l0?= =?utf-8?B?UGorcmE1ZU5GYlY3WUZOdU8raTdObUNRdUZtS2poOUh2eERzb0JhUlBOWGVv?= =?utf-8?B?TW9QVU5TUTFyYjM0TVBQR1JOS2hMcnlNb2pVTWY1WTVicHE1S0Z2cm1GVnlU?= =?utf-8?B?Z1dQV0lFeXdRMXdHeVNha0paWDJud1JqQ3pjTm5aOHJ0c1dUTStudFhuS2tq?= =?utf-8?B?TWVpbENXelRrblUzcE5wZms4UkRSc2pRcituV0F3cGE0cTZKUEhWd2FsdjR0?= =?utf-8?B?MDFRYUNKbWZOZlp4aXpVZUxmWjZCaUZXbmxGQ3pZbWdlMUpvVlFLU1ZRWWZs?= =?utf-8?B?aEVjL2tNamRveEMvWmU1RjBVZDYxS2I0c0d2ay9MNXU1VHd1dEY1ZjJ4cEJl?= =?utf-8?B?SXdtRUZDL3ZVNGFmV3NVZkE3VUtQRmVZMW9MT1pPeVlhUk51Y0VYZ1NNdUoz?= =?utf-8?B?VVhrYVFFelcxT0RlTmhjUEt3R2VCODhDNjRSRlZVckZKWDByVXJlWXBlKzF0?= =?utf-8?B?SGc2ZkhYZjZyS0RjZDlQdUZLSkJxN0xqd1RCektTK1p6ekJtbWZQcHZhUlZ3?= =?utf-8?B?cEFjWXhwRmZGeUpPWHdzdUhCbG1nTVNHSk1SZ1JKZ1YzYWFXNG15Z3crbG1V?= =?utf-8?B?NVBYMjJVaGIxWjhYYWNqZ2Y5RWhGRngwRE1LSndPRnhCeUR6Mi81N2RJSXFU?= =?utf-8?B?REVMUmltZjVOWGZaRko0R3BHTWNOZmZLNUs0NEJKa3lIdExjV0h0QWlEcldy?= =?utf-8?B?NXlDd2pnUFZ5OUs0WWNhamc1bXZnS0kxR0U2Lzk1aTVGRkRyUDVkSk0vVG5R?= =?utf-8?Q?xVnMA5xpi3z3i8DmbS+m2igTJZBgSCbEpN4istW4bgzf+?= X-MS-Exchange-AntiSpam-MessageData-1: Jdab7ak0i8kv7g== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7f697e9b-893a-4814-5010-08de84a3e774 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Mar 2026 04:07:43.1781 (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: 47fSuVS7RczfFOp+Tzfhoka03PNgf/NCvg4faG4qRAgotJLOwV4mLunpRq2fl4rB/ULiOvhvDoaejNo2b4x/4w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9634 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 f7ca6856ff35..c62db727a2a9 100644 --- a/drivers/gpu/nova-core/gsp/cmdq.rs +++ b/drivers/gpu/nova-core/gsp/cmdq.rs @@ -467,6 +467,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 Mon Apr 6 19:38:14 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012002.outbound.protection.outlook.com [52.101.53.2]) (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 822FB33B97A; Wed, 18 Mar 2026 04:07:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773806873; cv=fail; b=hcXEjD9gxnD+51SYCs/MBp+l1KX+Qyr3qNH1dMEoVuenc9Gc6gfG5wHxYG1jomzzirDUe8WohcAMkJqnWdQN6DXoaByzlFGrijV8GY5UI8d23ZjfRlOh3k8BsbrcfU+b3djNWQZXEN8GZh/xAXA9H5GpyVnSblaE7eLtWnQtYOQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773806873; c=relaxed/simple; bh=c1nsz+dc0V54j9I4OQzNCq6jz6gw3xIBEjjgLfBULtY=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=pKneBau3rOGW6hCGIrj1Met3NtUZ8kTpQrUjbJ0PGSbO0PWmrti/dG6ETrKl1ewu7VCs2GSj5h5JFeqPc2y5FXw7fbumOG93OwSEk6PmTQBJlAxPr6YS39E4MkgY2RK9IcNq4J7qK/Ne3qh47yXsKydrkvKk7kzb9sRG7R3X+RM= 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=gmBlqTO2; arc=fail smtp.client-ip=52.101.53.2 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="gmBlqTO2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=w3Rovn9ltXkc/qEKg3nDrX6CeYnO+vn0kviBTIsnSi7CC4jKLb1va+jHfeKnRUSiRannocwtFD8WdxxI+uaTExNYEoHFPVtAXa3y/2AzzeEw87zXbk4F0s9kDcuxwEDe93PIwArMwDvQeGgF1OUUmvzv80eyHOZtB8CnBhsbdvJ9Wl3PNyEq1HcNOupBpYojg8SrKoFkKS/sylKisTxRvvOrhKev33xRa4yxITVkbw4r8isRiyNLRO0ygIvIusXe/jROVPNvRX36e8i5J+BvJjxnEW5nuoa5RRB0+GuZtRB2F1OkxqTO0bU0wRaMFlXzFpjrzZsVQEZlqxijJb1l3w== 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=sWzBDG/QxRbwJx7SQgDrh1kHKoXiWoQmLIJ2EiVGfCo=; b=caLVn2AKr0MffcPgm1bq9InvaTTRCozFPIf/Es9dwCJO4xpf3ORX1k0WpbC+PceomAbQaqwUmakncGXqwa6lCyxDPlHPRfNMbgEcPu2z0Cing/tKKA7SJiEj+R3SB2THErlkI2fg8cLFK3iuqViL6OhdAr9GYgHENqOGyMextQP9wpIvOgPRCzdh9EX+gOtrTV6dyc6NQQZT7ulkaFwPSbyII/SbNaASdQQ/j6Qkr9f16dhfJg+2p54eJaqUiocbuov3sr4g7KOnEQT1zWI9DZS8Poe7CpYZyQadOmLrIZ+UUCVSbiIG330DY/J5mlq/r2BD4jVWJiDR2JdDkO/aQg== 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=sWzBDG/QxRbwJx7SQgDrh1kHKoXiWoQmLIJ2EiVGfCo=; b=gmBlqTO2oyDh3scyrL15cKIsbcETOffku0IKBYAqspZRj1ORVPNIfR10GLFSaYIFpLYxdN+ByyFKwsY2CtDp9Dx7Ju3hm/jqei4o9Q9SrJVdnvMl05S/oOFAExxUQgA+APgRYbFTPiSe5XSHzYfvHQVefJ7/z0x2Sw7o91J0LIHjxbXnAghfrxQJOfiGs3XTWIJVlkAVxnFiIKW5ZgySKiO6BHG4buHSOUGMjlOKYmK5+f+A+Sg/b7Dc7216ggKsMMMSLtH9IQnjJMF9hXbMitZiAMSYJ1z2MGt/zVnUNQY4VZbH3CwR78+UQ8ehoubOculwvaxA0bGB8tYhCv+FKQ== 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 DS4PR12MB9634.namprd12.prod.outlook.com (2603:10b6:8:280::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.19; Wed, 18 Mar 2026 04:07:47 +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.9723.016; Wed, 18 Mar 2026 04:07:47 +0000 From: Eliot Courtney Date: Wed, 18 Mar 2026 13:07:11 +0900 Subject: [PATCH v5 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: <20260318-cmdq-locking-v5-3-18b37e3f9069@nvidia.com> References: <20260318-cmdq-locking-v5-0-18b37e3f9069@nvidia.com> In-Reply-To: <20260318-cmdq-locking-v5-0-18b37e3f9069@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 , 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: TY4P286CA0019.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:2b0::16) 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_|DS4PR12MB9634:EE_ X-MS-Office365-Filtering-Correlation-Id: d70f1058-4e82-4567-2627-08de84a3e9d8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|10070799003|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: 4NgrzoulrQTVfkqbN4zRON0tfW4hsvh11RGP3zy+iG/pelbZJgLnvbgAPB0xq+9BAxcn1bzYplUQvrVfmMI1+Z4R2x4uLxrMYRNDm4bzDomBpCbUJGyNDy16gWeOS/XkrMF8QlQWyrtPiA+/owj7LY4qYUCjuL5jDeg9Di1g1dDN/9P4YWDibvLvTyFQGkj2LSuRe0246ADVGRrB1Kmqq5Lh8odjQ3PthfYvClQpDjpt8/AhVLBKEUYKywqbYvBUC8e4k4IfLYl1PYMXwGxYEk8u/9IsOk77Zj823TVsJNc5t+anbGJcu5e3gkQwFvDjM9+Kz6adtkMOTXH8MgJzrh9Z8gzXxpsvZGuKxkoxT5TkEsrDIlCw25F5o4hxgmqpBr3ITvKKeylrUokgkGynDZovqh54LVEwBExdV4gXz4MmaziJr0Hd/OWLmTHATvXOZw7ZGuPSRi8IURbr6TF6kljGMHo/j7Y7w/aujdvUmpqGi04zUS/g91XzuNBziYHpKf95X6swBFdIuoutWhX/kdxbauWWN2QySEMxDD3hp4kjZ359oqUdSjB/cknCEKjrOop/7vxbiYYHqI2G1KlQ4T8hapmUyQI6JiIQHYKkiTxm09pFzPoGuFf4tY6+xHn9dXjaIDu3p8Iqcz0yB3q0k7VQIDTh/GXn/RiwHt3fk5DQRBIAqNe49up+GjEQ9wr6fY2RX8sq4E9zFH1eiRnzmgTV0J0T4ELsaJJ7UArmWkU= 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)(366016)(376014)(1800799024)(10070799003)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eWI3TnBPeDQ5Yk1NcmQ0UGhvR0RvcW4rRkdtTTlydElDVWF0bk9RZzZyTzdT?= =?utf-8?B?UjZiM2pESmgydUd0N052b1Y4UGE1NWw2YzV4ejFsclRiNjZSTVI2Z1E1U1RD?= =?utf-8?B?dFk4S0l6RjlpcENVQmthTWU5aXpLQ3BhMXhQVXFTZldaKzN6b0srSlNBOHZl?= =?utf-8?B?cG1CRWExcm4waFphWnJxSEpxZ0VDMnJibEF1S0xlVkdhWDNxS2ZkS2pJa1Vi?= =?utf-8?B?V0pOTnd4S1haZ3ljVTFyYVhYTVBYdzArL0FtdElrc1dONGNMOEJ4bjNvYkp5?= =?utf-8?B?Y1VWS2luRGd3bWRvK1MxMThDaDZHNUMwRk45Q2FNNlpwZkZtM084b1JYNXBj?= =?utf-8?B?NXZqWTVlbjF3L0VTSFJPY3RvT0duODRkbGdEUHJtOCs4dVNBL1h3MjdWZVVs?= =?utf-8?B?RVZ5Nk9VbEh2RzdCeEdrb2VjdlZkVzZPczBiaUxEQkZGTHNveGd6dFpFeGY3?= =?utf-8?B?c2lZcGMyekdwcHdUTjdVcEluVHFGR1UrVUxvV0VJcjJITXIxME9SenVDY1o1?= =?utf-8?B?cXlYRXA1U0wyM3BXS01ac25CUlQ5bjJaTGJZRUhmWFZSSFJnOU5GMkdxcnVQ?= =?utf-8?B?ek1qUDI0bE80OU9IS0dydXJEZzBtZkxzUXVYbG5EMDJLVFpNNG0xSU03RFJ5?= =?utf-8?B?VERWUEg5cXhJZmZNYzNQSUlKUWJ0NnZhazFHY1JHY2R0VWJCQmVCaGxaU0p0?= =?utf-8?B?czRYaTlubXZCTzd0MEdhY0Nib1lud3oyZkpwbVoxSy8xQlhZa3JUQmFvejZt?= =?utf-8?B?YkhyU2M2LzBWVkh6NzBWd0wxRy9uZVpMZTNpNlJjS21YTmZNMW96dE52TkVs?= =?utf-8?B?M01pQ0c1RzFORVF6cndsT3l5TDV2VUFHaUhSWUk1MlBRaTFvVzZZM3ZPOW9r?= =?utf-8?B?eFQ4OE5YdHNwejJiYlZZOGVWRStOSzBMUU11WG1Hem5Ic252d1R3SEhSc2hB?= =?utf-8?B?Z1h6WHBXeW1uWnRSVzFpV1duTzY5aE9HcjNFazFTWkJ4K3RaYjdMRVE4UUdn?= =?utf-8?B?dkhvcnV5T3h4SVJMSXhRZnppUkliRHlWaXZEYmtyNWhjaWErYzlCNCtubVVS?= =?utf-8?B?T280cWplWURnWkwvR2kyTVp3elFPR3NkRTRVdEtHZDkxTDU1T3hHZ09HUExR?= =?utf-8?B?b1ZDRmtPN1AvNm94Q0wzZGs3QlF2Q3Y2TXJLcG4xaVhWbmpOUlJMSERGeEFi?= =?utf-8?B?SnJRd2xhYUhUNVA4a0RhdDJUdFQva0QvY3hMeitUTW9BNU1YelBZK0RLZEYy?= =?utf-8?B?a3ZOdW14a3h4RWJjWlFmNnFnbTFReEduYXZPM0RPTjZCTGpOZ3FERHRpVkNU?= =?utf-8?B?aVdSemRzTEVVYXRKaW1yaHhEUzlJZDdxNTdyTVFyTEdxSVRhd1VNVHFKUkxD?= =?utf-8?B?L0VRVEZlbUpQaVN5WHNiUDhUMVk0NlQyQzAySFVNeCtBK2xYRWw1QUFlUzNq?= =?utf-8?B?TWhvSHJCODVYZU5TdXBSQm5lWHNXMmNLRSt2R0JlQkVORzRTMXVQWUJoamlY?= =?utf-8?B?UzAxSU9mdGJ5bzgwUUhaejdBWmhaTDNuQ3VDK2tnR01HSDFuenZaUXJXZ210?= =?utf-8?B?Q1pWY04zbzI4a1FRK3Z1bFpNRzZ1RVRTZEdGaVYwMHl4Mzh5aytFcnlYRThX?= =?utf-8?B?RE5BOStvY2tRZ0Q4L2lvNlFxRHpPUzBJOFlJZ2svbVZHMlRZZms3MFJCQTNM?= =?utf-8?B?WjJBbG5ScmlnWjZYekZ3SisrZVR6S2x2ZzFWV1RRaWxnYWwvaGo1b0RJZVlU?= =?utf-8?B?UE13aUVYRGZOanU2bCs2SExOSGxZR1F1MnN4RlJ0RXVvejZmTmpibG1RU3pp?= =?utf-8?B?S2xUd0FiSkw4T3JMbklPMWx3TmY1Mjl5ZGordGFGS0Q5Z3hHYzFwRXRyQUpO?= =?utf-8?B?cFhJOWtzclQ2anZrVThEVk9SK3pQUW1VL1JDazhMdkxuT1RQZmlFQ2VMb1dy?= =?utf-8?B?VjRWVGtwdTd3RlRLeHV6aEJRS3h5OUVDRWJ1UDVXdFJNZ1NnT3VLMFMzOXBO?= =?utf-8?B?ZVIrUXRGazVCKzNxcURNbTFDMFVhYmUxN1h2RHVHZzE3Tk5JV1hVVTJINVlD?= =?utf-8?B?Vk1MK3d2eStMcUt2NXozaFNxd1BTQURwTVlWc0NyaTdUZ1p2bThrM05ZWjA2?= =?utf-8?B?dkVNRWtKRWh0RDJuQnZ4ZHJ2YjlEWS9hQUZKWi9LNkRkcDg1K2tiSmNpeWVk?= =?utf-8?B?dmlmeE5xZ3AwNW9pQ0ZQRjF4WkdHaFloUGxPZlVsY2U4N0d5UDVTZExSeTIw?= =?utf-8?B?M2lNYVEzSDM0aU40RDRZRytCektRd2c0UjAyeElSLzlVTjdRV1d5Si84WHFp?= =?utf-8?B?emRVek1HY2xMcTU2OFowMGRoWHE3SUFJQmhRd3RwREZoQVJSRG9XSXVuVzdl?= =?utf-8?Q?syZ8tocWscjjLyo9tAsgHGikET/F6FzvJXqK8ssw1yi62?= X-MS-Exchange-AntiSpam-MessageData-1: RBZ2qSsZbAn83Q== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: d70f1058-4e82-4567-2627-08de84a3e9d8 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Mar 2026 04:07:47.1969 (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: OI6NCi1P46lh5J6MnC/2oPMmlto91cNVuIN7FbBavvviIcaTMgMjUTnyieApGD2kfIhPQ8Bzy3nyYD85pDhMKw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9634 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 | 62 ++++++++++++++++++++++= ++-- drivers/gpu/nova-core/gsp/cmdq/continuation.rs | 8 +++- drivers/gpu/nova-core/gsp/commands.rs | 16 +++---- 4 files changed, 75 insertions(+), 16 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index 6db2decbc6f5..ffc478b33640 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -169,8 +169,9 @@ pub(crate) fn boot( dma_write!(wpr_meta, [0]?, 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 c62db727a2a9..4fc14689d38e 100644 --- a/drivers/gpu/nova-core/gsp/cmdq.rs +++ b/drivers/gpu/nova-core/gsp/cmdq.rs @@ -45,10 +45,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. @@ -63,6 +67,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 @@ -581,7 +589,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, @@ -601,6 +609,54 @@ pub(crate) fn send_command(&mut self, bar: &Bar0, c= ommand: M) -> Result } } =20 + /// Sends `command` to the GSP and waits for the reply. + /// + /// Messages with non-matching function codes are silently consumed un= til 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(&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 Mon Apr 6 19:38:14 2026 Received: from SA9PR02CU001.outbound.protection.outlook.com (mail-southcentralusazon11013044.outbound.protection.outlook.com [40.93.196.44]) (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 0121925C80E; Wed, 18 Mar 2026 04:07:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.196.44 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773806879; cv=fail; b=tCRhxbDfc7sJgeW+euf80fnnJXjtBMumS6/5tUjSj+1NFddKT1TPaGoe4l/pic4GIjCWITltwhkKUpTtK41zp/uYE/aFp+ItVs9eHW69tj5aS24u3cm9Nqwt7oU333LUA79JOL2SnInQ3o3fm4fE8eCkvDC/0jRRltAbCnhpoU4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773806879; c=relaxed/simple; bh=C87ZFZD2x90syYUW9weJ+3zGvqVowChIiVRIXFh++Pk=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=DY0aeol5EUBRVPMFqvEcReJu5rE1LYCjptf8LoBcKEhkFh2/92hD+7Mt/KkZiFLVU+ujVxsBOdJPyOt4TWPlEV/97IiRYhiueD0kynadiBH3pywEgf9wsqAKYCIb155JOWEw1bZi89fsANDkYGoN8KFUDcpO8GdWSDAxDLOZ5vs= 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=Zs95B1dE; arc=fail smtp.client-ip=40.93.196.44 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="Zs95B1dE" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YqNb6Z+mFsxVFcgm7sDHaAq4mqynpDNuUP4tUjCmUJXlhs+uAnQhNaS8F0X4WeABVNhuBSA6jrEmPHRKZBA99eXCwhR7Rdt7YtvDyv/wJvzYECmP77nXGqGUPSZCUNOBcnWf4oKrOjSV/I/LstoPct1lBLB8FhO4AL2MhZFma6zXxNQo80WawPPdfWg1omINUwVXz8bpcP33TpwPL41loBUJ9+rvfDueXr37CmNj1eEOUHP4xjLiXFB512LGTrkt9KCjFI3RrwVKAc8Ikdcbl+pqWhXkRbsDeq7ynfMnYAzS6X0U62/hXRltBgUKYxth0SVtb+TemRDuHTiXsxa5Yg== 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=YmL/q9TNkEwullukA6pB5tOAJu6ZVWanuQcKSi/yjUc=; b=MW4onxUwLPhEIAcLylNl4zxfBkJWUpEse+vXsSh7G8viGSSk7fbUcZOUSAve8Qzg7OiFK3zNmQFlN4EY7xOf7bfazgUiDYW2FPZQHpsZRHegYGVHVyIgv8caWYaTfxr33xDEv9FWvYbp6c8PLM0xUYMEtJMQumrojgSLMo9l+gkjOURPrZoNUISd0kJ4YFEtiVW2AxdIeczBa1Ber491V0GJL1BRxNiMQkuAumcb+itVNKC8UGWY2Wf7uQRmeiGsRCmxwvuChFnclOR50mOYScW7/XJy0iYNKjMvYx6gn05nDDavJNHrTbql4jURH+6fOXWWA08IVN2f9AzNu71U3Q== 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=YmL/q9TNkEwullukA6pB5tOAJu6ZVWanuQcKSi/yjUc=; b=Zs95B1dECkJGB0Kda06OWWmjIsJDhAI2YbNY7iGVXj3C6nsrsNP4XEHuAIU+ch7EFjR8ZvXdIGPEP/x3sEOBtMy9Y63xa3fg2nhIFh1GwcTR6ghukQa3XfWc+GPYleZgq0l9RZ79hsTzFBpQIE+Ru7ue4Dh1cPBd6WA4afBZJ5TAX8ed/xD5ghdEP1CFP61Oww9h4kbEA7C1EA/LcaRdHSBpKJ62Ol/8pU4RbQe/reQEifbqBnW/DAhdYgMZck4Uf4iBevbE+luxVSeYfPIRPc8vhLII7XqvF4R225iV4/N2C1Bc4qjyVxptUfK4ZBA0ns2usYIN2Z7fga7jOicJgQ== 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 DS4PR12MB9634.namprd12.prod.outlook.com (2603:10b6:8:280::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.19; Wed, 18 Mar 2026 04:07:51 +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.9723.016; Wed, 18 Mar 2026 04:07:51 +0000 From: Eliot Courtney Date: Wed, 18 Mar 2026 13:07:12 +0900 Subject: [PATCH v5 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: <20260318-cmdq-locking-v5-4-18b37e3f9069@nvidia.com> References: <20260318-cmdq-locking-v5-0-18b37e3f9069@nvidia.com> In-Reply-To: <20260318-cmdq-locking-v5-0-18b37e3f9069@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 , 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: TYCP286CA0351.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:7c::20) 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_|DS4PR12MB9634:EE_ X-MS-Office365-Filtering-Correlation-Id: ea616620-2a2b-411c-4772-08de84a3ec12 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|10070799003|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: Ndqwosm2oskyZJtq+RZix1C9Rczn85gRvnzokHTDUIx3v4nRp7D3JIxLqyoQDSLGdpwCI6Acz++ehAf5ISBlTCE/ztl1r0Y5YKx73xIAIs1b2P0vjTAwUJ+ZU3zEESnegLSbaf6ZpBuLU0f0Q16V6Lq4YeU8H4EfJOYhC2bKyJbh/JxujUkznuSXWpQRA6YOmZjseaa1h9tKucdkYxKRBKNwX+fDXLb7rMVdT2QCPOQ4lLzSUL4dF/yt5zl6PcGVJEYp66z8T8w3OEpUq4wqInaDbUsPOcrQNPK0JPwVhlOd/vOZEldJBefOZkVQnCiz2ZNoYux/jVVYMq6pAw035UXy3ziP/PB0TTSgP/GQFYX+QObWsIgvJZFuY6got7M7iF5Sq3Lf8rL+OqBgZ/snwJWemGHvJOQQ6nWDbPokBuNBLIxxy3pWKkFPZfcJFnMfUORSWHrJi+VwWJ89XaQDxrtT6PkeNHD2PsmA6MvfY3AI0Zmm01cMV+eLjequVfLng8lKCdqdalPDtEb8ktIwB4u/rTeUtcEy4E6W08oKJj+X/dJT4ziT/SQSdtNMsPAds3WpFHL+d5rr04ahiyeP9eB3NX1yRXMEGhaWnamZljwBzmKQbuv5vNgSpapCoBNjyMcaaczE0PrtzbaF18EgpS4NaRyCoWIY+epRPBqM++zOlSvQHqkMdW9P+mcR8I0KBfOl/gYOLM1U6qIQvnv+VkVFSq4DuZydLtohrrxshkk= 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)(366016)(376014)(1800799024)(10070799003)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R1dtcGUyWk1Fa0FKNHcvOEdHMFlsWkwyY3BzY1U1eUV6WVRSdHNkSXZUbHRz?= =?utf-8?B?V3d1cVQzS2RRK21laEN1KytWZ0toSyttYlc3RkpKc3hUU0JBbUVUbHpWUlgx?= =?utf-8?B?QXlhM2FXZERrWklXNERXb2ozSmlaOVdrZmFkQU1NNGtDQXYzV3h2NXRhN0xt?= =?utf-8?B?UG1MWm9UY1hJSG5uaThzOW84WlNJcElCblprUStqdjJmelBUcWw1N2E4Y3FW?= =?utf-8?B?RzFKZk5ycCtJcjE2cmM3SUVnQmJYR1JaRHVhZlFBTndPV3V0ZXp4OUtzMTc0?= =?utf-8?B?aVozbjBvYzBMNG1EZmNWTDdaekI5MUdTaDM0OVROUXNSbURLZkZCWVZPQ1Qy?= =?utf-8?B?clV0emFOYkQyZjcrRDh3SnpMdzcyRGVJRjYxb3BsZ0piWTJYMWlVY2ZzYTM3?= =?utf-8?B?U1VwWmdCNjdFM0g3U29DMVdEZ2MvbTNnQUFqOWlzMWJkV3h1MngvOExBR2l3?= =?utf-8?B?K2VRakozTzVCMTlQaEdPNnBUOXlzUVJLQnMyZjBCOWRrV2FnemVlMEtSVldD?= =?utf-8?B?T2p0eDlGY1hOOGRSOFhJOFFzMjI4UTNEK3BWeHQ4WHhLemhndjJRRllYSy8r?= =?utf-8?B?MHJUM0tTc0x0cUR2MTRLVTFyMmVmb0sreUdKdS9jcUR5M0NXWThKUS9tTWZP?= =?utf-8?B?bURxNnZENFRxMCtrV2k5Zm5uVTJoQWZpZ1oxMXkza2lwVk5GeVZkV1laZThp?= =?utf-8?B?M1poSGF2NmZYdHFnekJGd1hWcWt1TE1xYWVneXZac0p1b3I0SENXYnpDMzU0?= =?utf-8?B?ZWQ1R3o2Q3gxbTdEZjYzdUgxc3REdWlyZnFOREtTVkxlbDNWVHlab0ZWa1RF?= =?utf-8?B?cHNyYjhmek1RVmVmZm91bWVHcXBGMlRNbFhOTU1hcDQ3TElSU01HOGY5R2NZ?= =?utf-8?B?dmt2M1VZdkNJbnBVclJwanErZ1B1dTdjbkxIRnE0c2QzdDhqNFljT3psYXVD?= =?utf-8?B?a2VVenEwZW5QZVNHVU1QNGpGT3Y1ZGRPN3RxY1R0cVExUm1wSWFtTTJONzUv?= =?utf-8?B?bEdIKzR0YUY2Q1Z6THUvckE5elFub3oyZzErM1lqckMvWHdQbkRkS1JoL1Rj?= =?utf-8?B?R1p5V1hZalcwNXhQalFBanE2aVQ2eWZNRmVKR01PNWsvcGhsVEVKR3ZvU1Zs?= =?utf-8?B?V01jN3pNMGphU1V0RUlheEhJeis5MGNoR1hjd3Rjbzg5SlQ2aE5iVmhPQVNK?= =?utf-8?B?RksyemthL2Y2OFN0T1BWRnY3MmxXMjBPYzhWOTFhc1IxenFVQ1pIMWZEQ291?= =?utf-8?B?SWI5eGt4OTVVY2NFQlh3blhYYnBHSWJHQWwva05jTTUxSXdjcjVwZE5LTGo0?= =?utf-8?B?anF2NGR4V3hINGQ5S3AxNnFzSnprbWZsdSt3UDdJTlFKem9LcVlHYVptUUc2?= =?utf-8?B?NGdYYm1mbVVuS0ZxankrSy9FZ25rRDcvYmQyZHFkdVJ2VWVRRE1sSXFrZ1U2?= =?utf-8?B?UFUveUNTZUliZXNCc2RTL1c0YWx4bmF4SzVrL2JEdGtRMkVmaExsL1B0SGZD?= =?utf-8?B?c2JQclV6dysxSmlRK0RkcXIweGttbmlSR1BvelhUY3hjUm1hQ0tDYmRCWFdC?= =?utf-8?B?UFVMcDBlU0MxR3Z2Zmx1QUpiRnNqTGkyLzQxWWVrcFdqWUIwMWdqd0dqZlNU?= =?utf-8?B?ekJab1J5N2xuZGpNTWtkVmU3ZHVwVitKTld2R1VoSEtLc3JXY0d3OEJaQ0Fj?= =?utf-8?B?TGRla3VLUGY2UXBMaFNyWC9vcmkvL3NrbVRYUm8wbXQ1Ulkxb3I0bzl1U1Ju?= =?utf-8?B?OTYxU2o4UldTVEUwTDZ0M0hLN1B0ZWdhcG92TkVGWis1djJ4NGtBZXZGUlEx?= =?utf-8?B?bUZONDZLSmVScE41dUpJYWQwTm1iL1pXU1g5UTB0elczSm1udFZPZVNRWW1B?= =?utf-8?B?YVJnVHZ5MHFISG9zbUM2MHRGc1hUdGFHZ2N4SFloNWpYRnhld0tWV0NJN1E5?= =?utf-8?B?TlN5QnNFMVhuRDlPZWRaUmg1RUhVdC9YOW9mRG1jTWM4NWNkUXIyTDQ2T01s?= =?utf-8?B?RUI1SmpmaEt3UWpKdFl5RzhBVUM0d1VCWTQxZDcxVXNvQnBtcjR5WjFwZmp6?= =?utf-8?B?SXN1dURXRDBkUUE2YWxCc3p5SDdhVVExUDk4cEtBbklSemo5Rm1lcW1MR1pn?= =?utf-8?B?eTQ2TWxVWG1USnRPMHRvaFJXdEJhbEh5Sjh2TnZPZ3FnQVZ3OFNCY1lXMUw2?= =?utf-8?B?clV5SHVVSUV1R1B5RS9uUlZMNWRHZGVHQTZTOU1odVl4S2drazRvZEFQYUow?= =?utf-8?B?cjZpdVRqVzlxY1NJbXZrcnd2ZkdXWFZFb0FNM0wrMTdyeWdvUVBYVFlUK0R0?= =?utf-8?B?WDFkV1BBS2FWVkpGN2E4L1czcEtKNG9UZWpxaElIcmlhbkpReUVNUVRRUEhR?= =?utf-8?Q?ox1WF1yTy+lZ3oQZORRVGlzAwfjLcMUfJ/ys0ZdIcJ9Gd?= X-MS-Exchange-AntiSpam-MessageData-1: EJTdfrDhDzRwmQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ea616620-2a2b-411c-4772-08de84a3ec12 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Mar 2026 04:07:50.9595 (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: lXieEUT5eaWkgGCfGqdBaIkT3Pec3PdPFiJaPT2jjlcTLSkY5iS3UhhhFpVWbv8VHVumtjN9rkId9UJvjdZQsg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9634 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 c69adaa92bbe..72f173726f87 100644 --- a/drivers/gpu/nova-core/gsp.rs +++ b/drivers/gpu/nova-core/gsp.rs @@ -114,6 +114,7 @@ pub(crate) struct Gsp { /// RM log buffer. logrm: LogBuffer, /// Command queue. + #[pin] pub(crate) cmdq: Cmdq, /// RM arguments. rmargs: CoherentAllocation, @@ -134,7 +135,7 @@ pub(crate) fn new(pdev: &pci::Device) ->= impl PinInit::alloc_co= herent( dev, 1, @@ -151,7 +152,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, @@ -479,13 +480,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 Mon Apr 6 19:38:14 2026 Received: from DM1PR04CU001.outbound.protection.outlook.com (mail-centralusazon11010057.outbound.protection.outlook.com [52.101.61.57]) (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 6F2C833D4FD; Wed, 18 Mar 2026 04:08:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.61.57 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773806883; cv=fail; b=gygnUWqnOaCLnqXInASLhhdjruWj0NnwQz1BsHqYCSJlaD44Xd7I36PEVJ0JWgH90+KC5jAqSLL6MNDYkjeHMI529jehN4CUbsvjT2nLclFt/m9igALEKd7dsYb9kMIWxDlv0XQRtyRk7MOCuU5PmGgpynu3C37mp8hUmX4WLDQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773806883; c=relaxed/simple; bh=ZovocIgjnRnJdJVkkpN2FIscweK9P9CXLsubRSqWgSg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=RNhwWPLWTFIEG0k6WiQiu+kOo4b2CyWjVq76F78cbnInRm+HS+0KhvsSn2yuRJhEKzm3iC6W2p2lEsgZTSqO3wTbvG7wq5mIqCbG+JoDmwJKbee00kVyhTYkvE2OvjQ/2Lc8TnSJxnOlWWwasRveIKA0UrwfgT7IL6+BkT1SeRc= 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=IPPvaVml; arc=fail smtp.client-ip=52.101.61.57 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="IPPvaVml" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wN1wRj69YXqyjQNiq2sq7cYOe30f7MKE4AcaeXmKLL34xY1fZKhdoL717566ikgU9Yoy8x0cRnNx27yTQvdD7HM/StnalOEKwvfQkSK+KobCt4Xu40KDdx3cGJbGbVVzSxT1sWcypxdFkp2qmBZpI4wkgfidaGFQ3CokVM2gOzTtsSmEvfwkbn24+m2lnRn2JkMdbtNrQ3QKaMU3XsIn7YZUoNJKKDzCiR0ygEs7GqP96qwEn/Agona0yx5j0v9WiwzaM+YyZ9Kpka6J/8dt1JazP4Cf54lY0vRtb3KfTzNY4PBf4adrz20YEfxmhwlZM09x+Xr0DCZ1oQLSkmjgKQ== 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=cCflqQ8axjf2AKMeHhEGLdUe2L8rRz6OxxPqSRfYoQQ=; b=YOvy9QMlqjt3xhcLzXxYud0vca6KNJGE0wvXFdgjF4ECgXEdlX2qA9uWVyc/hIhMzKBF0M/dgl4o89o4UjRGx4kHmMjbDZiQSQKUROuzEBrY+mv74+rI5BWbBarzJ3VPvLqvqBx4hKKKJBi89nKltOyYJMPjFVN7nT0DR/JoAY0ZuDrWaqGB0t8bu7TGQfavTeD8Hzb6/4OemOrtdo8AQEjfCZ2sf20QJbvyHhaBZsi1K2D9CrWIfpFJQYDPJIS4dHM6mjvroITcAQVudMz2V5rgeYT6ORuh+k6zlqEamKJMUjEHkqUMp5kyJ4vwWw+KNuw8NsJbQcEnHPCcElU01g== 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=cCflqQ8axjf2AKMeHhEGLdUe2L8rRz6OxxPqSRfYoQQ=; b=IPPvaVmlyTkVItmbgQhgVeeoS/jgDlOgCLYsmiic7ced7s0uTlGjdScrqFIkl/FpeJhLHHW9tAFn+eT0ud8kaYAaSTF+cTDbzusWOKgVFTPxONpc3xCSZspi2dAVVM1tihIhPLEkVh0zJPOoaREJW9RuhIiZ+ow5JwHWrC/Nj7IF9lu7mHldKfmeUhqPL8drSxmbSp4IY+G336vjpFsXHbBCmOWFhhfsj9FCUKHug5SSodWtC6ow9qMoARn7lp2AfDhEBxKhGv4kka4cbY/qu5/PiRYTarkvrdZFkmyf3nWW/g9aZRLfnE1TTmSVjC4dA9rkQSE/XapqInCp+tkoCA== 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 DS4PR12MB9634.namprd12.prod.outlook.com (2603:10b6:8:280::13) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9723.19; Wed, 18 Mar 2026 04:07:55 +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.9723.016; Wed, 18 Mar 2026 04:07:55 +0000 From: Eliot Courtney Date: Wed, 18 Mar 2026 13:07:13 +0900 Subject: [PATCH v5 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: <20260318-cmdq-locking-v5-5-18b37e3f9069@nvidia.com> References: <20260318-cmdq-locking-v5-0-18b37e3f9069@nvidia.com> In-Reply-To: <20260318-cmdq-locking-v5-0-18b37e3f9069@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 , 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: TYCP286CA0316.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3b7::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_|DS4PR12MB9634:EE_ X-MS-Office365-Filtering-Correlation-Id: 93513646-fb14-4433-4c92-08de84a3ee7a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|1800799024|10070799003|56012099003|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: A12IX1lc8M6oxq2RMwIoov0d0r6gKODERmBWnUGOiuB97Vh1RIVUtpy2jrKWu8OdD5BzAlYl1Jozan+GvAUXzsg8FgQ9QtHQ6iOIKqvKuuomLFb8mqmXc89EHTEz03P7EInAZEv5U31Vi7TyeYlziAPqp1YOOO4fp4mQFhjeRslsyH9CoZ0EQZVlgYI3dlHt9ZqkJ5lzEegs3PDruvide4QcFqDayvpp8CWs/FexbMhNO3W+cx5oGZdYS1/E3F0FAMu70psYUQGZPlZKiRVcYCAVwqLScoqYMKE9cPSnw+GuMeD7DTEuM5uopukcN1sTLwT8j5RUDI808Svx114tsL7MX1FTtxgIpBmDy3jwM0crU6P081TMHPUCmBUlfnn8lFNhmUJTrzsU1fJwNwntZLd7kS1G34HysKoyCqjVR2sLihirLD91PZbGwV08ff0fYfLjHyhJlhMVZlT9tk0l5Z2z4Qp6Ef4r23HMY+6iZCWb5xpGhDtt1ciAgVXht7VWtWjoR0XphTeuDIGk0yU6tC/7XKr9yXdHI/zCjyxoAn3xNmuZZ7zeLf6WH+jvL5rX7bWYkV3t/C/jEWYXFkmFpukKDJcIf88eLOuDTxx59Nzc+PYE6eZdbiw5I3F7eAltJ9qcHWn1A/c6NyAMIv24BFRgEc6cF8JfX/k5lqhApTYqcxPrVWiAvz0Xc+cErXXpdfT0yWGxIKW4YSe1F/mN4UuBURO6KL+nn6GtHknmkJ0= 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)(366016)(376014)(1800799024)(10070799003)(56012099003)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UGpVLzUxT3V4VmVPcGJyY0w4VmhKZFM3bkQwNGJiUUd2SDdicGJXUktkWE5E?= =?utf-8?B?WnJlMUVkbXF1Ti92NnZNK2diZTIyNU84Ri9VdEZjNnBwMFhTV1hiWTZheGZK?= =?utf-8?B?SC9Ka0lNSFgwZUVCL3BCb1VrRmFLdDk5OXBCU1JpQVBYbUQ2b1BYaWZLZ3p2?= =?utf-8?B?a3pKS0tkMU01bFJXaG1mM01sQzUrbnB5RHhZZDQ0SWVEZ1R4ZkhYMFhLVFl0?= =?utf-8?B?QjJLWVVEb0o5cmZ2ZWx1ZXU4c2pYaDc5Uy9YVUVQVkcyWHowRElKQmtBZFdz?= =?utf-8?B?bzVVUlVZOEdCeGdkcDZTY1Z3UmZUcm9jaUV4U01zNysreTVqRm5pbHRwV2JF?= =?utf-8?B?alJuUnBhNEdVdEJGbGk3ZjVTTXdiTUlLM0FuL3BYTGdnQnc1VjZWM3V4L0Rp?= =?utf-8?B?NlhzTlhKWU1EY3dRZ1ltbmN1ZkFva3NBNmJjZ3NqTytPd3ZHeGxVY1E3WUls?= =?utf-8?B?NU9YZzlTelpqbXpBZkZGcG9wWjNWS2Y3OTVYUFFkUDluOUUxTFVCa0l2Zlpy?= =?utf-8?B?bXNIVkhJRTA4VENpd0dpbzdmSDlhOFc4ZWpCUE8rcFM1TExPeVFqRTl4N09I?= =?utf-8?B?ZzVhK1RSWmRNVUpoRnlaQlFHMVRUUDQ5emdCZm16emZBcFNWNW9IZkV3WnBB?= =?utf-8?B?MHFqZnJDZHBsdmZ1V2RMRTlqd2tISkUzWDBjUkVwS3BSRDhxSkhiaTZ4cHJT?= =?utf-8?B?WWlRYkdVejJpeFlkNE0zSE1aUE1NWjZLQktTUzVsQ3pabmxJeDl0Z05DWDNC?= =?utf-8?B?STF2ZTVPSWRuUytSZXBuVGY4blRrTzJTekFseVlRRTFVWGlZYzFzQkxxc01Z?= =?utf-8?B?Smp5N3YxSWVUWkppL0lRQnh3S0U4SkVwdGsrUHFlOXd6Y1pQLzFOc0lRZHgr?= =?utf-8?B?TVdMaGFJUWZGcUVhVEJqS3RmckNCa0RSYk91Z3pGTm9WYlV3TmtKWUNPaWhM?= =?utf-8?B?Q1JUVjI1b2ZTTlROSEdoTHl1Z2phM3A5c01OeE9UM1VqcXFqWkh6b3EwVWEv?= =?utf-8?B?VENHNXlWQzVZc2k4aGNOK2tTdUdTTlMzd2tybkV6NUI0bTdnNWZIWmVBeFNL?= =?utf-8?B?OTdWeVNrT3pxelEydGV5RmM0b3JJWU80ZEhhYTRjMXZhemxnd1RRWldBL291?= =?utf-8?B?YkZDU09ZbjZRS3pOblN4RWVRcTBnRXo5S0kwMU9JaWUyVU9vMktDL3RuOUhn?= =?utf-8?B?UGo5cEpUTlJ3VXFxMjdiWFVxWmRTTktwd0FUMHFqOXFiRmxxOWVTa25Pc3JC?= =?utf-8?B?SjQrdUkzUWczTlFPa1NpZ3orTVFLVDl4dnFYVlI0SkVoSmZNcklBM0FMbDN1?= =?utf-8?B?cHZEbTYrZkM5eVZzWnN1ZTZrbXNNRVZEYm1peVhjRFBvdEp6L1hlb1dsU3Vo?= =?utf-8?B?Q1pIYWpVM0FRNWpqNkU1SG01a2RZcTQ4NVNYWTNrcnRQMkJHYmJvUWd2Y0Js?= =?utf-8?B?L0RNR3NSRnZJK0dPWTl0UTZuNFB6UURiYWhpYk5yRU5tSC9qNll2elZsTHQz?= =?utf-8?B?cDJYRmg2QWRmSlNmOHllNkFybE5RVTRpTFpHNitKQk1WVmdkM2RiYkFkYWky?= =?utf-8?B?UVJlYmRIWXowa2wyMVhBNHNLbS96QW1nakxmT3cwS1VBZlJIWGQzU1pncUdz?= =?utf-8?B?TEV2dXJaZGx0a2xlTEJVTDMzZVpwcVVnRHRZTFBsUGg1QURFdnlFYk9MblE1?= =?utf-8?B?NnB5NmZ4b1d3U1lIYVJ6VmRrN3N0VERISTErSUxZUTdvblB0MGRQUm51bytn?= =?utf-8?B?VUJLMXd2TzJMbVpVYkJQOXdrdUpzVkgrWGZJeTdNRmIzRGFWOEE0WDErejc2?= =?utf-8?B?dlVqdVlQcnRsUFhlRDFSZ05qNW9mSk1Cb1Q2N3gyeW1SNk1vYVJoV01PVGdI?= =?utf-8?B?ZVhLVUZ5K2dBTlM0Yko2Rnh6RDkzK0Zac1l4L3g4cUNjdGF5ckZLc1ZrMEFS?= =?utf-8?B?U0N4YTQ3Z3FwOCtHclI0ZTRpV3VYNUk2SWY0ZlVCaWc3RENrQndxV2NDZmV1?= =?utf-8?B?ZDlzbGFWSzhkbGhSWjJhY0ZQL0liaU9GQXNtQWJ5dUNRR05oVkdiL2JDV2l1?= =?utf-8?B?RHZkUXZ3ZE9QbXUvWUVTS2xDU2FVZHpQVkM5N1IyS2lGaDNrY2JVSS9QVTg2?= =?utf-8?B?ZnIzcFhJazFMRER5YTJHRjQxTitsOTVuRmU2WEdEeDhYUmtyNWZwK1o1LzYw?= =?utf-8?B?QnViZFoyZU9LTVBZSjFsblVjYlA0Vld6ZHRPb3VMMGt3cjNZTWYzR2hodith?= =?utf-8?B?akVGZjNxcTBDeGxSUnFUNUN4SzY0dUJ4VC81ekw2VWxGTWF4UEQ5M1ZObkF0?= =?utf-8?B?dThLNmhRcFI2TjVKTXdOV3B1dld0T0N4aVd4Z2Z3dUoyYUw1SlN3cU9GYmI2?= =?utf-8?Q?y6zjbJOYGDyUZRbjFgARhq4w+gll8k88DeIvQpQLjh3uB?= X-MS-Exchange-AntiSpam-MessageData-1: Au8WngoquzT0aw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 93513646-fb14-4433-4c92-08de84a3ee7a X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Mar 2026 04:07:55.1269 (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: pf7i9+6wo0iuIeSjwBiCDsxaZXdkKoG1INwzy4eP46aV1LVYixFpsUGaNcOBs4tk3yY8tFdQ7pyrhZKTCVrDJg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9634 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 | 170 +++++++++++++++++++----------= ---- drivers/gpu/nova-core/gsp/commands.rs | 4 +- drivers/gpu/nova-core/gsp/sequencer.rs | 2 +- 4 files changed, 107 insertions(+), 77 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/boot.rs b/drivers/gpu/nova-core/gsp/= boot.rs index ffc478b33640..5e73bd769dcc 100644 --- a/drivers/gpu/nova-core/gsp/boot.rs +++ b/drivers/gpu/nova-core/gsp/boot.rs @@ -137,7 +137,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, @@ -223,13 +223,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 86ff9a3d1732..d36a62ba1c60 100644 --- a/drivers/gpu/nova-core/gsp/cmdq.rs +++ b/drivers/gpu/nova-core/gsp/cmdq.rs @@ -12,8 +12,12 @@ }, dma_write, io::poll::read_poll_timeout, + new_mutex, prelude::*, - sync::aref::ARef, + sync::{ + aref::ARef, + Mutex, // + }, time::Delta, transmute::{ AsBytes, @@ -448,12 +452,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 { @@ -473,18 +474,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 @@ -508,6 +508,89 @@ fn notify_gsp(bar: &Bar0) { .write(bar); } =20 + /// Sends `command` to the GSP and waits for the reply. + /// + /// Messages with non-matching function codes are silently consumed un= til the expected reply + /// arrives. + /// + /// The queue is locked for the entire send+receive cycle to ensure th= at no other command can + /// be interleaved. + /// + /// # 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 @@ -588,7 +671,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, @@ -608,54 +691,6 @@ fn send_command_internal(&mut self, bar: &Bar0, com= mand: M) -> Result } } =20 - /// Sends `command` to the GSP and waits for the reply. - /// - /// Messages with non-matching function codes are silently consumed un= til 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(&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 @@ -691,7 +726,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(), @@ -726,7 +761,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() ); @@ -755,7 +790,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, @@ -791,9 +826,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