From nobody Wed Apr 15 13:17:34 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010070.outbound.protection.outlook.com [40.93.198.70]) (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 A467D3502BC; Wed, 4 Mar 2026 02:47:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772592453; cv=fail; b=AIzbvYnKQrcek1znFbjjGZsxkqWrD4xWyFxxqHeYY6ketFGRekExxL0gREpT6LYyI7fJa033+V12vE/EnhWQrbzi6gVsZg5KcCS2V6CeUGSuVZZGTzTEY9yaCbJoJRhnqmrwO+1lL05x83LQob8Bjwes6EX9IFTHISzLR+DQetk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772592453; c=relaxed/simple; bh=dUXTfg4SOKRu0nKnhwvSspDjSLIwhPn4ztl+E3pz8Dw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=SjuZxb9mhjbWCaMDuPBwMoqxLKXI+Se7WDadEPYKMZ7XWbnEo2NpabzlM3/ZqNZINIxK0kFHBIppolcyRCCrHxPZDzggYg/Zrik5e9lJeqRK103GcuC4K7e/Ogn4m00AxZTMzqB9fXRcMzD8UbK9n+1emaV0u9VxC8V9y9P4hMY= 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=Qqp2Ixve; arc=fail smtp.client-ip=40.93.198.70 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="Qqp2Ixve" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=L3XqesqPfCBAjDPKtWQDPPqSvJJQI5Zmht69r87gzbJz6yMKtQbefFDtz6HhSuXK7kwqBrroAf2pnZfFCQoMTKqM1s5rzazQnAAswqEdUcyHjPFyjTnFYylkkoDusgpS8MDmmvkStL62DBOwAOC7/+M6v8q6uDBmYwUlFfsoi2xpzbGobrGrFoNxj0eHVsHMlUazoogmlXzLlMyAVaTV+ubsgijiPmdzKk23EK0aWz091fAz2C5XkgNFJGL/JhAV1+ocXSwfhMcdvWnXQvP87B5Hsf48aEVR5XnlkTd+OI8hbt8lmfAVmSNYG8sRwNCawDKvSi5oXSAi7LdUp7hVfw== 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=7Mmxnl06EMHWsoVOsp2XrB07xa20Pn8JwbQk0AYBRC8=; b=r6SF3Ur6cuheGbMlM7S4z4e5DBEO73g9GAeXTM6DW+KItT57MwrpjR5qWUczPtYlhdEWgcaeNe5xlLYCfHxX18BVsNy+sFesuRuQpjhhnsrgpH9Dy4Fn8j5YY96otCwztVCkIlBzCtdM1YBzcV1r4ffpplsCn0mqfJVFm6wR/7Skr8qic92SC8JRNL//9K1A+ohdNkuyjmIEVw8p2AnflyFs08Y26QnY1y5UMLqE4lyEEQ2dya2a0Vj4/4QAF7vNhLVDKcHbziwgZw05zO+WGlUUq+csyPmQbm4jtZP9mjGdb8Ms5G+gJaogwpSA727PSFRbmUmE7QOkQ43XwMrTrA== 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=7Mmxnl06EMHWsoVOsp2XrB07xa20Pn8JwbQk0AYBRC8=; b=Qqp2Ixve1CFdJdFrsVM3D+8Clz1tjnl8bnbWEUSWCJlle9HPdIKtKhHCxTAymEGkada3DsU5Ftf3oGpJtGglJubevJo9LHx05ifSxgm8vJDZDUyZuvAzhXBpLQVtE3AxDl2ltc3QHYf7hrK7KFhYkmVC5NH+XiJRtnO3g+rMHB2dMX1fT4NCMjiwXA6cy7EG2q7KkCf6/LfRG5Cnt0g4GSztRYHlQUXP/DmkWXm2DqTcyP7jMOT9L6jCsRCsR8uNbVl3N0k4+qp5dHhw8xkFwQj1xtCkV96+xYR8w9jV9g6tOhbRJzCl4mSq7jM90mYfUpytI1BRbBlrpaL5z2I/cg== 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 CH1PR12MB9574.namprd12.prod.outlook.com (2603:10b6:610:2ae::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.14; Wed, 4 Mar 2026 02:47:26 +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.9654.022; Wed, 4 Mar 2026 02:47:26 +0000 From: Eliot Courtney Date: Wed, 04 Mar 2026 11:46:36 +0900 Subject: [PATCH v3 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: <20260304-cmdq-locking-v3-1-a6314b708850@nvidia.com> References: <20260304-cmdq-locking-v3-0-a6314b708850@nvidia.com> In-Reply-To: <20260304-cmdq-locking-v3-0-a6314b708850@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: TYCP286CA0329.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3b7::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_|CH1PR12MB9574:EE_ X-MS-Office365-Filtering-Correlation-Id: 32ba0e82-1381-45cd-29ab-08de799858f3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|10070799003|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: fW8TVgRh1HIVPkpUDGI5leLp5oBnWoPyNRxFIWliZ7gIvgxO7JGAffcLhSN9bkU6ZnhoLKs1iCXT47W6Z2Hyag9YPvQIWh3A9ZpQ+gUpGFzRjVBQ735tgM7k6P/9NRT6oDpR7M7gKH8+0gJcnL+Fq6hASHC7yFdgS/CqjqIyKRbNVnUdIxy7jCBA/BNLkD2GcK6agzV8ICXSKy3qo+nR2q+WENzqnrBhJVww2t39u3DvsvNoGQ/Kf/YEEXc0hNZlX4D590jdHomQiE1+mR0b5JF2sQ8iqFL8WlILLGzwj8eyQ28BS5M9yxXghmrH8LYwUTTuEtmiL9XKJNLeWe4tuL+Fg5DhMB81Up1T5F7cjhdAnkT0WOCoQB2qRyBmeoDFi/4U5qAgVbMFtmdVP8jr6aTATYiX0PdatBIIY0/R1+LnluNLHqzvV8oaJyurBQQnqRZSoOzTFqVvOwSDe/54kVMbu9TpDQIdY8pWQ/nLadBrnwoFExAPZRFrypp4//kTOSorf9VlG38sffm9ngyCsncsiBRvTME/FITHD3sMZj1yP9ottZ6fveuulR6HEX9Xfe3tgp30xCYhNhCfUL97+I0ytSVmtQZnc2yPcEcluj8BdouxJ3XexOdz5kZ59EQrQanSiHVegZ96CYHcMUBR2LA0/ds/ctsGCvov0eMdPxcA5pRIgRl0woJxu5HsAoOHTw4xy10LKKlq45eGvxd4UjjR5alzgSFz6dpG+oIu9dI= 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)(7416014)(10070799003)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?aFhZTTRhQ2JUekN6TE90eG9ONW93TzNOQW0zMXFOalJGOGRWRGlrVXUzMjV2?= =?utf-8?B?UW4rQXRaWjczaFhJc3JVc1dkemJyNGZwa1E4Y0dTSFpBK0NlVU51bU1JTXhD?= =?utf-8?B?RHM3N2lkcWJMakRNaFJWTG0xQ0UrY0s1WEhvN1Q3bzFmc3BHM1NEQ3huY2NK?= =?utf-8?B?UXVDRVFTa1Nmb2Y5d3Z5TXdMdnoxU1ArK0tXTDR0SDVjb3RtM1hhTURFQmxJ?= =?utf-8?B?UWFrTUFlOUphS1JRM1pUaldnUVFvR25qVE9oVUJMdk1TUkp6Y240S2wxdjdn?= =?utf-8?B?QjBKUUZDSnd3ZVBvS0p1NFVEMnllRStwM2VrMjE1YUU0Rnk4NEpaWnFtWmo3?= =?utf-8?B?Zm5XZ2I0Z2dqM1hYY1B4YkJORFVxMGhoenBzZ3NLMEpDODNnQUpzb3h3aHNO?= =?utf-8?B?OUhBQU1CNWY5TVpQWTk0MDdGV0pyczNnT083VExWSU1INGdPWkdlUGYxVmxY?= =?utf-8?B?Q0htMUZ3NGJZZ3VlUTNUTVB5UW03eUtqbHlWQWZWbFY2UUFVWnlQV1lZTnJx?= =?utf-8?B?dFBmZjRscHc0ck5VS2hvOUNTT3RmZ1BBTFBSVjZ3VXQzQkZMU3lGM0JSUVhT?= =?utf-8?B?Z1NldUF3S2czSmpUWWVyZ3dTQVNaTk9PSG1oOWxyM21mQms5SnhMc1RJNEds?= =?utf-8?B?anNJcUJJWnViNzM3TnkvTnNyY0FINFlCdXNLbzVSS3BlTUZPMjRLRm1sSlNC?= =?utf-8?B?bW1oSTFHQzZTMGZMbyszQWJqWWJmUCtGSzU3VFI5bHV3bmVCbTQyUWRpTzVo?= =?utf-8?B?ckJwMC82V0k5dEdqTC9xaWFUU2FVWVN1VUQ2dnFrcXBZNXdOVWQ4M2JBN1hC?= =?utf-8?B?dTk4WU1aY3lxNUpudTcweXBqWThSYzJFQllZTHJKTlNSVjM2dzFSUkVVbUpS?= =?utf-8?B?eUU4cGtTaUowWFg0bkNxYkRpNGV5MDE4WWhaTnlSdDFsaHhCRnl4NDc5SDJT?= =?utf-8?B?a2twTDd3ekd6REduYktxRTZsaEFlOHc4dzBHWXowaFB2ZXdhUmgwNEE2bkVh?= =?utf-8?B?WTRQTDBvaFZhdU92cy80eEY1N3c0MTMyeWg0ZlZjZ2ZIZVNNWG5QL2VDY2Rs?= =?utf-8?B?VEJHc0FsT0diRng1TVZZSVRtaGNSek9ZVFdNZVVBSXk5dlpIREFmM3pFVWhX?= =?utf-8?B?WHozUHBlRlNadWlHcE1rdndSazJ4RXhLS2UrYnpoOTZaMmpPU3dQUnNUdjJz?= =?utf-8?B?bHVmTHByUzZPZ2h5Um1mK3pwN1hhNzd6MkJTUVRHazg1Ni9NY0tJOGxseGN6?= =?utf-8?B?WmFyQ0M5S0dGMlN2NDFINE1mby9GQ212WlFkSGRiYm8xcGtpWkg0RzBVVXJX?= =?utf-8?B?Z1Z2MGFHZy8xTVFTTmtyRVhmeGl3SEpscmY0MVZZdFVjb2pHR3l1bmNvRVR0?= =?utf-8?B?YVhoQXYzQ0cyNm1udlNQbTlnUTYyTjJlYW9mODIrRU4wZ1V6VXhZUmFMY1Rp?= =?utf-8?B?K0cxUUxmWG1sN0RjcTA4c2NmeG0xcG9mSFpUMll0VTRHdnhwSkpIcFpEdEZs?= =?utf-8?B?UmtEOUhTSnB1ZWFOd3RrY0VXV0QwWWtrbS9QN1ZMVTdaU0RNUTVtSm5UMURh?= =?utf-8?B?MnVCOXdZeVQrRmwxd3c5UDFuTVRnNDZobVdwc0pKT25VMDh3Z2xZQnAyR3dr?= =?utf-8?B?RUpKRWpNL3dwbEl4Kzh4UVM0YjR4a2p2NGE0TW1EbGREblJ4M3JvbUZKSnJ6?= =?utf-8?B?Y0d0OWVHOTc3NkRGWlVYbElYTi9NVU1HN2FMenhuUU9QQUJVUzljZk96d3Rp?= =?utf-8?B?K1pHZUpYVllKc2o5Z3FhS3FQcHYvK084NjlJdTF2VCtsaG9qK2ZwQjZYb2pM?= =?utf-8?B?bjQxKzBmWW9rZTZzL0lrNEVNTkdrT3FldmhMYkNBNHpKbzdEWGEwU1Y3cGFa?= =?utf-8?B?b042UVpHaTh2Vm94R1BYcmpXRFZXMzBIczJidFpZbE9QbWdHditJQ3JVRzhv?= =?utf-8?B?dHEwaDBrcCtmVDZha3VxSWQ0UFhOTkZrbWtleVdWVWxMdjg3bXJIYXJIdnZi?= =?utf-8?B?Q1ExTUt1ajVkTXhKR1dzTGhlcG43ZXdqb1Q5OGhJdjlPdEVWa3BhYndPRDhk?= =?utf-8?B?aWVxNjYvSEpmZUZlUHl5QmoxQTQzcWlNOCtmSlg3RXpHMDRqa0R6Y3EzbXYx?= =?utf-8?B?UXl2UUdOWVhuR1E0UTAwL3hUbjBVT3cwWDFRYTk4bWltVE1UMUtiL0g4ZlZ5?= =?utf-8?B?cEsxd0VVMUs4MHpqRnpYT1g3OWtvaU50WmhpYUFtVitxR3hVaG15U3BvblV2?= =?utf-8?B?Vyt4anJnbEVPTExtN0Q1S1ZMMitYVVp0dXgwbHYrUGhDSkNSSS90VHlMdGtp?= =?utf-8?B?R1BzbWNMM29iVEx6b1V4aTZ0a1BSTE9xVWg3bW1pT2RXWXExZkpGS2JuVFNH?= =?utf-8?Q?H4OClAs422sRlxqKeqQtn4STPt1crL5aah7zlonZVhaa5?= X-MS-Exchange-AntiSpam-MessageData-1: jqH2DtnFoxGM4A== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 32ba0e82-1381-45cd-29ab-08de799858f3 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2026 02:47:16.9305 (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: ylIbdOFw7XWVJf4DWjhbRps0I6bzDiROdHMwPElizzJp46z4ZuJGHeVXzIYlvpmOLgxm2PDCVpYraDYhpBE13A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PR12MB9574 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 492e9489e808..4829830b6921 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 Wed Apr 15 13:17:34 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010070.outbound.protection.outlook.com [40.93.198.70]) (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 1C4B0352FA5; Wed, 4 Mar 2026 02:47:34 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772592455; cv=fail; b=bjuWWdiiywra9+FpjWvVQQ+Og8sN7d+ylUoT1mna35VIQOI0766eLHoJqtOiiI1w9Vnru4g3gqfCIaDE+qVWnuSDXHJzvgYtbMN3kA+4NjqaVKl3a+2LMEg7yb6o7VxtCH8HT9gfTAlEZkI4nk94Q9CgSvtJkW1C5kYp9rHZwXg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772592455; c=relaxed/simple; bh=Z+uP1WrsJ+yTv4s/dDy+kw0pusEp9uX+cyrKD81r8Ok=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=e94X88No24iO1RACNQP2u9yKoKJHmYSL63ceXtUJgLxi5/r99+acEnTgVN62pF+mOr8KgTZApiuC6dJC9Z19s1V+NeDWhTkNYGkrZNLjBiE3fqyl3r/YxARNaeHMOqVWVXiRlSZuJV7k/mWwTnA+j6KdW2eMqEOkSbbBfnvfHug= 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=r52es7LY; arc=fail smtp.client-ip=40.93.198.70 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="r52es7LY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JeftWD+KwTlFM3hwTnRAHA57j4qJrWG7X9SkH8EtZZZd2PBAyclC7ehzAaR+RiW9iX/ECuH/McOkj+qh4kVk7vcsj/QpBjDekOlmebtHz4OPCVmRulP2lEpAc1CemD6G9ASPJaUpGdNMAKodrBzdcMnD49qwNOzIq16vbrdDdNKc6wzGx7+CpD17DRa5WbAPcV5PqyOyPzO9kxDNIMGXKGSiFfdsNOFkFs5klgSw47IMRJqwfqWxjW2FLPKbbFPSoPNoo/sZzlI2zevnOGvZoW+Pzwcyp3ER1o6VJ/MOsjqjblPcxqE5k3M4Zs31r7KkuJWqRlaqrINkZw3OlUSQuA== 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=G41l9H8siiDcMWJXq2NBgNgtTx5VUhviqOjGRbG+334=; b=pPyPXvodVS946GplC51K5JEjIT4xFtyiICzROgxgOVd+qvvKb2griuYQbVmzTWlnFSzUig05lmD5SbXubNiygkvK0ftD0kW2jkNdEWKfI8SqfuX6vpILwnzFEuNrCMCxoajGsBUuwf1i9b053tXIFVvx59jdxjmeUX9vb1IgeMcLdsDITMQbVNM/rwn8+FH9R60LH1qHf9c1bOkAsyXBMwoT+5Bg/FwkidSKc29MRVubK5OQF9dEQHP+swlzwa0/cx0fK1s+5LkhhMPuaxPvrOS9wXBtp8fpGVR/s/8D9o4WLvYUnIlR7QXDyVoyZno/1Zj3TxooNl0uDFo4GfHuJw== 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=G41l9H8siiDcMWJXq2NBgNgtTx5VUhviqOjGRbG+334=; b=r52es7LY/UFgomUGjG8pdkP0oUW7ZhL20QgsppeExBUd/UCJNZ8gf+MdoXmiW62/EOUm48gghUYMusGGuTQxuTJ58PU11H9GCntk4wu2lnoQRjsoK/2yTA50LjaRlzRnsR5YHq/9L0f7nW423+qbnsFXAXhRGJYkfUWTH+Fg5jzX5tI+vop1m2LVaXHbYd54RTH7Y4w0OFXA+x63f94zXBSv5RtJksg99m6sK9I5DfNApoFcBauBkfJoZbNlRTYqvwrDv1F48nBMFNH/1K4bLKdAAdrJ1afalBY2etCNK54TDgtOB6+grIwSVZtPoOsgOb5EqUa/s1ULV4J1RfdrEA== 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 CH1PR12MB9574.namprd12.prod.outlook.com (2603:10b6:610:2ae::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.14; Wed, 4 Mar 2026 02:47:27 +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.9654.022; Wed, 4 Mar 2026 02:47:27 +0000 From: Eliot Courtney Date: Wed, 04 Mar 2026 11:46:37 +0900 Subject: [PATCH v3 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: <20260304-cmdq-locking-v3-2-a6314b708850@nvidia.com> References: <20260304-cmdq-locking-v3-0-a6314b708850@nvidia.com> In-Reply-To: <20260304-cmdq-locking-v3-0-a6314b708850@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: TYCP286CA0321.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3b7::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_|CH1PR12MB9574:EE_ X-MS-Office365-Filtering-Correlation-Id: c9a6e395-0edd-4da8-44e5-08de79985b7c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|10070799003|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: YW51JaGkOVjLi1RcZX7NVHUxp42zXLafTnyLLeaS8wf+jgY3PwTcL4pK3gxnbJfmpboIfkMy8Soy6+xR2R6teEnz3J47mq/owFqQqM76pOoO8uAzlQFOWIEMzsJzae+TLOgq0DXig6cRkBaVLCmdTE+suEfWtRhxAdfASUbnPBWZ/kZJZMrscg9rXcqYsmVCcN/bdrDU2M1LTO0a4m/Ot/aNyhGuPIOWfa8BK3xRVcIwy/OW3+07MT8IPsxv9CmJWhwDuC+seulyF817LGBCTM2MRpSWkzrtu5AjE2RwsNlAsNum3vfUpZpUieC16Aeibv/UWwTrm3WolKCLTM6UXINjrIBtnt5j+bsPaUj+4xvS+a6/8yGpeQuNGahDZwWktoa589pVO6q/IAvaaQzO5SxCPTWqzM8DMpZ419FUCHJY2Sdxgit/P2PD/SxQA2atgze28vpBYeA0YcNmBvPb4J8XKO5YEISw227ZsI8hVkN/rzihIUBgu1A5MaPcRYdXDFz61PvQcnMHemi1MJpVftYNKLyU1lUXoZK0vBvOpa4CfPzYASfe5qCH6QJlBAWtZSMFiVpISxzakLfHmRlyInOSMio+VUoE3L9bv0jC8altW6tYoAdOeLSvQZQGhq4i9+Ug2GjAKPzwAd+kLcmmpWUw2cfeiGUDhP/68r95Rlz0Y0hTkf9EIZMs28tumsSCG6QSagSWHSp/+0cb89MO+yIYVIIrmg9OT+f69DyX4v0= 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)(7416014)(10070799003)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NHdyUEF5c2RodFIyU25ISzlDVlMyM2IxUTVtbGhrdGduZEFoTUJVWThWd0t5?= =?utf-8?B?Z2NaWjd5Zml1VlltQk1NUlpOYkJieHdhQ0pncGp5U1lURURybXNlaGRzSmJ1?= =?utf-8?B?TjhOMXJkNFN0RGg3bXpUcTkrKzFhb3RCdDNJTklWeDQyY2h5L2lCZk55M1lR?= =?utf-8?B?ZWhQd01CczJVVmZTVWNEa2NrQ3h4WEY5VW8wMmp3NWxOVm9TNUJTc1BkVmI4?= =?utf-8?B?NzJoRTV6dHpBY1RPMzBYRGhFdjYzcWQ4ZHk3U3AydW5KTWFlMlZQb1ErOXJQ?= =?utf-8?B?Y3kzZVQwMkc5dTBhYWV0QTN3VTdoMk5tRlBIYXZNL3kvVU5TTWhQZFJSRWVZ?= =?utf-8?B?NTF1ZzNNMEVPY25xMzRFbUFZVGd3VWx1MHJ4cHd3UHA3cC9QZmVzaTVKN1pl?= =?utf-8?B?MGYyZkFCTTZWd0poR2xyZUlqdmNlMmRzejhiVzk5cnE3QUF6QWx5Vy94d1lB?= =?utf-8?B?R0Y0WFpXMmtwUDZFSk55Uk1GeHNIZGdwSm9iWVh3ZkpHNkdYRTR2QkJWL2FC?= =?utf-8?B?UVMrcFdHTEZYa0tMWWtEOE53d1lXeWh6Z2hXVzlLbGwxRnFJYkdFTnNsNlZB?= =?utf-8?B?MGF5a2p3V0oycm9OWERYQTg2M2t5a25yVWRLelZaeW1sOFJpdnZHYmZMalcw?= =?utf-8?B?dkk5WUE1b2pYeFZpTFJRdldiaDRwSEI2Mlk3UFg2dC8vamVzQXpZVWZPdjhB?= =?utf-8?B?Z3B6YjNnSWI0YkkvU3g0WFp4T1A0L1RHSzM0TGVCcnluT2RpZWVtL1ord0Fa?= =?utf-8?B?MUhWVUJqejBxRFpwVGVndkRUdXBXVUdjT0tlakdjN2doRUtkMTdGeU9OdmtH?= =?utf-8?B?YkpKSTlESmE1YXAvc21LcWI3MzMxOXB3N3A5YzZIemVBMGlVekQ2dGNIV2tK?= =?utf-8?B?c1lTODJTVzhvNFBQdURYRURyQVQ4b3dvUlpvUlRnZDAxUmFnNDRhdVJHNDlI?= =?utf-8?B?Zzh1cU1HSmxHNVgyYjA4V2RJWlU4S0phUmM3RjRCUENyMWNhMWtXUUowQXRQ?= =?utf-8?B?RjliMUJscTVNS2FKaXBoMWZBRU9XaklDc2dUeWNEQ3lpKyt4Q1lEVUR3dU1x?= =?utf-8?B?aGFNM0FDTWMxbGJjRS9QbzlXQnp1YUpzRkdkUCtRWVBxZHVWWlNhSkUrTm5V?= =?utf-8?B?SWtYdkZPYnJ2WS9McVFpZnIzQnVXa01RSWUwaEJjVk1vS3A0aVlKaFhkSm9k?= =?utf-8?B?dXl3NXhOejU0eGY2c1JraW0vZm92N1licXFWc3h5VjVMU2U5NjY1K3g3N20v?= =?utf-8?B?azAwN0ZGSkU1b2daNzN4U2JSQng5NVZJdE15eldKdWFwWldJNlZqT254SmZk?= =?utf-8?B?ZWlrVnVNczdJOFVkK0ErMFpFT3pOaE5hUnNRYWdtcnVGR2g2dDZ6WUV2bTRn?= =?utf-8?B?NytpVWJ4TkllVm55NkJFMXFVSWVKZU1kdDZMU1NwSVJTQWlySDdKcVg3eTBS?= =?utf-8?B?RWE0V0lFYWEvSGQyaFRJZjUwTzFMSUlCanFSY1U3VzUwbWZVZ3I2Z1pEUXhG?= =?utf-8?B?d215VU5mVDQzdHVXNzFBN0orY0FvNDFxMFYwK0JMbTZvUHRRaFdjU01ZU2Fk?= =?utf-8?B?dVhqTkVYQm00Wmxreno0ZzN2TmQ4LzBQWnlLbzJRZXExUy9GNFNPcmVNd1By?= =?utf-8?B?QU1pUkRpUC9DN1ZoY1VRNHZlTElqV2FPcW5kK1dXNWtnRGljdkxmSHBrYmxU?= =?utf-8?B?dWxtSlJhUmNLUVFHUEw3MW1QTWVHZzNSWlRYTDRDSzRBTDJJb1NZZlROaXk3?= =?utf-8?B?eSt3V250dE1HeFFsSlpzMndLMHFzTTNaUmhLUXJqd2hKT3I1Y1F3WUE2a3B4?= =?utf-8?B?Zk1ta0lBaGlPcXZJUTgxM3hJTVNiZldSeW5yOGNzdGphM1IwNmx1bVlzMitE?= =?utf-8?B?TnBNSVpCZkVoRkRYSEV0NmlPN3lRcGJDVE52TDVVNUVjOE13elV0SGtGaDR0?= =?utf-8?B?L3ZwVXBwYzV4bTF2REZSb3FxWDh2dGlsbWVsU2tEdGdYbmVObm41Zm5IbzlU?= =?utf-8?B?ZUlyTFovbVJJSDdNTVFiNDVOcUZOdHNPMFNoRHErSWpVZDYzUUlPU1Y1VlZK?= =?utf-8?B?KzBVd1EwbW1jbVRRL3ZzeHdCd3diVVJKaEM1c0JSM01sck9DV2ZPQkRXckNn?= =?utf-8?B?MnA0RytmMFczdXUrUVVHUjltbEJJcHpxU0ZxMTNVTG1UZnQ5Yk9iMmZSdW96?= =?utf-8?B?NTljL3dQVWNQaER5NmdCMnh1V00xbEE3Y3NwbkE2bGFTK21OeG9nQWlYSjln?= =?utf-8?B?QmxOaVZZdXN5Q1VsM05hdUs3MlpONTF3QUdhbXpickFGeEtJa1VrODNjTmpG?= =?utf-8?B?cmNMbkpuNGVMMVBMbVoyekRUa05DY0RTU25GQmRGbnd4UVpPdjMwRk81N2xO?= =?utf-8?Q?Ak6eQT0wac8tbnFhmmRY1JjFHCPziUeyyiDw3XrAfzi8P?= X-MS-Exchange-AntiSpam-MessageData-1: Wkf5KlSRxFLoUA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: c9a6e395-0edd-4da8-44e5-08de79985b7c X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2026 02:47:21.1075 (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: KGKXl9MgZde4XGM1p+kWHsXNiP+/ymtSx7aVllAyn2y8uK3bSglfX5cISlzeEEK5eCjXo3pu8+F7duAJJI8U1Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PR12MB9574 Remove magic numbers and add a default timeout for callers to use. Tested-by: Zhi Wang Signed-off-by: Eliot Courtney Reviewed-by: Gary Guo --- 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 4829830b6921..0192c85ddd75 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(10); + /// 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 Wed Apr 15 13:17:34 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010070.outbound.protection.outlook.com [40.93.198.70]) (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 933FA352F95; Wed, 4 Mar 2026 02:47:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772592467; cv=fail; b=ETJNNwdMh1X7yCFYwFLoCDf4ZWv1w+iH8iR0eOfifSJ+66nAjIR7pVLRIc4raxBtE5CXNe77cGPvKYpImOmWemforwZBxAbuaaWb/TBhOHbx8+uO3Sb/Gd10+291KcSmpVwKKRW1pffgULmtQrtTDO2O2XXWZpRqv4+0EkOmMy4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772592467; c=relaxed/simple; bh=/3xqaYx1BvRmA8/B5A2CAFa/iRyIwt6vAIUJwE3tr6w=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=UfQ0/6pgSZ0GHeQ7rSiR91nFDmbIw9fRjupyfUNRLmovc/IiabtbNiQrOUz1w6wpoFUYlYlubFyXpv6s2s8WbpHpeLuC/MyNzc/uQVw/Z+3+ePWYJoZlnGB02rdNLU9cc50YhErlj9cbBGIJKn13vLbT/WAWF9MvDI6Urmofwvw= 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=lG421SJ5; arc=fail smtp.client-ip=40.93.198.70 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="lG421SJ5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YaAK6giX7vljx+cdV1NQKlO8Gxo7E4BdXUdrIlmIbaoPA9psBEcu3fa16Os/JKsoDbGX02gMGmV890CD5Ow//Zoz50g4zw4df07zZ2OTBspni1bvg44L5iKeGRDtco1CskunMlpuYwGXDdLGLEYvDja4lGB9DJhudAq9g43aWt4HtllLOHzaMoOkP+7mMrnfe4RO6dSi7P6U4mMWESoAV+8EFn7/LP9j2Mui/KV6R1l74/K/y6unreC13G7WlekeYslN9tf4mdsHyu5qLiYMdPysOXRILoj0Ip/gtNksoJfxk5A8821SyeNSHn23rLdG3cEfMGXyauJyp7b5tmyPpA== 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=8YsX7BNVG7I+OuD+q3o1i/z8NSsXIkx0VW6naQl/t4E=; b=oKchPLwszZ/kfw2OFm1mcP9RFJyGtgSBh63KNczwFcAtJDuSynpbkc927l9wK13ocxhBDrxQltnmoS7nvmvW7DnmM+kQBUWvMclqP98D+dkWr4loPlkzBMMo6vk7jo7/1uUzAXkPTUHvVl5mY2kLml2fWMmhy7evRYVm4zbRwQk9AmFdthZQGBLjejI+s/lFlc7aeuPoMEgZEDSfWl7z9JCLnll+gyV4Vvn3AHwpbi+lXlbcyKdqsLSrsoOGEvutCOFCmy6zouHRRgh/0ajbAuKDVGoovCAjM1ZIh9aNg70BWS1WfKzHw9ty2IisVJnMXR0q5lhOA+bLLkKV1XgAjw== 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=8YsX7BNVG7I+OuD+q3o1i/z8NSsXIkx0VW6naQl/t4E=; b=lG421SJ5iKw2o7/0/q8fMpCrCSGAPYcl1QkBI9TVDgIhuB+pe1P1qT+62duV4n3EK18K4djDqlD/xYbKVG5XcohvmkQsrCCr5jzyl44ALWL0hRxnN/PXZ4F32mNv1IxvDRqw0X8p9YAWgvUo73MqWyvAVMIcRm0W1ywH1RvtJYQpMJveqUi0DY09+B8IaL2a4osOENcWrPVitiL+Y9h2ymSAfEsJLoHtl7y2xTFHhydyDiwY/YQEZCmtZHjOV2f7uzAysLOeNWb0sy0cXIPPK2kh0w9BYbDx6pb/fPf8HkfNP8Yf++5VJwNt+DEz2MXFbTDfTNYzJGyV0gwfQ90JZA== 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 CH1PR12MB9574.namprd12.prod.outlook.com (2603:10b6:610:2ae::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.14; Wed, 4 Mar 2026 02:47:27 +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.9654.022; Wed, 4 Mar 2026 02:47:27 +0000 From: Eliot Courtney Date: Wed, 04 Mar 2026 11:46:38 +0900 Subject: [PATCH v3 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: <20260304-cmdq-locking-v3-3-a6314b708850@nvidia.com> References: <20260304-cmdq-locking-v3-0-a6314b708850@nvidia.com> In-Reply-To: <20260304-cmdq-locking-v3-0-a6314b708850@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: TY4PR01CA0091.jpnprd01.prod.outlook.com (2603:1096:405:37d::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_|CH1PR12MB9574:EE_ X-MS-Office365-Filtering-Correlation-Id: 4a421c3c-142f-44b9-1156-08de79985dfd X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|10070799003|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: iOKnNKQ7gLO/MqWG5oOyTnS/OHXhc2hfbllIgLrOH2knemUYo2htGerZt5Tz4iN/EswbK4bCjYvVL1Bd/Uv+bMqF9LUqzah5+jWh9FyICwrIUs+Smk2Th+jJbSkOrM3nVSljcb8+ZX45j58k41JKeAXw7x5QkWeb9G0DaQZNbwL4zeCYUd1xWSo92NjfTaI2HzXVbVQyh+/Wal7CLX/UgCi6ujKxxW+H3HuLGXOJSanulr5vONYR9Eub0GckhrucM3506k3pj+cjAvBQJ8ZaRWrYDSMsCWcfgXAqZp7MuiVbHvxXsD3TMBKHJGve4KZEM4LzG25dtm1EegwE2pGyMMUoCFU//LXk0fv+RVhCoaX9qrTZ5j59sbCfq0aJ1dBUAfiMXKhvZAAvdZYumqp3YTUjJS5l4wbLPqcey5jaP2wYx7HB8AbS3O7vnwPiqCqzV5E1gaAj2x7XMOs8pQTMqZrxHBKP96PHGBd54fJYySOxlnlYutVCqmNrJguW8J6O7huDTa0ZSlioGALzJbLiO5wD37ufTOgVbK8GDW265ixyG7+CTyHq90a7d5gSYCYsINaCLD4rSO8zQI1cI0bi4FipRgl8URloesaAd4FJVBeZB6t92qDLf8lcA5v94h+iDuf/kyu2U/vSnxJ0A5k8Sb+kBYPVVlzDmA1YMKDe2dB5eajaWbKpsna4XNpPoWC7WXX8UHAkQlbrVR0NhNr+XvghHTKLlx+hDRAnHCKZ0o8= 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)(7416014)(10070799003)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?M2VLaWRaYXBiVWQwSTlpcjM0QkczNkpoTlBSdkxCS0VmMFEwRHZCYjVkd3FB?= =?utf-8?B?c3dKQlJ4NEpMMC8zVTRtQjRONVFDa0xEN3Y3aklHWGVQOHlmWXBjQ1paSENN?= =?utf-8?B?TWUwdjdDN1ZTVzhyNzhIZW1RYnR0MmcrQjlLKzNlMjkxV3NXdE5mNE8zenRo?= =?utf-8?B?Rm9MWWs2Rm1LclQ2NFJIT2xzWmJhZUpMclA5a2JnYzk5QWJSeVE2MTJnY3Y4?= =?utf-8?B?Smp5V1hYSTh0T1FONFJWNkl1RVdia0xvVTJDaklMZ21YZlNFd1hlaVE5QitT?= =?utf-8?B?L1hCbXRITEgrRVJFVUlEaXdKSGxPM2JGK056TThSc0ozYUY4TllCOFZpY2dC?= =?utf-8?B?M0xncXJFbVhsR29pTHFLNmZlOHFrYXFlbFNoUGt0dTB3ajNOdElFVzR3Yis2?= =?utf-8?B?S0VMc3NoQTFQazZRRnUwMWEwY2FWZytZbUpTdVJxNmNFUkFua3lVL0JpSUVt?= =?utf-8?B?SEp0RTZvRWxUaTlzZkZTV3JreE96ZlY2UGZzN3c4KzFzSmJ1cm8wMllmdHR4?= =?utf-8?B?UCt2ZUoyMitGMyt5YzNQTm1mTWgrUGxseGZYblBHaXZpWlZIR29nd1RwLzRU?= =?utf-8?B?NXlobmxnMlFQempSODVJSGxoU0dlV0w3c0krZ3oyTWg0S2dDU1FJSzBieEJh?= =?utf-8?B?WU5vT0lqbGphUVlOdStGTy9Ba21VS3d5TnIveWR4aHlGaU5NSFVoRU51RlVO?= =?utf-8?B?NWxVRTlmU1lYTXVvdm90SzF6bGIyKzQvckgyb2cyVWJPY0NQdG5OcmpJK0pK?= =?utf-8?B?c2dxcVpXbng2ejVnQWdTd29jQjBiUWxUQ0duTDlXL0pUOGV5RjBGMnVPY1VI?= =?utf-8?B?NW5Tb1hwcVhOb1FBWlRYZWMxY3VSejIzU3Jac2Q1dnRCSElCd3BrdWVVdnBz?= =?utf-8?B?M3ZDVVkwc0dYQlJQckF5OVlFMnR5aUd3TGhjVUJyWnFqMjNZVEtaa2orQkdR?= =?utf-8?B?OTd5NHdJak1XRU82OXFJM0JDa0dVeEFVVDR4UDFDYXRzc1kvTTJ2ZXUrb1Ex?= =?utf-8?B?akd6b0RjeEpmUVd4aU5MQVJOMUYxb0VZZVhaRzhKQUI3Y0dNMk5KS3pEL0V4?= =?utf-8?B?N2tRTTZ5ZXJ2TXcxamI1cVlpL0V2RXpQMnZ0RXFjRnNqZkxYZTJlU1lSWGpu?= =?utf-8?B?dG5KRFpYLzhIK0tqczJEbnBhUkNpbDVTejZLaVI3WEJZWThRVTBhdEVVRjhQ?= =?utf-8?B?bTlzSm9IVTFJdm5tNWpvMis1QlRTVlRPbTArSkp3cmVXS0xWMDlCdTNQNXNa?= =?utf-8?B?ZmtUYWtZS1lTSm05UCtnMEh0cysrY05SMXdvY3F5c2tHMm4weHJyTGgvWFNt?= =?utf-8?B?TDdIa2JaeHNRMHBoSURTcTRKdUgzcUoxOU1GOTZOR2wyanNYTUN1YUt0U1pj?= =?utf-8?B?Zis2T0ExNHg3UHEveSt6WEl1V29aaEpLVkxZZkd4QzVtUDBqVG5RN3VPZEFZ?= =?utf-8?B?SVc2Mnp6dXRBWkpQOWJTM1lrQThkd1pOcG53ZnZxd1M2MDg4d0xYNERpS1ha?= =?utf-8?B?b0xMOGJDcWhsV1ZnVzZxRnRrZFBlNDIycWY0V0lnZkNrZlo5WDl2VmtqbU11?= =?utf-8?B?Z0hLdExubU1SdzlaeEhLVVY1T2ovVjRweVc0V2Y1bzYvR0E3bmwySjVJSEUz?= =?utf-8?B?UlA1aXhpV1JHckJockZOdGUyNUU3Q28yc21OK3ErN2N0VXNWb0NrY2k2WERo?= =?utf-8?B?SUJ1cWpJQUNtekd0b1ZCWXNMeFAxNGJZRklvb2ZvRWxhei81bzROQkhiT0JZ?= =?utf-8?B?N0VzSlo0WmZrd1JlMW56NjFWY1B0UTd4eHlLRkdnQTRvaThlZFU0TUllSjg3?= =?utf-8?B?RnVmUWpKNTN4TWJkRVBRYTdpRWptOGtVWUhpd1NCMUJWMUVMbTZtaGpxb3pr?= =?utf-8?B?QmZJbzRGMWYvOHV6Mno4NjB5bE5KSHZkK3BnYXh4Q3djbDFndlAzRFV2U0Yz?= =?utf-8?B?anJaVm1CY1RObVpKRC80ekZtL1FMZ1h5cGVaWGJEelZIZ1NaaHJIcDBOanFR?= =?utf-8?B?OERxM1dLcmNHb3pDcDk5dmF2Y0U0Q2pndVcwc1IrZ2Y3YWVzcFY4VEhhdWxT?= =?utf-8?B?YTlIMFdZTGl2dVp6NGg0RXFSb0lkZFhEdWo4alhnWHRwTldTT2RSb2RWNW9G?= =?utf-8?B?ZWQ2YmlDdGtSaXZCeVN3YStoc3M0angzNHBJQVQzcGJmaXlNemloNEswUmEr?= =?utf-8?B?djUyMGhjVlNycHpFTnZHVEQwYmxGNldHSW5saEVEc2ZOL3JEbmNOTUhINmtw?= =?utf-8?B?dmdyUWZpSUN1LzJHdkJETmIxa0FQQlQ2WnI0cXk5ZjFrRDBpSmRSUFpLRW04?= =?utf-8?B?d1NabytCREhpRFVEaEhLYUhJaWdFS0xyeFFQUnd5d3ZWWnljVlNVT0xydE4z?= =?utf-8?Q?PTaEdkp4mCMUSAngO929zs2pELRc5j1s3iu8Z/49PFGr/?= X-MS-Exchange-AntiSpam-MessageData-1: S7HcDVItDVnFew== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4a421c3c-142f-44b9-1156-08de79985dfd X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2026 02:47:25.3215 (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: unG7OnkMtrvIjMNsnOQ8f2PjpMaimYu1V3ZEZAlbyuv8abOqEKFWX+dYO6r5KL0CjJpNDX0rGeZlDiCdU7ZRqw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PR12MB9574 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 Signed-off-by: Eliot Courtney Reviewed-by: Gary Guo --- drivers/gpu/nova-core/gsp/boot.rs | 5 ++- drivers/gpu/nova-core/gsp/cmdq.rs | 55 ++++++++++++++++++++++= +++- drivers/gpu/nova-core/gsp/cmdq/continuation.rs | 5 ++- drivers/gpu/nova-core/gsp/commands.rs | 16 +++----- 4 files changed, 67 insertions(+), 14 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 0192c85ddd75..7750f5792b21 100644 --- a/drivers/gpu/nova-core/gsp/cmdq.rs +++ b/drivers/gpu/nova-core/gsp/cmdq.rs @@ -51,6 +51,10 @@ sbuffer::SBufferIter, // }; =20 +/// Marker type representing the absence of a reply for a command. This do= es not implement +/// `MessageFromGsp`. +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 @@ -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 637942917237..8a6bb8fa7e60 100644 --- a/drivers/gpu/nova-core/gsp/cmdq/continuation.rs +++ b/drivers/gpu/nova-core/gsp/cmdq/continuation.rs @@ -6,7 +6,7 @@ =20 use kernel::prelude::*; =20 -use super::CommandToGsp; +use super::{CommandToGsp, NoReply}; =20 use crate::{ gsp::fw::{ @@ -63,6 +63,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 +145,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 +208,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 Wed Apr 15 13:17:34 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010070.outbound.protection.outlook.com [40.93.198.70]) (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 515FA350A35; Wed, 4 Mar 2026 02:47:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772592468; cv=fail; b=pKFFWLPgIDFcA2VEHAwjhNvH+uWUKmrNQIt436SEca8ndmfAe5dwXt+KoxtQaYkXuertM/t2J7R7pGCKsugrnoJAJp4RvR1OeTqvdortn5+u0dVp1QCx7OlkeNzF1ca9bbsR8J3riLE7HFt+EZY/VrfmT2970tbuzVjEhz3R72w= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772592468; c=relaxed/simple; bh=dlhYd0aAchdafdi6sUlH61rHwxXT1g5hmvPezLbXnZE=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=EU7PvYBIusMo68qOeDD+8NUe5ZjBaFWuw7bMhK5yPrnU1eJ5Tvpnm3AmFVESOU1uIv0bwXk4aIufwl0n+jma7Xt4ASfzYnGm2OnrZOVkVaYuhRj1ZGqYkVfilAUHfacaNJgLQBf7L83YSXrpLdqTcuzTl2X+p20KZi0mkzoqcGM= 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=M7fJMxhB; arc=fail smtp.client-ip=40.93.198.70 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="M7fJMxhB" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rUrOPAJh+8evO08EzgHB7kW4K/0+4sYWo/+qxQlkBDVCkFWCvLLErJdk0vvkPyoYBnBmBq1t/QpGD66EE4pCkIy0Mjp+rtFcfCCBVSvUOVNJunU2KCv98duAMTr3v5zAg5j2RrH2vCj9PKLmRqmkd4qAMUXrjB+/YOhJNPnuNrqGPt+NST3ENYy0XLocOid3mcvz9qaqEOr4HCxXko1uyyzAhZ5FHaHjiXXR+2YMY9lx0fOG1LsfIeB6k1nb9H9mi6O0xFoqELUWwGPPTsHNLAzUKrbqGg7pa+iLLBNsh2w6Wne1RYilhltpoE18+F9k+Zmy0sR8T8Mtf0IpVSVUCA== 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=94A+j0/LXULY7HHiYTNJCP5c4BJvL/vC9jF+CvfZKIs=; b=VDoDBgyWLPvxpD9mVN/zdCvaue6KAhwuNpNQrg7qcG1mTAgXpMOKiTrBPujhC3kFJD2xN6C3vSOGMzldr895H2BRnhm59chHLJ+guo8sQGySrKZFszAvIXLKp7A53FkxO9dZCKVq+G/VAYDoJhsH7xCbXqC/sOnzUne9QPoGCLz/4X8IWHaI/lT9YuxnyQ9N378yYoJoRQATPnWVs+RZaWMxZ86QdbOfF6K+/EdWEdT0vsCH2OAQRh9COTIjIcAGeacr1hyAm05nrsaUGCG8uveTzQ/OMEL8vmDUomFNJd9iTXKLCRYv7/T3887YIiPWalcJLk0PgrLep2Xujr5xUA== 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=94A+j0/LXULY7HHiYTNJCP5c4BJvL/vC9jF+CvfZKIs=; b=M7fJMxhBwvF9/E7GoA+xWKs1rQVw2C+8kd27H/MsUb3z1xHhKFecP/yM3fkfv95ukOBF6xp0MUfdLI9b/Ay3V0kpGSOL/Gbl+aZOCahzAg0XIPurecD8FVYDAE0I2QB8o8ZG42Nz+DY5+2WSAV33Zp71PUhUl2GQrskbhoXIkGBgHX9cN8GXFuO8cr39ZztZs+g2KZzrkofGJKtlYd+R3OgwlNrcIhtBaUmbJetj3EpfJesnhF6wJc3vuwncfOTm5SihnlTrTya3IYryWm2fCRPDsFJvdO3NY/Oo19a5PuE0ZszGX962Hr2ZrJo1GSJ3Fj7h00QGUHFF737wqEyDkQ== 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 CH1PR12MB9574.namprd12.prod.outlook.com (2603:10b6:610:2ae::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.14; Wed, 4 Mar 2026 02:47:29 +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.9654.022; Wed, 4 Mar 2026 02:47:29 +0000 From: Eliot Courtney Date: Wed, 04 Mar 2026 11:46:39 +0900 Subject: [PATCH v3 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: <20260304-cmdq-locking-v3-4-a6314b708850@nvidia.com> References: <20260304-cmdq-locking-v3-0-a6314b708850@nvidia.com> In-Reply-To: <20260304-cmdq-locking-v3-0-a6314b708850@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: TY4P301CA0096.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:37a::19) 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_|CH1PR12MB9574:EE_ X-MS-Office365-Filtering-Correlation-Id: db537704-edb5-4d78-e2d9-08de7998604e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|10070799003|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: YR3MLLyRJYZoEjNZ4jYgmn8YdN+3oKVpQxjAqeTV3KtN9W9x/qbEcwZrKu0ILgcqfyY+9JZURd7/AokoKomGYgqT4rbMsWarVWpwTvg745QHjlUH25XoLP22GQCMMQmnhhcYHWVNsUDyQ5mgxwrLKJZVjhNeGIraPjoF2AiGXcQLI1OgLUGhOov4Ez9xdfMLpncmkNtpaXPEdedOvbbpsiLoH+v4rm6C0pcXjBG/RM4WlC9dTUwpzeKuRInEg5y2QvNl0XQ/ysdmkQwQxj8Hf7aQTAX4bJ1JVGStNqNDtaSJBvJs7ey2Ah8hkWpI8kmAokxLbejd2txIpML0GC71svoT4D54++MkO7stGZ4K1JfIFzaA6JB5y0YL+Fs1GK7dBFuSJqitcHEUSeZlrh86k+FR9VCvMjYIHwZ65817AUsp/JZASHipgFaasZWvq25cepIuyFk6ohT7d6FOUZ7rF5Eh6J0pfJCgbciOh6PbhaOuywkDA/ys8QXI6bRqRrxGzAxIJUrfqykNMR1Ms1P1w/i7VHqBO0Z9K6DmWMhv9ERWzLJn1ww6oMgksjN8sAIKj/CR4kEctP5AHED+IBzzZQ9faPsVHieeqn6fBqRe6k76NQOUpX4fuLE4WpxZmngD8s/J1UzYKbMMjFg/xNqRU+gixQwXyVQUqvo0/edI4rpWefWRuP9vzyyRhSsJabXT1jhUO459Scobdn0SWJGVJ3QLpluDPxEHF6noQbMIaGM= 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)(7416014)(10070799003)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?N3dVMW5aOWtNcTZHOFlTbjJkSjR6b1psb2VTNmY3RDN6Z0V3cEdDREtjRzE2?= =?utf-8?B?aVJzc2EwZTYxYlIyeG96eGZpd1B1RU1hdnAwZG1wcWdtWmZLdVFKWTFpd0NP?= =?utf-8?B?RjR2WXo2bjEzYUtybW95eDRvWndxRmZXQW1iVkFHMlBUQ2lsOGpkdWYrQkQ1?= =?utf-8?B?Tk43SFJiNnJoUmtIVG0vU0JLamVuaWlueFB0dlk4WEsreEtmdndQeW50YS9m?= =?utf-8?B?ZmQ1MnBSOUcxL1diYko3NGMxVUhVUE1zQ3cyTzdkQWpFSE4yYTFvbmx0cUJu?= =?utf-8?B?Wks0NHFJVE9iWXdpWHRpVU1zTXNWRmdLZ3d5RWJSeDVZaGRRU1dVVjdELy9i?= =?utf-8?B?ZnJ6d0lETVEzWG9FZWNJTkEwWlhyU2VsQUIwYk5hcUJIWnF4NC9JYTZiYWYz?= =?utf-8?B?YjVidFpEUnRaK1NRMGI3NnV1MHVsdjhSWkdPdEt0Q0NIRnp0NlNNdU1TWUxQ?= =?utf-8?B?VTVLQktGUkJZUWZrdTFWS3FxK0M0QUt1aG5rYU1PRFBpVTdXMW95NE9hSW53?= =?utf-8?B?ekZJRGtIbW5uNWZtRWl6aG1mMWdrNzFxYWN6WkMzMDFrNDZwZFJLQWYwbldr?= =?utf-8?B?ZU54dVgzNjJmNzdMSURuY3cwL1FkbkZYeHlNTkZRdnZPWCtaWmlFQzFCdHVp?= =?utf-8?B?YnRrQ0xvRlBUUWxsLzM1U2RQVzU5RDhuNUFIKzBITG5vMTZEdXlHZkxzUDVT?= =?utf-8?B?ek53SVozQ1J3WHg5VnJmankzUWNnTzR2Vzh5eGlVaDMyWllhTHNvNFQ4NCt5?= =?utf-8?B?ODR6eStrdzBaeDZheXVLT1JVdmFOeFNGUGJJU2lQK0krYUpUckZseVZMSUNK?= =?utf-8?B?VG1MTFkvTzNrQng2T3lqMUhSTjFQWW5sVUwvS0tUVWV3SEYwemFiTGxGWWZP?= =?utf-8?B?OW8wTlIzYnkrUk9HUTBhWXNlRDJ0RUJPeFVLTjlkOXcrZ1N3RXllaE9veDJn?= =?utf-8?B?cHh0OE1QT0FleVc1bTJuNWpqeTVNTThqL3htUm5FWFFKL3RxaVpkN3dmTS8z?= =?utf-8?B?UmRpMllGeWNTTGVTUTFaTndBQTRWUGZ3WFh0UVB2emdQVUVLK2pyY1JXR3No?= =?utf-8?B?NHZTOWw3TDZmWmZZQ01uVkFDY3hEZTRQWlRiTytKZ0ZQWlVHc3V4ZnZrZzZo?= =?utf-8?B?UlVrNU1ncS9DdXBFcVprYkQzT0lOWEVFZ0pNeFVybXl5ZWtsditxS245aERH?= =?utf-8?B?aHN6OUNicml5V3daZGxVUk9uK09VS2xZUGlQWjVKOFl1bXIwd1JwaEVnbWpK?= =?utf-8?B?TllOa3lvN1QwWDFsenhVNEhablhHeXVlZlVKWXNWV0VtMjNDL0V4NnBURTBk?= =?utf-8?B?Ui9nS1NCa3p0Sld3TFZyOEpuTlkyNXFvT2pCbCtJWXNiZ2lpUDNiQVc2dWt6?= =?utf-8?B?MXdDb2FPY3NNV3ZNOEwwTnRoUHorbXhBRTdwZmpXdWZ2V1JWa2RuMnV6UHVJ?= =?utf-8?B?WnhPaUxuZ2hoREUrSVkvejI5L1RvQnFEZjlqT1hvNUhMVXJVZVZVcHRWeFVq?= =?utf-8?B?c0RDWmowVEJUUEhxTDJ2cWJNSUd6SjJtZDBpcWwzT1EyMnNPK1h2c2VxVWwx?= =?utf-8?B?amFKMktFcUtrd0ZPN2cvenF4NVpONXF4TEtwa2N1amYzNkdxSGZyb0VCN0tD?= =?utf-8?B?c3FyT2cxKzRFNEs3WlFQenVyMWNCTEJZMi9VNURvLzNuQWNncmN5Y1pmU1ZK?= =?utf-8?B?cEpjTnRTZHlZdGFWQWFrOVlZK0ErS2FsdFFZZzkwdnZTMUdhZXI3MC9YeHFy?= =?utf-8?B?ZDRlNVYxNEh1RHhOSWYzcWpodjRBcEJvVFZjcmppcEVTcmtYeWZuemYzVTlh?= =?utf-8?B?L0FyVWxLblRnUEtpNGFpdU8rNi91eXhyK2ttcGRJeEU1R1FyanJBMHVYR3VC?= =?utf-8?B?bUxtK0UrUUF3K0xDeks2UDVSd3hXeVA2b1BSMkpGK0lSWm1iQXp4Mys2NG5E?= =?utf-8?B?VlVCMUlGWFUxbDV4NS82d0Q1YU1EN3o4OWlDbU44RFl3RUdpMEpNbVVZeGd3?= =?utf-8?B?Mm1SVjZwTTZhT1RkSzdLQWE4THhJenc0a3BEeXVvRmdWbEt0bjczYk15bFo4?= =?utf-8?B?OFBUZzYzby9Xc1ZMbEt5SHkvOTREQko5WkpaSm9SWW1QSFhMaTdBc0lSc3Bq?= =?utf-8?B?YUpFcy9wNGREd25qeHBwcU5UTWRZTXZNTTFTRnFuZldoWlhGcGtaRUdPV3pZ?= =?utf-8?B?YUZnVlJBU203SzgySGkxeXFobVI2Y3I2WVNhcUJHOU5TK0YvSmVxOXlyQ3VG?= =?utf-8?B?U2dJNituclZxOExaNEIrNi9ScmxEUXlQNDk5NGE0T3VDQmxySUhBTUJRWThh?= =?utf-8?B?U2hpYk9RTVYwWjBsOS9vTlRRbm80bi9oZXV6ZjNLbDZYUzA1U09VM2RVL1pM?= =?utf-8?Q?an6LE5YHOnVN78+RrtYgWwvSVjgXCBwj7HUpPAr5ZBbW8?= X-MS-Exchange-AntiSpam-MessageData-1: 8AWJZA/Nbr7a/A== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: db537704-edb5-4d78-e2d9-08de7998604e X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2026 02:47:29.1883 (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: Oo7RFpzdt51hpOb8yCDPPbTm5WgX0uCFud8DGQdYr0azpoE00aDXSyzSUS+arPtTS3OrCNKho/8o1cJUn65EmQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PR12MB9574 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(10); =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 Wed Apr 15 13:17:34 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010070.outbound.protection.outlook.com [40.93.198.70]) (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 C6426352C54; Wed, 4 Mar 2026 02:47:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.70 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772592475; cv=fail; b=RofbRvKPyROt4ZQixebf1q13xSTic0IqHrINLRcOpBli/cWNBude3GrhRjYD01a4P7e99C40/YOvqnCIPta1nv3rhS/3FcXnCaT6juVLSnXli3Hp0tG+XnEvJQCfjlXBZNnQ6xojRa8Ps7P3tLrw/80stGVdpoCB24KTysq8mmQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772592475; c=relaxed/simple; bh=D+LKLh9MnMM545Qpmm3i1RMX4tqNOuWre8/Q59c7DcI=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=Lu2tWgzDSowWPfgmg7yrS6D6PhClOhlVt7dg0Bra8oDWgUepltIOHfZykyFWNNm5REwY3qSShGnJGwRfoo31YLBcb//GIYQU6WkiigLoiKtCbjStoDrmM7BqmysiV1DWsnPzFVYvra1OjfQP2cAySOm1I7Ado7gHPSuS/f3ba+w= 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=lIxvICVF; arc=fail smtp.client-ip=40.93.198.70 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="lIxvICVF" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Fr04NvW1asJ8WDWCvyTVkMO70Cpmhx5JSoCPCx5K44sN+Mv6fAGfLFoPHXjZImY0dzmudhatzuKMFfDegfDDTBgGrruMrwhQDvt8jqFeIFY3cKkxqjBXSziB+xhtTeebm52V7LXZlZBQTtPucOScN8Ldpz+qSyQ+FQ0Eds4aYaExA8l1nCHZH4oeVUS1jC9IkSixs69YlCBov7X4V0x9CodnNMacfTVzBGl/bd5aAwpiCtr0d5cOUrWc7okAp0jOWvQeLdYnI1OS9pX+H1nyu1yScpglfuzjKA8t9THSBXUFvRFFtFNyZ70AzrySPPRxuezuPMs6VSR6CoUwNvU1hA== 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=o2vk1UC7Hb7lUmDaId0vcTikFvAHO2h2yM9wjz/o38g=; b=uF2/AWgTkeFWQDHSILr8VDiRydkgzTEwYQEM+86K1/Pybyynl2/80Ssfd+XAWLMkp9/L+bWOmFD1HrNQKZbM9il2w1/Tq+SC+y94HEN0GVQ6JXrcqLoi+ce+zeBdbRCzXYJAZisQK0ARAjQ/RzUu5jshcbIblYO/hk4B58Ksnf0HG5EKUuMuGIpxjKAgeQWeD9wy1rIIXvzzmQJ97h1vLRL5etmH7lTLd2KCZO7c+tWkeR3dKoWBFaXbgcWpJ/giGcKBaiXeWRGg23dy6twt94DiHMHFRk2MYRoNwgsUIb7iceC6Piee+Gy+qq7WJdInlzHW0PVQE6fNRiJ/9egTdQ== 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=o2vk1UC7Hb7lUmDaId0vcTikFvAHO2h2yM9wjz/o38g=; b=lIxvICVFrptkynjNCidiSz+sIhSGsAJxzJvrXGs/RH0JcSwXlJG5zY9PbPWF9LlhQVqO7a36EgRRO4g+OHz4f+jN29E099LESAwPRg4clpMhTlplYZtDAD2ymYJYQ7bZu6j3yIq93qwREA+/7DC0PetX3TS6eFzNldF1x9Gvwrd7OjbE0LOZ6znflgf+tLYklLGOAtxJzgP1JH9wBVtikNWp+nTyz9zNvQikqxVAdEzoL0KforhqA+5gRM2dZB4eluJqq2DSV2KwCXpvvMDfJ36o2eCbFyRIIdF4vQegJg+XqbwvTEgG+/GcqYhMNxEtwHekugPZ27GgjJihPwi37w== 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 CH1PR12MB9574.namprd12.prod.outlook.com (2603:10b6:610:2ae::16) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9654.14; Wed, 4 Mar 2026 02:47:33 +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.9654.022; Wed, 4 Mar 2026 02:47:33 +0000 From: Eliot Courtney Date: Wed, 04 Mar 2026 11:46:40 +0900 Subject: [PATCH v3 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: <20260304-cmdq-locking-v3-5-a6314b708850@nvidia.com> References: <20260304-cmdq-locking-v3-0-a6314b708850@nvidia.com> In-Reply-To: <20260304-cmdq-locking-v3-0-a6314b708850@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: TY4PR01CA0097.jpnprd01.prod.outlook.com (2603:1096:405:37d::10) 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_|CH1PR12MB9574:EE_ X-MS-Office365-Filtering-Correlation-Id: 4287b0d9-9170-4970-a3b9-08de79986298 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|7416014|10070799003|376014|1800799024|366016; X-Microsoft-Antispam-Message-Info: Kt703F5tgsMdoagVd7T0KFMQQJCR0JwxXJJZ0krccrTj/UdavhxQfunR1mcV1ovRowFNItQTrLv4aClumQfo0HD4w3RHihl27DTpFhyLpp/XIAUhnVCQDRw2wXxfLUL8b2N7Cd5njxP2YeSS8g+jTH69rpFincPePnmo2Yln37Vk+OSkutvvtHYiRqsD2i7sq5WufDkvI5nuVD3fn6YBe/VZcB9Ir42XCjv5iLIE1T0nFxfi43zw/FmHP6toMGRfg4mpvaVCwl3CzXXeaO8EEhEDUCY1ymEprAq/iRq2+KntFzwgbsAu2lC8+V++GNNjBRnxCt39itL+LvrE5o+JmCAMeHjvwhRRwG5uZ5A+vRnH5cFazDgk1GAig/UqF1wWV5CUyC8qxDOIota31W7xpPvlGsdN+81Uwu+ajr56yVapIu8lRoW7WoYiMfaWAKXDMOB0cklapRpubiMcHFfpPf8vMpljQg5c8PqWn6NC/OtISXeWaPdwYbn5RmV7wOtb4xjAWZw+JT2ZGFzJDCt5xEqBpmfsMgXDu5I7C2Dh930qmPp7PEJoYSUbUCzdw9cfR2WOdbc7Sja7E+bIwi8vgENPvj+l2sC6/dHDNXqen1a9gg0Km4l/S8s6Iynv/NLBcu3u4Km228a3BmI0QcUG+bZyc8UkgBzPJEGzPGbLuhIk1/R/3jez/72BluWhLouPGfoPE+CsIVEj1alkv4ncbbslFVzgiPu9iU6VrzLm9wg= 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)(7416014)(10070799003)(376014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?d1psL3gvTE5FenFDYkhWcTZKVzRpc1F2T1ZobHYxZ2d4Q24vRlpQQVkxak9n?= =?utf-8?B?TWxwTC9EcW9pNVdVSlRqNmxSQUhKaVhHeTYzZWZPY214UjNGZGxyeStOWHI2?= =?utf-8?B?M1lmVjBWWTBBem12SGhBbW8yMmFZN01FeWxWQVFhaHRGN1Z5K3VWaXNqWnpD?= =?utf-8?B?L05TNGUrQjNkaGJvK1dKYVlHNUIvVGREbzJiK3B3Vis5TXdXSHV3OGczNVd2?= =?utf-8?B?M1Z6cjl1cnpBY0VPZzRxMVYwbm1mbnhxUURXallXeERVcVRiWXhEK2pLRkRD?= =?utf-8?B?bTdwMDFZdHUwL1JwdTEvbkEvaEsyTDh1ZnFpL1ladFpnWG1UbTNmRlNhdnJH?= =?utf-8?B?a2dlc3pWRW5vaHViMUd5UnFsOTJQTzhsVks2QkpDeDFxL2JyQmZWWFJjaC9w?= =?utf-8?B?cHJYQWNOTWlvYkUxMVE3RE5FcmF0Nk5XVXFmRXkvR1FISFZJSDlrTFNNaVpD?= =?utf-8?B?YTVWalJiNTBGdVNqbW9yamZqK0wzMGxxMkVjSkplMjRuUndNWFlLV0thbHdh?= =?utf-8?B?OE5tU2FKZFh0Ym5iNjNob1Bsakw5dUVseHp5ZTR1NUcwV3lFQWI5NDk1NHNw?= =?utf-8?B?VkRNVjN1SEEwT0U3ZVVrcCt3ZlJTRkZLdGpOdW5BbEdrV3F3enhCYXdFVHIx?= =?utf-8?B?QkRXaWxXdjdaandGQ2V0WEw1THNSSWxBNkdESHdML1RFK1lEVXZVYVVwMCtK?= =?utf-8?B?M1VHS2FtUS9xL1NEcDBrS29Fa3lTRjVHU3pVQ2RkcFBHK05qNVJrNXBtNmp4?= =?utf-8?B?NTI3N0sxaG1MRnozM2xkOHZHZWVpd0xTOW5tNEx6ZnE5QmIwbVpZU3IzeEwx?= =?utf-8?B?RXlWWm82R0hmd3VvMHpjUkxHS0w4NE9xdnlRaGlBZnQ4V2tLM2RKNHNxY2Jp?= =?utf-8?B?VllhakJrYU83eG9iZFZsbEs2ckNxSmFJVStkOUt3am1CVnNFMWlSV0UySGFG?= =?utf-8?B?UlErUGpYb1huQWJQV3JiZmJEcGt5bXV6dVFvVFpUdTZud1dkNmZ0Mm1jdmlT?= =?utf-8?B?OWswRnFMVklJTStGbHdFLzEzak1Ra05ZamRVQllhZ2h0OWhURGw4Mi83cHZh?= =?utf-8?B?aXFQUHkvY2RKcjNxR3doUjJJdWtCYW5tdzVJR2Nldm14b2NKRGViZ0o0YVM5?= =?utf-8?B?a25TQlNkTHlTbk0yaVFBVDIvQkNpYm1oU3VtZ1RGd01pN0dGUG5HNWJQLzFs?= =?utf-8?B?aHFNcE9sU1FCVFNKdndoZGd4bWhCQ0VqaUg2Yk9YT2x5UUgwOHc1Zm1vREtF?= =?utf-8?B?c25hWlQwL1FFUTE1MmJvNG1oZGdaU2NrRGVNOEI1bVFKOEU0TXlMNUtyaEkr?= =?utf-8?B?MDRUdHRuUFZWbGZyamp2L2xiM2RDYmZZNDlvVTBySitxZk8valFPNXdYOEZP?= =?utf-8?B?d20xS1czVy9ESXlDSHloRHVmVE05RHNsMzdISGtxNEtVaWNjSERrSkFWSUxj?= =?utf-8?B?b2E5TDVYTmd3RE1jSXJnUVpQU3doZmhCY1JYVUFteGIybVBKM2VPYnBzd0xF?= =?utf-8?B?a0EyTVZXL3QwNTBlRnYxRTk0SnFtZ0pRcmcxK3ZhaGQ5MmlPNjNNS3NrR291?= =?utf-8?B?SmtGbFpITFk1eEZ6UWVVMEhMUHlUL1llTmxVclFHOUZtem96c0JrVUx4MFVT?= =?utf-8?B?ZUJKaHZUOWE5WlFuckdDYjg3YUxQdzErRnN3aStqc25sS3VFTkFsbVJ5K3VJ?= =?utf-8?B?QnNsWE5rRzRMbzBOUVg4UEo0NUkrR2dGekFjb1BDSFkxaTM4WW9RcFk0VC8r?= =?utf-8?B?OGd0V2ZiNzgwcERZcUVHVFV3UWZNZ28rUzZydHFNVVBoM052U0lqak5hVzNL?= =?utf-8?B?eVN0RTRwS2ErdThCbXRUMlJneFVaL2ZSUS95WUk2SmNqTUh0cmVudzVRRUZU?= =?utf-8?B?c2YwODN4ZkFhSU1QUEFBZTJETUg5YURCVnlMdWFBcGtMMVhQdUpaR2s0MzNx?= =?utf-8?B?ejliNU1qdi9mT2szNkRscEhmcUNQM3ZvZmFXZWl4TVZDMkRPc0NjczNNN211?= =?utf-8?B?QnRqcDNlTVdnb2JjZHlodGF2MDFpVzNvQldLVVdZRVg5Ni83eTZLMllhRi9P?= =?utf-8?B?UmxVVmVEcThmempNRmJudzczNDRhQkNUR3dqejgxaFRQUzF1VDBqTk5JTVAx?= =?utf-8?B?ajRRejRydFlTVUV2SnlaTzF3WDB6MzhWaHFSYzh4ZWpSc2dNUUV5UEpsMzEz?= =?utf-8?B?ei9DQ2tOdXI3aUhGbEdQVUoweWlSdlBKSlgxeEptL1RleE9QcmhRVERjbnZh?= =?utf-8?B?ZkxycVMyQ1F0YTJUalRZVEdTenVrSis3TzBZVUxQWGRhaW9veW93dEo4SHh2?= =?utf-8?B?ZkFMWDRFaFdKaWcrVElheHJSNFhrOW5NWW5DN3laRGF2Mi9xU3YxVUtLcU16?= =?utf-8?Q?MrJ3nXPe1TAu03J0dnHoQjKqi2Tu91kY8SK7CQY2XPXSZ?= X-MS-Exchange-AntiSpam-MessageData-1: V2b5UbfEHy7XVw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4287b0d9-9170-4970-a3b9-08de79986298 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Mar 2026 02:47:33.0463 (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: Osnpmd8vPYF59g+GU+5IaA/W/nwpYtITDAhtUM8yeVC6ibQZwqi0lIM4ygnxQHksL7u7nrLqyx1Z7M74NA5w7g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH1PR12MB9574 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 | 247 +++++++++++++++++++----------= ---- drivers/gpu/nova-core/gsp/commands.rs | 4 +- drivers/gpu/nova-core/gsp/sequencer.rs | 2 +- 4 files changed, 146 insertions(+), 115 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 de84a298909f..94cb2aa6568d 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, @@ -57,8 +61,8 @@ =20 /// 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. @@ -471,12 +475,8 @@ struct GspMessage<'a> { contents: (&'a [u8], &'a [u8]), } =20 -/// GSP command queue. -/// -/// Provides the ability to send commands and receive messages from the GS= P using a shared memory -/// area. -#[pin_data] -pub(crate) struct Cmdq { +/// Inner mutex protected state of [`Cmdq`]. +struct CmdqInner { /// Device this command queue belongs to. dev: ARef, /// Current command sequence number. @@ -485,58 +485,10 @@ pub(crate) struct Cmdq { gsp_mem: DmaGspMem, } =20 -impl Cmdq { - /// Offset of the data after the PTEs. - const POST_PTE_OFFSET: usize =3D core::mem::offset_of!(GspMem, cpuq); - - /// Offset of command queue ring buffer. - pub(crate) const CMDQ_OFFSET: usize =3D core::mem::offset_of!(GspMem, = cpuq) - + core::mem::offset_of!(Msgq, msgq) - - Self::POST_PTE_OFFSET; - - /// Offset of message queue ring buffer. - pub(crate) const STATQ_OFFSET: usize =3D core::mem::offset_of!(GspMem,= gspq) - + core::mem::offset_of!(Msgq, msgq) - - Self::POST_PTE_OFFSET; - - /// Number of page table entries for the GSP shared region. - pub(crate) const NUM_PTES: usize =3D size_of::() >> GSP_PAGE_S= HIFT; - +impl CmdqInner { /// 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(10); - - /// 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, - }) - } - - /// Computes the checksum for the message pointed to by `it`. - /// - /// A message is made of several parts, so `it` is an iterator over by= te slices representing - /// these parts. - fn calculate_checksum>(it: T) -> u32 { - let sum64 =3D it - .enumerate() - .map(|(idx, byte)| (((idx % 8) * 8) as u32, byte)) - .fold(0, |acc, (rol, byte)| acc ^ u64::from(byte).rotate_left(= rol)); - - ((sum64 >> 32) as u32) ^ (sum64 as u32) - } - - /// Notifies the GSP that we have updated the command queue pointers. - fn notify_gsp(bar: &Bar0) { - regs::NV_PGSP_QUEUE_HEAD::default() - .set_address(0) - .write(bar); - } - /// Sends `command` to the GSP, without splitting it. /// /// # Errors @@ -617,7 +569,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 +589,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 +624,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 +659,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 +688,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 +724,133 @@ pub(crate) fn receive_msg(&mut sel= f, timeout: Delta) -> Resul =20 result } +} + +/// GSP command queue. +/// +/// Provides the ability to send commands and receive messages from the GS= P using a shared memory +/// area. +#[pin_data] +pub(crate) struct Cmdq { + /// Inner mutex-protected state. + #[pin] + inner: Mutex, +} + +impl Cmdq { + /// Offset of the data after the PTEs. + const POST_PTE_OFFSET: usize =3D core::mem::offset_of!(GspMem, cpuq); + + /// Offset of command queue ring buffer. + pub(crate) const CMDQ_OFFSET: usize =3D core::mem::offset_of!(GspMem, = cpuq) + + core::mem::offset_of!(Msgq, msgq) + - Self::POST_PTE_OFFSET; + + /// Offset of message queue ring buffer. + pub(crate) const STATQ_OFFSET: usize =3D core::mem::offset_of!(GspMem,= gspq) + + core::mem::offset_of!(Msgq, msgq) + - Self::POST_PTE_OFFSET; + + /// Number of page table entries for the GSP shared region. + pub(crate) const NUM_PTES: usize =3D size_of::() >> GSP_PAGE_S= HIFT; + + /// Default timeout for receiving a message from the GSP. + pub(super) const RECEIVE_TIMEOUT: Delta =3D Delta::from_secs(10); + + /// Creates a new command queue for `dev`. + pub(crate) fn new(dev: &device::Device) -> impl PinInit= + '_ { + try_pin_init!(Self { + inner <- new_mutex!(CmdqInner { + dev: dev.into(), + gsp_mem: DmaGspMem::new(dev)?, + seq: 0, + }), + }) + } + + /// Computes the checksum for the message pointed to by `it`. + /// + /// A message is made of several parts, so `it` is an iterator over by= te slices representing + /// these parts. + fn calculate_checksum>(it: T) -> u32 { + let sum64 =3D it + .enumerate() + .map(|(idx, byte)| (((idx % 8) * 8) as u32, byte)) + .fold(0, |acc, (rol, byte)| acc ^ u64::from(byte).rotate_left(= rol)); + + ((sum64 >> 32) as u32) ^ (sum64 as u32) + } + + /// Notifies the GSP that we have updated the command queue pointers. + fn notify_gsp(bar: &Bar0) { + regs::NV_PGSP_QUEUE_HEAD::default() + .set_address(0) + .write(bar); + } + + /// 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) + } =20 /// 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() + self.inner.lock().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