From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from BN8PR05CU002.outbound.protection.outlook.com (mail-eastus2azon11011037.outbound.protection.outlook.com [52.101.57.37]) (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 E0E273BFAFB for ; Wed, 10 Jun 2026 11:21:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.57.37 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781090499; cv=fail; b=jWcgX9to/1E5Vj1oXsKRaKTzIkb4DXKdLhbIPm0tSPD7wKBrxv61wQAGnWKBSVV6AlKoJQk5peOq/8frelb+xAQFOlSE80LpMnjeJ6cOeeb0sPChRPL5GuPHKKjQURiv0RkOj/FMFuNirXfQA0zTFa2uf2Zlz3LjXQL+Z9AscV4= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781090499; c=relaxed/simple; bh=6+t1AnIO36JARe7u0kp/3YJ1j9EjVxX4n92efszlbeA=; h=Content-Type:Date:Message-Id:Cc:Subject:From:To:References: In-Reply-To:MIME-Version; b=GiOtb/FNsZSdW/z8DIR/ap5k79GyVSmqoffxqJ54ZF5Ek9oDyO9FKcZc+CZ7Qs7wThe2CZQ7q+aRB0kXVFhYsoswvlF2+5X5MddqfgIWqtnXMga1ke7Np32JRDGPmuzUsus8UcpUN1HjsE4U8hSnoH0GYlUOVqVgNuoVNsQGwwE= 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=Cda2vc0f; arc=fail smtp.client-ip=52.101.57.37 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="Cda2vc0f" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GsGa3M7O35bp+8hYKCUsmaS7z+W2St5tmjQfEO3QN9WCkf45b3lNgNRS0QvaTPlLW8eqynv8V0b/Ct9NEbszEPnzQhzbW4UUcoDJNpw39rdVkSQI5qY07xOLyodP7aB1ofjn/wfr/PGcWcNsR6/BCcYs9fMRCtPvs/owvbODZeO9ju1i1i5FkI6MHOmf2NW4jwLqPx+Nz4NLfGykIycOx7Tw3MgIQFXZTsSBTTGn+XZu1Nuw6rNahsaNeE6Go0Nqwq19yepIbDLGgyEcapi4FwJ1gJvPau3fHhQPwQFAUCCUu/1i8jVHN++GHy5nGW23bJsBwHiiEkm3er7vPNuKsQ== 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=+Ng56DucLzEki2woAZfq1g8gezr55yqJktihvObQIXM=; b=LSMlxyMNa0VR9kzvQPCZMrFZdKobD4pOj7kHREppEDGZ2R8P4HIY/RDw+H+goS7bYSvIRqBabxH/BBV2sEHT+TEznXDQt/spspmHuHQ+9Illqa6WxT/2kHY4LAboKGU3wKAHg53R+X6KJ9z0VZdlb4Fy0UxlbgJeDzgXoGdbyWAzt5oDvF7yY4JYkDTGX9z6xYMtBjh+M0Ow/QjDIDgJSF/S63reYqpSCbV1HoErji+Cq7vs18KrCo0p5phVbK0hMCePDSf7z6ugQ8OFdfXaiMh9TLSnnDSntTCNntEJszeZCP88PsxJMmAhc+OJeHs9hpU0FG0Yr/oF1fw4s5WLCA== 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=+Ng56DucLzEki2woAZfq1g8gezr55yqJktihvObQIXM=; b=Cda2vc0fHjcHm/BHkv0cM1Ij7CJxr4o4eL2y44HxRaJyilzQ1Qv9aZ63ugpba9/uBzU3z94ia+Os2swt9HX7Zi09nAKtgA4dYO6AcNtUIczJr2PvFr2VndQjfy2NgTK+yJNv+by276mbVJkGerjcUHI8QSR8Fd/JEimUjhgT2luTW+wgi60aXOuJwuI7LZ8bf76HBBDbbw2VhT9jhCCehcxTp23DdYWzGOLrtDKcmsE4FC/xg7+A5h0doEqm+7lDwec/4EBr499bpR62JbfWw4kmblB4YOHit1/lz4qQq26z0HLRuV1HUUm+tHPEt8GDNnaoP3l/eEeB9GqRNn3AeA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by PH0PR12MB8049.namprd12.prod.outlook.com (2603:10b6:510:28f::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.14; Wed, 10 Jun 2026 11:21:33 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%4]) with mapi id 15.21.0092.011; Wed, 10 Jun 2026 11:21:32 +0000 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset=UTF-8 Date: Wed, 10 Jun 2026 20:21:29 +0900 Message-Id: Cc: "Danilo Krummrich" , "Alice Ryhl" , "David Airlie" , "Simona Vetter" , "Benno Lossin" , , , , Subject: Re: [PATCH 1/4] gpu: nova-core: move GSP unload state to a pinned Gpu subobject From: "Alexandre Courbot" To: "Gary Guo" References: <20260609-boot-vram-v1-0-d9382610507a@nvidia.com> <20260609-boot-vram-v1-1-d9382610507a@nvidia.com> In-Reply-To: X-ClientProxiedBy: TYCP301CA0088.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:7b::16) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: nova-gpu@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|PH0PR12MB8049:EE_ X-MS-Office365-Filtering-Correlation-Id: b3068a2f-dd63-4891-2837-08dec6e26cd7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|10070799003|1800799024|366016|376014|7416014|22082099003|18002099003|6133799003|4143699003|11063799006|56012099006|5023799004; X-Microsoft-Antispam-Message-Info: j1FYG8KKFriQFjHVx+c0zuSEvvDObMVBFfFz/92gykNCPNTnqcu+E608NKFGjvzQVVFJHXxwGvEUFCyjl9ZCMGofiLV8K4/Weyf2W+rn2jQ/ai3M9pKgApQu+QQtbfEW5n6285lddL7XMrutK3Uck6LC60iR6DB7FqM+62h1ZlSdDGeOyDS74LEAIm2nz0yRlmn91WatN0lTrwIxAkrqq2Eh+E2Q2j26OK8BHGORS88vJEJzJJWy8oBr3IOri5bkC7nYlJykftIDjVtD+UPgd7n52ZB+TzFYY2ukxnmwjPxkLQtcpt7t6ZjFwhAnq9HzBVv8SRM98SXXGkDjWaL4Fu79otkw56QtAK5ONH1wv6dB2DwmpmDBDi79LIUf4MFmObzm2HqU4Bz7pMz+sIOhbTRAO9e0sEd9QAo5N56BalCh9GJWa/u7I8BqzUZ3EqgCMyQT4RxLgcuWZbXb473B4/DXmNk7XWmJYY3WjGQodOUcnpUbh0s0LxTo2sVyXlaI5aBiAk7ht4Q0aU87J3kfEIClTqPjqEtFp6UBcvWPFzuBLTIhGKTW9w6kvsS/gyadiUWfI2RD9GTJ3/SE/BN5CHNnFF4zFKnUx0ZBki2aJUVxM6QHUjg7iWlEmJKuB0cPsksVGSjN81i3fPKxGwRo9r1cu0vw2bILXVlRfv0Is00MhK/ZW68Ju1FzIkYRjNEi X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(10070799003)(1800799024)(366016)(376014)(7416014)(22082099003)(18002099003)(6133799003)(4143699003)(11063799006)(56012099006)(5023799004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YWVKV3dOMUdMbXZnQ3h5c3NBTTNGUTBGZWFxM0xIbmZWM2xOR3hTK0Q1dTNE?= =?utf-8?B?azY1WjAycFZ1K1lSOUlPNDdLa2NaVjdkWkVIU1dXZGZZV3U0TU5SRkRLN2c5?= =?utf-8?B?MmV0WGhKbDdCOXlWZXp2c3BTMGgyYjh6STFIOUt1V081UXcvT1JPNlU5VzVY?= =?utf-8?B?MzJGZ0JxcW9jV1JjZDlOYTBUWXBmKy9iZ2xESHJlSUdnYi9JaWxzdGFEd3R1?= =?utf-8?B?dHlJSXBIV2I1NTU1cEJNbHIzNGNwREIxZURDVWZPdnJMcmlzWTJUeWRLZmVs?= =?utf-8?B?YlQ2eU1aQjAzZDNnK1ZpdGZBaHZZTlFBUnNIRzhKWkMzWjRVM2Q5bUhiZVpk?= =?utf-8?B?dUttd1EydDRxRHZFaEJMNWdmYmZSNnN6Y2YyQm5uNlZmU0tkM1ROMWJ2ZWFn?= =?utf-8?B?eEFmbUVJcFdiMlRXYWNKM0F6R09tZkY4dmdWR01sNDQ1Rm1hMWZZbU9LUVJL?= =?utf-8?B?UDU5RlY2SjlpRHZ6d2JXbjlhVVhpMGVEVm1PQnJGOUg2VEZhd2VybjhtY05I?= =?utf-8?B?OU9SNnZ1UnM5dkRFNlQrNnFYenoyRmExWm5vKzIrbjRxQTk5L3hOSzBLc1Qw?= =?utf-8?B?V0ljYThmMzJ4ZGloWVNPeldTQ0lHTDNKd3E4SXZoQTZxQUFOeDBGenh0Wnpt?= =?utf-8?B?V1EydEI2UERTaWlld0ZIcGFqdkErRG9LTndKNlBTUmsrVllHZ1pYaGpTTUpy?= =?utf-8?B?eGhiZmRjQVdGa3FOdEF0V1FVeEpzcGxleGxoSWhrTDVwYmY0VjBRb3pNb2xD?= =?utf-8?B?VTJWSnVkdVF4QWp0Y3NXay9CajFaeGhxT2x1RjBrSnZhbFIxUC9CZXQ4Unp3?= =?utf-8?B?WXptZEFOTzFRbmdvRUtIUWxrQnp5bHFhN2xvN1hUc0pvUXhIaDFobkVqZWd4?= =?utf-8?B?OWdFY3JNczhvNmdtdFZ4SFNwZjl4bzFxZ3pJa3ZHU0FOSWVlcUJFVHpvczhP?= =?utf-8?B?eXg3VHZlMEQzWlYzQzFUb2xSZ3hVYSsyVVlTR2hhL3dWNG1XZENYMUtJNm11?= =?utf-8?B?eTJBcDREeHpqMnhFTXJQT2FSUGJsaU5BZ1VxNExYSjJFdW50NVBUeFJHT0E2?= =?utf-8?B?Ky93NHZKck55N2FUUXJ2eUU2amtKNUt1elR3amlkVnQrckNPaGxGeVBaR1ky?= =?utf-8?B?RXRvV0xMZ05tdU8xYnRFYyszYkxaMlhYOWh4RlM0b2NIUHBqcFhHaHdkLzRJ?= =?utf-8?B?MDBLZTZvcElta1FnU1hiSTdaa1Z6SklhQzg0anZqclE2dTViWXVOeEppL0VI?= =?utf-8?B?dFVKQ3k5QUswUjMzWUgxdXhOb2Jxb1lPRUlWcTVOZFJwMUVENGE5Z29aU3Zo?= =?utf-8?B?YXhDemdkSmNPZVJsNEloR3FQYVpEeE5BanBtU0xhakNqaDdWVStOQkYwWkVw?= =?utf-8?B?TkdNYkMrbTI3YmJGVU9ZdlEza1pRRWRGb0swSm5RSHlhSE9WU3YyN2l0STBC?= =?utf-8?B?UDdQNXhkdWQ1dkRRV2szcUpjSkN1ZmNhRktIaC91NHlNNXJiUmFpb2JrNDVX?= =?utf-8?B?elZpeHFYL0FoNGI3L0VIN2I0RUU5VHBzTFAzNEtTdnBvZ1E5R1RxVjBvRlY4?= =?utf-8?B?aXQ2eXY4cTlFbXhwUjRmMjlnYVBRSXRLUUNpOVBqT3JJMDdsTVNndm9sL3dZ?= =?utf-8?B?cGlldEU3dWZzMHVCUXI4WURNdGNHYXJGTnlMY3B5NnlFT1IwYzZSdnJ6QXgx?= =?utf-8?B?UTZ6MEdEcWR3U3pvYnYwQjd0dEkxUkVDZGZiWkFndkhwOFpVd1Q0bnlaU2Zx?= =?utf-8?B?NXE3TjRtbDNWNEx3SWtyWWlXRDFuYStUVzBQbVZJYVdHUEVHWER2QkZBSm42?= =?utf-8?B?Nk91QTd0VGlYbzlNMWRuTXlzTkNnS3hXRnpLZ1dyOHJraXZSRE1Qa0lzWVNh?= =?utf-8?B?bVhLUC9xYjJaVWxtczVYaXN3ek56Tjk3c0pUTEFOeXdWVTBrSS9ld21Fb2pi?= =?utf-8?B?NHVHTEljSS9UczJ5cUJkOXBsVGJvYzBlZnJxbUZCRFU3WmRjcXJEQlJFdkVG?= =?utf-8?B?TWF4YWM1OHpTdE1MMWJETFRTQVBuMGIwck4vMW1sN2NHWkRqTzEzWmVtejYv?= =?utf-8?B?TmVrU2RQZG1hZUhHaWFtNUNkWXozZC9LQjF4WmRraWI5QU9kWjZBMWJhdG1H?= =?utf-8?B?SDhqb2JxOXRUMEU2UGJEVGkyZEFTQ1pSNHZBaE9Tc0pMaDhTQmxtQzFaRytR?= =?utf-8?B?RUJ3UmJiTkJYYmZCcGg5NGx6WExpNHhONW9ES0xxb0N5dlpFUzZTYkNyS29a?= =?utf-8?B?UkVMTDlwK1V1SDI2TXVTZ0RGUTNOcFZIcVR4UFdIZnUzdGd1S2V6R2NrbjBF?= =?utf-8?B?NUR2VHpUTnErUjF6WUxwTTRVTWNvNlZPZC9JRE5NNTMzMXVTVkhIQTUwWHJi?= =?utf-8?Q?BgFciSXPyHf4xExmwP3viqy2CJ0VEQOnR36XSx7agjqwT?= X-MS-Exchange-AntiSpam-MessageData-1: jZtc8DwitVkyPw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b3068a2f-dd63-4891-2837-08dec6e26cd7 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 10 Jun 2026 11:21:32.6862 (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: Y/qjsT6jVPXOloyuUVs81ynYUB5kWICvW8WgEFx6bRWjVxD4AZKNwu8IHhaO0dkFh11nGlvCziF3Yj+ClC0WYw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: PH0PR12MB8049 On Wed Jun 10, 2026 at 7:14 PM JST, Gary Guo wrote: > On Tue Jun 9, 2026 at 9:03 AM BST, Alexandre Courbot wrote: >> `Gpu` currently owns the state needed to unload the GSP directly. This >> means that `unload_bundle` has to be the last initialized field: once GS= P >> boot succeeds, any later initialization failure would leave `Gpu` >> partially initialized, and its `PinnedDrop` implementation would not run= . >> >> This prevents adding fallible `Gpu` fields that need to query the GSP >> after it has booted. >> >> Move the GSP state and unload bundle into a dedicated pinned >> `GspResources` object. Once that subobject has been initialized, its >> `PinnedDrop` implementation will run even if initialization of a later >> `Gpu` field fails, ensuring that the GSP unload sequence is executed. >> >> Signed-off-by: Alexandre Courbot >> --- >> drivers/gpu/nova-core/gpu.rs | 86 +++++++++++++++++++++++++------------= ------- >> 1 file changed, 49 insertions(+), 37 deletions(-) >> >> diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs >> index b3c91731db45..6b3e02c71dee 100644 >> --- a/drivers/gpu/nova-core/gpu.rs >> +++ b/drivers/gpu/nova-core/gpu.rs >> @@ -262,35 +262,59 @@ fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::= Result { >> } >> } >> =20 >> -/// Structure holding the resources required to operate the GPU. >> +/// Self-contained resources to operate and drop the GSP. >> #[pin_data(PinnedDrop)] >> -pub(crate) struct Gpu<'gpu> { >> +struct GspResources<'gpu> { >> /// Device owning the GPU. >> device: &'gpu device::Device, >> - spec: Spec, >> /// MMIO mapping of PCI BAR 0. >> bar: Bar0<'gpu>, >> - /// System memory page required for flushing all pending GPU-side m= emory writes done through >> - /// PCIE into system memory, via sysmembar (A GPU-initiated HW memo= ry-barrier operation). >> - sysmem_flush: SysmemFlush<'gpu>, >> /// GSP falcon instance, used for GSP boot up and cleanup. >> gsp_falcon: Falcon, >> /// SEC2 falcon instance, used for GSP boot up and cleanup. >> sec2_falcon: Falcon, >> - /// GSP runtime data. Temporarily an empty placeholder. >> + /// GSP runtime data. >> #[pin] >> gsp: Gsp, >> /// GSP unload firmware bundle, if any. >> unload_bundle: Option, > > I suppose this field is for unloading only? If so, you could just create = a new > type that stores `device`, `bar`, `bundle` only, which works as `device` = and > `bar` are Copy. > > struct UnloadGuard<'gpu> { > deivce: &'gpu device::Device, > bar: Bar0<'gpu>, > unload_bundle: Option, > } > > impl Drop for UnloadGuard { > ... > } > > This does mean that the `device` and `bar` are stored > repeatedly, but this way you get a very clean way of representing this: o= nce > `UnloadGuard` is created unload will happen. For `UnloadGuard` to be able to run the unload sequence, it would also need a reference to the `Gsp` itself, and to the GSP and SEC2 falcons - which would basically turn it into `GspResources` unless I misunderstood your suggestion. (the falcons are owned by `GspResources` because I want to make their `load` and `run` methods take `&mut self` soon) `GspResources` also already stores `device` and `bar` in the fashion you suggested, for the same reason.