From nobody Mon Feb 9 03:10:48 2026 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012000.outbound.protection.outlook.com [52.101.48.0]) (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 7B261244686; Tue, 28 Oct 2025 15:07:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.48.0 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761664070; cv=fail; b=ZNJ3EfmITEuL0zjH45k0PD9Xxh9rgEyPppkA+d2gnPt+KDEo4wAL/55P/VcVyUs5ChbAAPEgSmJWzFN+5FPnAWDGhJXkiqwBW9WAdne9yFgqLwHTWYPCh4r+4Zs1MERJ/0UhzQo9nb/nfNuORCvdu2SpXPvhH9FRWMk9uQyi55s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761664070; c=relaxed/simple; bh=QeAjkcr3rZ4+zJeQtC8ugmqtJ20MHiOkCU4jC/B0m3M=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=uAciFnkfIr5iA/4WpZ0fsaLCFMVTaJv9bLuxsXXzgwXYR5JcblB0iGZlILE6l1yiUZeVQhYSwY17QYVr+rks/eOmLKvcbb2of2NGlYSbPcxZcJP6aQphfxGgzujHfim33XMCxl12J2MwG/SD732M4YLzLtI0s/7D0vuiTokLtUI= 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=XvxKx5If; arc=fail smtp.client-ip=52.101.48.0 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="XvxKx5If" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=V52BmR5M3F5B9xkE/NlS2Ewi+tkQO98X62Wb92NoqO6QuEDFgK9QcAcPmoezTWBcyXMJgB+6ojUEdQBRLiLFtjqLAe9LT/mArLTlNO6oJqNlmknIaFPxZ9r7+npU9sDk+e6ZI0BVBazKQa4l/aibNXqXXuUHNmNxg/TmItFjVPPhcpA/O/G6FsfpVAKYBZMv6ivDJlDLXbpa8FZN0yXBYUBjsv7RRilWE+uT/8a+vl726Kbh+oxp/WZRW0iki/GuttX5ypLUQKC4dNQX3IHtiPYH9laagRikF+UW9HKmm/onojCKTfcALgpcer+NELgl89Yf6rvuTK8ujX2ZRaANeg== 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=soAjM86jq+bjP4ZjihZWywB30j+taTOgsQ0APY9COv0=; b=aEU/O6lWdghfEqVrakE53ba/MKN7ceV5rdkUww+wdhc5r9Z0OM20nxCG6GuiLaPg+VP5gAkuQOAxdLmtujPrsCKfcEO0JC87WH998MKkg2MUtVMj/bP/CRgVCTNLmFIfiSERglClC5cBr7AFzO65MgsPntUNzqJ8gHfc28OzRzY8/IYP59LmYslNm1FI7DD2vd3sKkRN+iVx+yKSTSdivkesdmvUd1XuUDbgajXCB1p5gS1C2Y57/1b6Se9D11GcBxSi+1pRgNgUo87yJTMhC8RzC1bzv6nC945xBHKMbV8r9YzJLQxdKdBev3Ux97drG8CaGG7ASqjLWNyjOwmExQ== 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=soAjM86jq+bjP4ZjihZWywB30j+taTOgsQ0APY9COv0=; b=XvxKx5Ifu5xp+LG+e7+B6o/etqxlrxra5g9ihN+V47xewf5jnX1HnRM+nd9qans2ISR6W8pOLsOfJF6UhFCE0GcZX7cCrv6axwsZVp3aV9GcfoHVufmApqrQjmJ4IY1XegrZQ0jWqKcQoVsC/F7LWw1bjU1dGZotn5uq72VsLX2C8yCTYaPjVaRQtNTao2Or+1G0ni3QoTvcBOG1FapSVGN91DRmPgskEpr48uAejalrCdTmU9UWB1TqtVCFglm06Ie5hLrG8GAOHaiJrITn9wMVEiaEA9wDWNgr7k5ubEGHHapTiTp+H2H8zRJOfqP9y3i9WWkruNb6qZUy9U4/wg== 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 CYYPR12MB8924.namprd12.prod.outlook.com (2603:10b6:930:bd::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9275.12; Tue, 28 Oct 2025 15:07:44 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%6]) with mapi id 15.20.9253.017; Tue, 28 Oct 2025 15:07:44 +0000 From: Alexandre Courbot Date: Wed, 29 Oct 2025 00:07:36 +0900 Subject: [PATCH 1/5] rust: transmute: add `from_bytes_prefix` family of methods Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251029-nova-vbios-frombytes-v1-1-ac441ebc1de3@nvidia.com> References: <20251029-nova-vbios-frombytes-v1-0-ac441ebc1de3@nvidia.com> In-Reply-To: <20251029-nova-vbios-frombytes-v1-0-ac441ebc1de3@nvidia.com> To: Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: TY4P301CA0041.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:2be::15) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|CYYPR12MB8924:EE_ X-MS-Office365-Filtering-Correlation-Id: 3c549fde-808e-48ae-8068-08de1633bf8b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|366016|1800799024|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?ZEtEZnNjeWRseFBZZ1pFMDRmUEVrbk5ZRFR2TmdCR2V4RStsVjlRUklsS0ln?= =?utf-8?B?elg1bThCaDdITXQzenh1VzNpVEl6Q1VtNGxVUEFwU3FzZlh4WndpY3YrN0tj?= =?utf-8?B?cWNWV0VRWHNJTStLNHB1WENpeWtXRnRzKzQrc1JHSGQraU56d0hwOFZLRlVU?= =?utf-8?B?ZjNhV2hXQTEvZ3UwUFNVSVdvb3UyYmhqVFcvUzJBbVhDeFlNNzZscDNGaFds?= =?utf-8?B?WlJsRkZrbUxyS3E1eUpTNjVETVRjc2I3eGxtOGNIbng5N2Z0QzJ6cVR1Sm1L?= =?utf-8?B?ZG56WUtaUXpQNUVwaTdQWVBuRVJJRm1hK0FKM0o2WDFvRmh3QmNhelEycmEx?= =?utf-8?B?dGI1R005RmxZaGEvaXN6UXUrajd0ZUJkUSsxbnNsUWsvcUd2MzRKV3NTOC95?= =?utf-8?B?Uk9ubmk0N1ozSWN0NHJkQnIxM0wwaEZpZXljVEVFMk0rUHd6ZFNPVFBja1FU?= =?utf-8?B?QU0rblpiREFpSEgxR2M4Ung3UCtlT0xSVE8rdGdqT2ZxTkQzTU5tMlhiT3Z2?= =?utf-8?B?a3RlanVvb21yZWJTTjVabUtrbDZRV1NrcTYzaW9SdzBjVTZ6bFlYMTMrSWdp?= =?utf-8?B?YThEMm54VExzWk5ETXZ6QTNadi9heEJwQWVFcFhSLzEvYU5xT3dzeDNCQjZT?= =?utf-8?B?SEpmMXF6ZFptaUdhYUJlWDkrNEFISXFiMkg5blBCWDYrbXlGdm5EVm9nN3lm?= =?utf-8?B?eFI4Yy92SHJUOFJuNmU5L2tLazFBRktkNVoxMGFlMXFxVGROakVRTmtab3V1?= =?utf-8?B?amhtOTFZMmxmdzl0VUlVR1laWEdZc0tCQUEwQ08vSmk5QjVhUldzbGRPTXFE?= =?utf-8?B?UWczMmQ3WVUvRllPZzBpTEZIZ3B5V01mRi93eVhlRXdMbURwSE01MTA3S1do?= =?utf-8?B?OG5TbGRkWTBnYzJHYmZQcDFhanlLZUFNa2JydFo3c2M1OFNaNEJ3NUk2NThG?= =?utf-8?B?WVViRmZTM2xFSGEwQ0p1R21JV0dhSy9mTkgrM3ZzeUtnMVV6SUJTaHU2ekI4?= =?utf-8?B?MnJPODJOU2pTcTRMMzlIWHhBdm5XdUQyOUhzaU5xL1I2a3FCN29mTHVCUnFT?= =?utf-8?B?S1lUam5CbVphYTUwSWtxMlQwNG50cjJRNVhIUUZpUUU0TDlmUmFacjl5NjRG?= =?utf-8?B?WUdKNSs3TmV2VzE3a21DTG1iZHBTQ1g4eXBGb0FDOHlhTzFaV2pQUkx5TnBl?= =?utf-8?B?cnlFWmNKUHBjRGpxUnhkeHU5bWdIQ3QvS0xiVC9LeFY5cjZtU0tCTGZGUkJE?= =?utf-8?B?alF1UUxkNzdkUmRBTmhOMmZWeThWOC9qN2JkUHllbnVHd2xpeCtsMGJDdC96?= =?utf-8?B?NExMdWdHdzhFWE1TejB0cFYyUFFDRncvb0toVjdhVzR4MjB2NkQxV1JodEFw?= =?utf-8?B?dUFTbzNpcHF6TFJnMlRWSUdZQVRmWDZaeFJIbXJBTDFXcGVZbGF3Y29IT2tW?= =?utf-8?B?YWFTdEEzRTBnV25mdTJ3TXE5ODZTREZnaG43bFFneVVXSnBrR252ZE9vMTFa?= =?utf-8?B?Z05kdWphTUFJQzdwVFZpcmd4bFgvZmM4R3BGNnN6UC9MNVVFRzZTaGVRV29G?= =?utf-8?B?SlpXd1dFVmZhYU9nUlY2QmZqQ05FeEI2SEw2NmNvSGhoSDc1WWpZNUtEeUgy?= =?utf-8?B?VmNrZFF1bnRXbndLVWt3d0NuZHpPd3E3aFZPazJockk2dWJWdThlM3lvdHcx?= =?utf-8?B?ZG4yOXBHQUExSXFCRHo0ZUtQVDJkNVZtdlBZQUY2U2QrNysvVnJKb29wb1Zz?= =?utf-8?B?LzdxM09qWml4ZjBSSm1xaFd4WGtpbDdXL1ozNDJyY1FWcDBURm42c0dsa1Fy?= =?utf-8?B?NU9FVHY5VGtZdlZ0TjNEN1Q3QzNBUjRUd3VEUjZ0TkdEOU9MTWtlOFhTWE43?= =?utf-8?B?TzZoOUYxclhuQ1VZcktiM1VJVWVYM1YycFNwL3d4T0t5ZVFvajJtVGVEYmZH?= =?utf-8?B?WjlLaXNja1M5eTcwK3Ewd3VxNkNaOHFUaCtZMllIN0lIY3ZMcG5INUxLYnlD?= =?utf-8?Q?yZfcIoBfEV2qoo79sq/bTtd2N6EuSY=3D?= 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)(10070799003)(366016)(1800799024)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eTBCR1RjbDMydGRXRURFelNkOGR3K0JyODdmNkpOdU9GR21FUWRMVlE4UTFQ?= =?utf-8?B?clJudkZQbTdDUEl2UkhhQlFvQXdYSmJySlQvTEhsUyt4eHA0RjBRak9sN1lt?= =?utf-8?B?SzhhUkJBS0twWitMaThOeUhZUzhGTHhFNU11QUwyVnZWdGwvK2VxYUZxUWVq?= =?utf-8?B?SnZYS00xSE9WWU5pVWUrcVRpRGg4TEVTYW9nTWZCNUJWNzdIbjRBb0JnVXdC?= =?utf-8?B?MFM2VlU0Q0l0dXdxMnZhOWJvZkJObWN0czE3dFE5emRLdTRLbkM4YUF0Z2pP?= =?utf-8?B?MklHK24vRml6MDR4a0lnR0hud1ZRN0ZnRkx2V0lEUlVMQ1kzSlpLWVpKenIv?= =?utf-8?B?MGpTTDhFVXJBYXorWFZ6OEZoczNHZWZ2d2djd3hjZlJtRGFmU0lFeW1jSDZr?= =?utf-8?B?ZWhla3Ercm1vc0t1KzZnTncwOFRuWUtsQUFpS1lzMitBZFE2aUlMV0N2UzQ4?= =?utf-8?B?NTRGV0l1ZFNNaERaZC81cjhvMSs3SExGa1Z0Tlo2YkhiZVFUbjB0SVkxRTJN?= =?utf-8?B?b21jMzdZMmh1Rms5blJWMmQ5NDMyUUplcXU5NnUzVnpNWFJodFA0T2pMc3hr?= =?utf-8?B?UTVaVjFOazJ6a1lNaURRTXYvRldNMDNUY1lCYmpoWWtnWUNPbmVmZ3AzRkZ0?= =?utf-8?B?dVNoTU5BbWxhbW1PZHhPanJMazdPOHVnT1VubjcyNElkSmJIcVJ5WGxtN0NL?= =?utf-8?B?SGdiRXozblUwTFBGejFuQjMzRTlOS3N2WHB1S3g4bVRWZmdCMEExbXczNzdw?= =?utf-8?B?Q21VVlliTk4rTkxheGhvVnBvQUNQWEw2NVZhcDZ4aWpwUzREdGh0OHphQTJC?= =?utf-8?B?ZzVmRVZqakhtaytIS3Z1UDhTZ0dKditpSXNjWkxjcDBXS2s5RzExV0ZsUDRO?= =?utf-8?B?UFVqTzhEY2tTWWg5TUkwblBLNmUvaVBaaFJxZVZPOHBhbmZpSUtBVzZRSk9z?= =?utf-8?B?TVpnMVl3c1hrZnFDTVNCamhZQUhVdXZDZTNiR09RblBlMTNaSnB4bm4yY3ZS?= =?utf-8?B?dS9PRERPMytiVVhVM25QKzRDMStnNnAyRFlXYlZBVm8zemRlczVQd2ZlU2Qr?= =?utf-8?B?VVZGb3dVY3FCekpxN3ptS3NNODJyM2dUMHpRTTFxbThJbCs2V2UwUHJqc1Qz?= =?utf-8?B?cWdLbzZHQzBFVTZZaWd1ZGM1WHJ6eUQ0OVFkK3hkZk9kbnZYVHF4MUhyQ0g1?= =?utf-8?B?S2FFRUZSWDJnQk9JL3NHbnBIZy9xdkp4RjB0M2RPRmNXNWlpeDhWLzBxa0hY?= =?utf-8?B?NDFPdjZhNjVDTVVuNjBtNEZpdjUzSWF3aWU0Z2ZYYVZiRnhGdmJ3Z3UzN3Bp?= =?utf-8?B?M2VZM0Z3eUthblZFY1NUVFEwendwU21jc3ZVdUJYTnRRUEhKdENGZlRXYmFF?= =?utf-8?B?WlJaM25RM0pBblhwajhGSlBOQ1JYK0RGQmQ5dU5YWWk5QlRjUWtXWmI3SDlS?= =?utf-8?B?K3EyYm9xcU1iTzRLOE1NN2Qvd1Q4Z2FOakJlUVJCNjIxdTJaZjIxVFhleFdI?= =?utf-8?B?RExqOHNmZzVsQnd5RDVKSi9MMVlQdlFuV2p5aG5RTEhpd2lIOG1hcm9uM1VQ?= =?utf-8?B?dXM5L0EyL0dTNWZtdUM1WkVrVHVndXlLWnNnZEcyM3lsc1p2cU9ZRU1JdHQ5?= =?utf-8?B?Y3h4SXJJQzI2M0o4TW9mR2VZODRDOEZ3SDdRV3pIUkpPbkVlVnZPRlZ5WEY4?= =?utf-8?B?eEhkZVBObmdBNkRpWXYwa0Q0dHBGck02NUhER0tmTFFDQ1I0Mmd4allUSTha?= =?utf-8?B?dEZwNHVxTjczTUYwMFFWbGVOMVRFU0pDblU1cDBEdFhkWWE1TE9HMVJXQm5i?= =?utf-8?B?bml4eGZtb3NzdFVkbkZkbzlXdU5PdDh1a2xqL1NJM1R6aEkrQU1KeEVxNXpZ?= =?utf-8?B?bHN3S2lmZGFJdElWWHRFNFZsTThWWXpSRmE2Q29ZS3VWR2ZuczdRMDluWGYr?= =?utf-8?B?aWlZUzN4dUxxSVF5cUdFc0FXREpiQXZJdjIzT2MzcU02bFhWcTdnTlBtTzQ5?= =?utf-8?B?MkdtSm1uNTJjY2hKc1YraDVTdGM0dGhMVWVSbHJvbXl0eDNnVmpWdHJ6Mk40?= =?utf-8?B?VFBvUmtsaE42NlA2bGE5UmxJemY4cWxZZ29UemVTbXRKMDVwcjhZSWJLTnBO?= =?utf-8?B?bWhVQlFhd0hUaGF3NmFpNEtYeVZzZ255NytWdHZwV2dza2VjY0JtVFl6T3dv?= =?utf-8?Q?+75BZjrogXRrodf8LXpabX0BWMHcU9Y+1Pz7gRQnzsnA?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3c549fde-808e-48ae-8068-08de1633bf8b X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2025 15:07:44.7128 (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: /H/KR0N83VGfS9HbE0h1eBR1+PnlRKYp+rCEJga5Se0F1cZZajLPSZn9X76Ia0kr4L7vbF2OThDvgGVJae477w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR12MB8924 The `from_bytes*` family of functions expect a slice of the exact same size as the requested type. This can be sometimes cumbersome for callers that deal with dynamic stream of data that needs to be manually cut before each invocation of `from_bytes`. To simplify such callers, introduce a new `from_bytes*_prefix` family of methods, which split the input slice at the index required for the equivalent `from_bytes` method to succeed, and return its result alongside with the remainder of the slice. This design is inspired by zerocopy's `try_*_from_prefix` family of methods. Signed-off-by: Alexandre Courbot Reviewed-by: Joel Fernandes --- rust/kernel/transmute.rs | 60 ++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 60 insertions(+) diff --git a/rust/kernel/transmute.rs b/rust/kernel/transmute.rs index cfc37d81adf2..00cd3092c7cc 100644 --- a/rust/kernel/transmute.rs +++ b/rust/kernel/transmute.rs @@ -58,6 +58,26 @@ fn from_bytes(bytes: &[u8]) -> Option<&Self> } } =20 + /// Converts the beginning of `bytes` to a reference to `Self`. + /// + /// This method is similar to [`Self::from_bytes`], with the differenc= e that `bytes` does not + /// need to be the same size of `Self` - the appropriate portion is cu= t from the beginning of + /// `bytes`, and the remainder returned alongside the result. + fn from_bytes_prefix(bytes: &[u8]) -> Option<(&Self, &[u8])> + where + Self: Sized, + { + if bytes.len() < size_of::() { + None + } else { + // We checked that `bytes.len() >=3D size_of::`, thus `s= plit_at` cannot panic. + // TODO: replace with `split_at_checked` once the MSRV is >=3D= 1.80. + let (prefix, remainder) =3D bytes.split_at(size_of::()); + + Self::from_bytes(prefix).map(|s| (s, remainder)) + } + } + /// Converts a mutable slice of bytes to a reference to `Self`. /// /// Succeeds if the reference is properly aligned, and the size of `by= tes` is equal to that of @@ -80,6 +100,26 @@ fn from_bytes_mut(bytes: &mut [u8]) -> Option<&mut Self> } } =20 + /// Converts the beginning of `bytes` to a mutable reference to `Self`. + /// + /// This method is similar to [`Self::from_bytes_mut`], with the diffe= rence that `bytes` does + /// not need to be the same size of `Self` - the appropriate portion i= s cut from the beginning + /// of `bytes`, and the remainder returned alongside the result. + fn from_bytes_mut_prefix(bytes: &mut [u8]) -> Option<(&mut Self, &mut = [u8])> + where + Self: AsBytes + Sized, + { + if bytes.len() < size_of::() { + None + } else { + // We checked that `bytes.len() >=3D size_of::`, thus `s= plit_at_mut` cannot panic. + // TODO: replace with `split_at_mut_checked` once the MSRV is = >=3D 1.80. + let (prefix, remainder) =3D bytes.split_at_mut(size_of::= ()); + + Self::from_bytes_mut(prefix).map(|s| (s, remainder)) + } + } + /// Creates an owned instance of `Self` by copying `bytes`. /// /// Unlike [`FromBytes::from_bytes`], which requires aligned input, th= is method can be used on @@ -97,6 +137,26 @@ fn from_bytes_copy(bytes: &[u8]) -> Option None } } + + /// Creates an owned instance of `Self` from the beginning of `bytes`. + /// + /// This method is similar to [`Self::from_bytes_copy`], with the diff= erence that `bytes` does + /// not need to be the same size of `Self` - the appropriate portion i= s cut from the beginning + /// of `bytes`, and the remainder returned alongside the result. + fn from_bytes_copy_prefix(bytes: &[u8]) -> Option<(Self, &[u8])> + where + Self: Sized, + { + if bytes.len() < size_of::() { + None + } else { + // We checked that `bytes.len() >=3D size_of::`, thus `s= plit_at` cannot panic. + // TODO: replace with `split_at_checked` once the MSRV is >=3D= 1.80. + let (prefix, remainder) =3D bytes.split_at(size_of::()); + + Self::from_bytes_copy(prefix).map(|s| (s, remainder)) + } + } } =20 macro_rules! impl_frombytes { --=20 2.51.0 From nobody Mon Feb 9 03:10:48 2026 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012028.outbound.protection.outlook.com [52.101.48.28]) (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 99B81335095; Tue, 28 Oct 2025 15:07:51 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.48.28 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761664073; cv=fail; b=TqRq/BCVxsSITy8oANL+iEy184vwJAaUZ3Lb0WEFetYNYgQipPTp7QHDhuszhzwYKSc0zfNG5SynxLfMvWpgtCQJNe+PhkKnRXV4sao4iq3/j047bHc9tJxJ/Xk6Mi/XfkCmIhr3hd+4zcLok5ryU8sOWmXEogemEE6ChsH2k6M= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761664073; c=relaxed/simple; bh=Wqn0oAtBMrAbFdGUDTWYIdg14OsCSSpkb3P9Kq+T/L4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=Duliwa7DedyzBiL5Yy2SU0drLOohEGTjBjE9FSu3MO9ni4fSxvzqSDMLiGo3vY66MaVYVKlk/SZt4WZR7RLuOJTQP64k86rhUtTHGRlBnhsJi2wsmvE1A9rwhPji+WuNtugyL/gOMVRF35u9WQ5MOK/nwGPvlm2MgfuWm03sP/o= 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=d/dz0kdI; arc=fail smtp.client-ip=52.101.48.28 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="d/dz0kdI" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ZeLPdSGHMqsq5kKsMwMps+cV7gLz8rUOZa0pCeEilp8GynMKV8c2s8b6RYjitUkuuCUJzvOkMGlf/Rkd5EPyjQLqKxOQnA9MvS0lBFQhI4oKUjZvg1yUQIQ/vKK1MHrR9wJOKLfgBoAQGcB3XTwz8H2q8QK4GpPppOwUlpOyJSqn9ghO1hXDEwekfkN1iGns4sHl17wZ09/OpSQ2axp++pZS63XflQC4c6OXJQqBWhPLhlj/fOcCtz1CJuJ3G+bTzgzWPUUYT+tf2E+69fkEjE99cZDglNbdM4ZW06MhXkHCQ4+xMHDQM+bI8J+cX61csv1AVZoxlPvFr3XosR1CvA== 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=Bv1KFLQwhzp4wTHGyAHqQsicSlrPU20HDJwYEohQtD4=; b=AUtrfVOfntfSv7a0b2tSNIJE9bJ5OIdqvq42j3Our7hn8AM+9wGiwY9pDJjAoerqMtoNl6kiybfNQl7YtYrn+/MP0CBYWsGsbh/jiNOTK16KLCs2C0iUZsnxYh3pnQNTCgewH0YVtN4/vvSOp53sXpSzQhbscY/G/BV1X074FHeOw3e14X2WsDw8anpjPUxII/YIKBxwHCgWsy9PZcv9iuntwpTgdGy6xHaiHf6pWSu3gIJD3OVe9LjrDUjJMDKk0mYc7Ign8IrpEsC8y0zQBliXxtZHflHlTKzw4GWJaBdvrLkawXIMJt17lt6hhE2HSgy+4/v7s+kpw1LGoh1q1Q== 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=Bv1KFLQwhzp4wTHGyAHqQsicSlrPU20HDJwYEohQtD4=; b=d/dz0kdI1CfqyCQxgfSgYUoIhLXPEebcm+p7A0CGjEoY3lyiPtCj9+nvJjSlRo8Gbx19q6TwsueCQ2noVyYSXtCECIKHvXThAseBsmn1kxRriNyx6Q/HMW961KDXuajRdmvaN6ZewBqfIIYSTvUyy7CplUC5BTtCYawVFYdeMiSADGhHLAjh1KiiFXKFpo12OhC27JlSmtBIhQBw4/0wwXwXsFsv0o4tSKDhTPCIYzdofqBNWCJ/Z2nyJp+zCOHFnhnkCtkZMHBRpX4qez/WyUgxhkXsdu+YoaNmwd7dAs/IpbTApBG0e/uMyx/OPTFn2QAmvIRoW4Pzuwm848E17A== 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 CYYPR12MB8924.namprd12.prod.outlook.com (2603:10b6:930:bd::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9275.12; Tue, 28 Oct 2025 15:07:48 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%6]) with mapi id 15.20.9253.017; Tue, 28 Oct 2025 15:07:48 +0000 From: Alexandre Courbot Date: Wed, 29 Oct 2025 00:07:37 +0900 Subject: [PATCH 2/5] gpu: nova-core: vbios: use FromBytes for PmuLookupTable header Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251029-nova-vbios-frombytes-v1-2-ac441ebc1de3@nvidia.com> References: <20251029-nova-vbios-frombytes-v1-0-ac441ebc1de3@nvidia.com> In-Reply-To: <20251029-nova-vbios-frombytes-v1-0-ac441ebc1de3@nvidia.com> To: Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: TY4P301CA0015.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:2b1::17) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|CYYPR12MB8924:EE_ X-MS-Office365-Filtering-Correlation-Id: f75a6da0-fe38-4b52-55b6-08de1633c1c5 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|366016|1800799024|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?K1ZSeEdMcTNPdjNOdEMzVHFCQlVBQll1NDVnWWw1VlJHS1hIclFzbU92K3Zs?= =?utf-8?B?bTZvSktoSUVYUlUrQ0JmenphVnR2L2M4VitwRWpSUXdlczBJbjJGWktNMTBi?= =?utf-8?B?U1BFLzYySHpDOUlNQXBvUnFtVisxKzVTV1hoTmhzeTAyRnpZc2Q1RGxwMEFu?= =?utf-8?B?YXFpc09SNGRYSlBPbTBHcTZvVzRHSndSV3Zqd0NzYllXOEVNWkFlR0xYQkVt?= =?utf-8?B?UFBPQzBMbXFTNmFlcE5seFVWbjhRdnJRSTQvU094VFF4VWRRVVRPcDJKdXRS?= =?utf-8?B?dWZOM1VVSXlvVXE2bTNuTUdXTVJXaTBzQktoakhEelFVVnpvRFY4M0IxZVhj?= =?utf-8?B?Y3RPTi9vbmd4bUt1UzYrdEtPL1dUd2c1aUtMN09MQWh5ckZvK1RmUHZablZV?= =?utf-8?B?NjY4ZVVHaTlGMjdNcXFuQjNtcDI4cEtBUnlYUzVlMDNTVmZUYXdUaWxpZHI2?= =?utf-8?B?cFNHcHJzS3RXZ29qSGxNbWY0WXpMc041UHdDaFJGRG11TkpINFlRcFp0VHc1?= =?utf-8?B?Smlrd0JQK2c5NFlXSk8vdzNtbSt1dG02VVNDZ0RUNkJSb0JhVzQwTmU3Z3h6?= =?utf-8?B?SHVuY25KU0JGK1FENW95NTFzWjBCUEhkYlVOakVJeWQxaFFUU1pCd0ZYZGpD?= =?utf-8?B?aTZINCtMRnMwT1JyMDlQVjloRUZKT3ZWTjdXY0dINy9RVElyUzlaSkZDeVNu?= =?utf-8?B?YTEyL1BHNGlsOG1xZGN5UVBGK0pXVzhCSllzTXBrTjNRWC9wWHNGVDYrcmli?= =?utf-8?B?WXNQZThJak1ESjhXMmVISUVKeFVyZEp3KzBEWTZCWnI5Z05TYW15dGxoRDIy?= =?utf-8?B?M2Q3VXBqdnhEeTFOSlJqOWZ5Uk9zV2tGS2VPWEhPSnhiN0VRb1pEOEJoV0Fi?= =?utf-8?B?a3ZmWXN4cTFmRW5NQ0dsWDFEZXkxMk85cU1TQ0ZTM2xoWFZod2M2QndmMFVr?= =?utf-8?B?UkFCZjJWc05sSU83VU1rS0tTK3RTQ2pCQUVNRjVzRG9BV2NQdUpQck03WFVz?= =?utf-8?B?WlBJSWQyblVrZmk0cHFyN01OelZLNFBSSENSYXoreFVZMXY1ZWpDbWN4d0tP?= =?utf-8?B?WERITTFMaXd6Y2RGakVXblBEdHBacFZBZmhDamkzdHBicVE0c0k0T1QyM0ln?= =?utf-8?B?OWdZbjJwYVFaVWlqcWxTcHgzVzVvM3M4akFNQVdYaCtpY0ZFVmtHNG5OOVV0?= =?utf-8?B?Q2tvMmU3M0FZQWpNVW83cW9SbW5vYlA0OTQ5cUYxdlVWczdIZDV0QjJXVHZU?= =?utf-8?B?Ri9YbE5kbUJHY3Q0YWkyenh2RzZWQlNtQmY1RDhwV3NBV0pMa3JyMldNbmFn?= =?utf-8?B?a2wvNG9UWGRabHAwby83T3lEVU5ZY2dhM2c5Nzl4OUlWMUVXMjNMMFU5MTVw?= =?utf-8?B?VEpZSHdZZjFOdXIwREtTS21rMTFYVmtJSFk0Y3NuZlhYaVZPc2t6TWtZalJR?= =?utf-8?B?eFlJVmhVVkREMFY1OTFDQjBwSEYvMnlNZXFaT1RYS04yYnE2aEJJd0crNXdi?= =?utf-8?B?bGM3MDZNR0dwTHgzYWxQaHRZQU5BZCtMVm9JeGlnZ3RUbU1WcjllYjUxbjY2?= =?utf-8?B?M21iS0Z3V2pFR2xqclp2ZUdIWFFWenVMS2xVcGZna0ZVeDdPblVpeDA5MUZu?= =?utf-8?B?K2NuYWc5dnlaVDBtZUE2ay9nNGlKaUtRb3Uvc2F3TTF4SW9DWGNDWml6dGxw?= =?utf-8?B?K3E0bXJuSkNSLzdIa055akp6QkJhTGZKNkIwRCs2RWxwVzhvdTZleU5MRmFq?= =?utf-8?B?VEFmb1lyelBzRTR3dDNLU3NDUkNidXRLQXViU2dzQk9NQXZNaGd5R1RqWXVR?= =?utf-8?B?RW9oWW8wZTJyVXNnS2l0blB4UmNTMm13RmFKaUFUeU9LZHB5YkZmK0kxTlZy?= =?utf-8?B?VmlqUGlGc0F5S1FGdTBmZnFxV2o2WVBBSnd3SDVnYldNdnJ2M25QNkljVjQx?= =?utf-8?B?N1g5KzhQV1lVZHVzWWRsVXBYMlBob0pyOGJnbVFsaG52QU1aNzd1elVnc2ky?= =?utf-8?Q?mPveVY2ffZMAeXpNrtQUnJwngVdiOk=3D?= 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)(10070799003)(366016)(1800799024)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?c2x6ODlscVZ6eUcra2g4NUNTR3prbDNMTGNrTEZOY0FkSkd4dC9QbCtHVEhW?= =?utf-8?B?elBtbmZLbUtCNXRMQTAyNHMwdWtkWTczTW1zRnhxbUcxaFFNeDNLREwxYVpH?= =?utf-8?B?NHBDb2hnQThiZTRUVktoR2xlamVKa0U1L1ZrcEsrUFVqN1hOaGpRTFA1WDlP?= =?utf-8?B?TDNyaHNjbzNWR21XNUljYzRaemF2ckxEeWV1aWtkeXZkc0NCRnJFWWN0NTRp?= =?utf-8?B?aGV4UkdqS3ltOU5sK3NnMG5xMWZhbTlxbW0vWURwWkVDd2o3QzRYS3RNVDBt?= =?utf-8?B?RjFIa1dFL3lWN2NyODVGNEdRRXRqR0lJemZ3RnVRWG9rdEFYZTJGeDAvY29w?= =?utf-8?B?ZEpXSThNVDNjZkxNVVFVL1FQdDJ6OGorVCtLeFJkTklDdENNcktvK2RpS2V3?= =?utf-8?B?S1E1bVcyQWh6ZGtXSXAwY0puemdPSkpVVFF5MVhsMzBrQ2xvYzFHNW1SbFJa?= =?utf-8?B?bU1NakRHWmZWaHZqaW90SzczUU9MNHlsckhzTmRpQmVHNHk3UFBGaWtRN3dP?= =?utf-8?B?N1FMUWJrQWlIRlhYTURQMHhDWHU4TTR5ekw3dTZHdXl6clp5ZVplQ2x3MTEz?= =?utf-8?B?NVh6S2pOYXdKWkJlVzh6dnhEZUQydWc5RUcvcU11bDlUYkNnMlFKUW9pMnlB?= =?utf-8?B?NnB4aThmWTE5TTVRZHg5VmpTTFBIUytZMUdOdGxGUzc5NTVuMUpFN2N2SGww?= =?utf-8?B?enU1eHd2eDdTa3FLTEU5SGVZNngyTzQ0cm1FeGRPbStPa1J4ZmYzWDVZVUw5?= =?utf-8?B?WTJPeVFtU0lwTG5CNEQwcmV6MmZPaThxUXVXYXhkMW9SdU5Ed0h4QnUvWTRL?= =?utf-8?B?RVBPQlhjWkZlbjZjeGFGdStzUFhpSlNLUkgzRGZSYXpCeEhheWRqaTlQUWtz?= =?utf-8?B?a0U2OUt6a3hvWVpxNVRja3lLMjZlbVFYQU9RLytWZzVaQlFLUDFPZ1h3UDU3?= =?utf-8?B?aFJSSUtmdnhtVWdUWGJVWjBZb0g5RjBDUDFpV3FzaGZaOHpXc0tRMU9jdXo1?= =?utf-8?B?REVYaUdjNm9Vc3JUNDhWb05GQjNhbUxOSXJHTmtFYVZLTWl5aExWUVM0ekI0?= =?utf-8?B?SmhWVGZyN09tbGJNUXhvRTZqZERsSlhaU2JyYzdxZUNFK2VabVBmalF5elNR?= =?utf-8?B?VzJlWVF2NGdkM1lqdkZmcXRBRkNIRDNqK0Z1WW8wQytKMmE5VXRaRzN1U1NV?= =?utf-8?B?bHUxcWw2NFdyUzRBSmZRRWUySWxiUGR6YTlGYktiN3BVWTdvRXdUSWNabTZN?= =?utf-8?B?eGtkYXJUZEZqV1FOeVB1OW8xZTh3Z1ROcWh4QzNuT2w3UXVzTkxGTGxsSFFX?= =?utf-8?B?eVQ5RnFVTTIvTjBZTkZSUXROSW53U1pmaWhUSFRCZ0lTTDMrNzZhdUZRNjJt?= =?utf-8?B?RElseitRbWlaQTUwVmdiZFBzVzN4dFMwOW5yMHIzN2ZuRFN1TGZZYTVBa2Iv?= =?utf-8?B?Q2NaVHROTGFRdXRwTkJhSitleWFqM3FnVjh1N2F4dXgzc1poNVBVYjUwbjZk?= =?utf-8?B?aGtFeE5pNHYvWEhnRk5DQWJXZXN2NGs3eHR0WWNnalVySnFwRFA4eEZrcndx?= =?utf-8?B?TmNLcFNUdkRkd05kWEhLUXBvZXpmUDN2WjNUY0RLdGpRd0VNaVRWUDhNeTRH?= =?utf-8?B?eUt6ZzlucGQvU21vNURTMmNxd1BtK3kwd3NvM1F3d3lqeXBOZjUxRS9CNnJF?= =?utf-8?B?K3hVc3pmTytFS2F4YlZKcFFtKzcwTVRYNStBcDNJVTlFWWhwSXRTeTJOUk1J?= =?utf-8?B?U2JtZVAxY0ZvckpxeEVuV0lTQlBlQW5kR1BuTFNSSFB4cmUwK3gzYlExTkhK?= =?utf-8?B?UmFTS3d3OW9CYW9KaktwNS84NjFiRmdYUUNwM1BmK1ZLVXJYM291b0JYaWth?= =?utf-8?B?R1FkK1dNZmJyRXk0YURvK3lkQW1hRXA0bXZjS2lBeFphVUhha0hhY0pKdmEx?= =?utf-8?B?dFR0QTBCaUVja2crYk1iVGhOckl5aWRZdU5pRmUyem83b0dTenhrQUloUm1J?= =?utf-8?B?aWw5YXVLU1A5SjBPQ0tMSHhOTWpVRjhWS3dIaittb0gxcXl1dFdnOEI0RlFu?= =?utf-8?B?VCt5NFpEMDhRT0NkVWJoQml2S01sMThsaGppV2ZYS2kyKzlqMDFKZitTSmFV?= =?utf-8?B?cG1WMHAwRTRxM1NyQlhiK2QzOGEzZk1hcUIySGVEZkZ4cG0xOEFhYjh5TWtO?= =?utf-8?Q?NstqKuCGqAWcafNHXOwD7x2ivTNdYG6v10wJA9S8OAJs?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f75a6da0-fe38-4b52-55b6-08de1633c1c5 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2025 15:07:48.5658 (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: xlfTaEJsF1viOyy47TbfBiBYkaAnUyshxZePppfroG/Son3vBMHHRy85c8oPRya8UA+UMalBfwnkwKgp7Y4i9w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR12MB8924 Use `from_bytes_copy_prefix` to create the `PmuLookupTable` header instead of building it ourselves from the bytes stream. This lets us remove a few `as` conversions and array accesses. Signed-off-by: Alexandre Courbot Reviewed-by: Joel Fernandes --- drivers/gpu/nova-core/vbios.rs | 44 ++++++++++++++++++++++----------------= ---- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 46da51b9f6b0..b6c20627a5e3 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -10,6 +10,7 @@ use kernel::error::Result; use kernel::prelude::*; use kernel::ptr::{Alignable, Alignment}; +use kernel::transmute::FromBytes; use kernel::types::ARef; =20 /// The offset of the VBIOS ROM in the BAR0 space. @@ -866,29 +867,36 @@ fn new(data: &[u8]) -> Result { } } =20 +#[repr(C)] +struct PmuLookupTableHeader { + version: u8, + header_len: u8, + entry_len: u8, + entry_count: u8, +} + +// SAFETY: all bit patterns are valid for `PmuLookupTableHeader`. +unsafe impl FromBytes for PmuLookupTableHeader {} + /// The [`PmuLookupTableEntry`] structure is used to find the [`PmuLookupT= ableEntry`] for a given /// application ID. /// /// The table of entries is pointed to by the falcon data pointer in the B= IT table, and is used to /// locate the Falcon Ucode. -#[expect(dead_code)] struct PmuLookupTable { - version: u8, - header_len: u8, - entry_len: u8, - entry_count: u8, + header: PmuLookupTableHeader, table_data: KVec, } =20 impl PmuLookupTable { fn new(dev: &device::Device, data: &[u8]) -> Result { - if data.len() < 4 { - return Err(EINVAL); - } + let header =3D PmuLookupTableHeader::from_bytes_copy_prefix(data) + .ok_or(EINVAL)? + .0; =20 - let header_len =3D usize::from(data[1]); - let entry_len =3D usize::from(data[2]); - let entry_count =3D usize::from(data[3]); + let header_len =3D usize::from(header.header_len); + let entry_len =3D usize::from(header.entry_len); + let entry_count =3D usize::from(header.entry_count); =20 let required_bytes =3D header_len + (entry_count * entry_len); =20 @@ -909,27 +917,21 @@ fn new(dev: &device::Device, data: &[u8]) -> Result { dev_dbg!(dev, "PMU entry: {:02x?}\n", &data[i..][..entry_len]); } =20 - Ok(PmuLookupTable { - version: data[0], - header_len: header_len as u8, - entry_len: entry_len as u8, - entry_count: entry_count as u8, - table_data, - }) + Ok(PmuLookupTable { header, table_data }) } =20 fn lookup_index(&self, idx: u8) -> Result { - if idx >=3D self.entry_count { + if idx >=3D self.header.entry_count { return Err(EINVAL); } =20 - let index =3D (usize::from(idx)) * usize::from(self.entry_len); + let index =3D (usize::from(idx)) * usize::from(self.header.entry_l= en); PmuLookupTableEntry::new(&self.table_data[index..]) } =20 // find entry by type value fn find_entry_by_type(&self, entry_type: u8) -> Result { - for i in 0..self.entry_count { + for i in 0..self.header.entry_count { let entry =3D self.lookup_index(i)?; if entry.application_id =3D=3D entry_type { return Ok(entry); --=20 2.51.0 From nobody Mon Feb 9 03:10:48 2026 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010056.outbound.protection.outlook.com [52.101.85.56]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B272A33CE90; Tue, 28 Oct 2025 15:07:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.56 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761664078; cv=fail; b=PzEtxcSqx7e9yoHnOjoYuygAJcjj5zG3UK2na9Z2INuzTIvMwRT1/T5fhBE+94Xvsz0fhladmSTKx4WSZ0aEdGF2RPqYfxB3wWks4W00IjBT0nios2lXpdejt9qK1qy+M0T4qZwsEKNOw7tV64OeMU+DsKvf2hwHSNWOD6hBOKI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761664078; c=relaxed/simple; bh=WMaGprdwgbt31CX1hS0jnN2DeglW4tGRzMcDeW0JDBk=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ek1I+NCBM5jkictSTCUELHmTi3ehCWpDMsSVU2GyxR7fHkIX9nj1V8W5Sm0VO+1i6BioqKy8mTFTIBLORGpx40Awa5uBUu1mx2lzV134a4JnjJuGpJVSpxZvxY/u95KhqeXOIQ0hfpbFJ3HuX0Sjr2rnG7YhaJDKABNoKsoKoB4= 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=ia/RC/zA; arc=fail smtp.client-ip=52.101.85.56 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="ia/RC/zA" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=SHl9G40Tx+Sd/kYl7e30KtI6YGyNI8+mrAEX52wKfUItmc+4YdM0MLrq6tAw+8BwDK+xR0zcc4484g3pt1jEzAyrRCMuOkCptLw4XWVNTc5XBaG2H+0xZ7ome5j1gYysSBvFypoVMPoT6OKC0CxVQ7tjMxb22brZJjOPJhlj6w7vv3mWDrMaKxQzExYDEPzfjsGgWO5apf4g0bYqMWZ9MjrxEdJkgViGxUE3wlHVSG3q12cwqf/WVRXphj0HfkL43pR0p14O7g7g8R8WgOWzNsbo58SfMr3rUljdbsk1i9/dCMOFfSu4QFmHfV2Q46SKUf6r9at0E91EyLkYmMWxLQ== 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=iE2Wnv4ABzNGxzjDUacxJh32ahtcvgCN/0oflg3y0vc=; b=ndjmFO1IgEaNZ4sbiZRLNpjpAZYk4GuFLswMf1OIJXRjIfxXEuhw4mOU2QNfCdBy5WCNXsuRNLOKBfCQk7asOidDIUy8tcI7jC56jZRPF13McAgMLsWAxtDIxnW7EYK5SNNYGPxgbpGErhY7IGeIJPpHVh1sevIsKf/dTQrjbRTatv9r/OvX1SxW1YS/qitYiN9pYQc+TOdWN5eu23NK2MUhq09XuwqPd9yw0KtHV9ORavLNBvyNAwPioQt+4ftpmonuleS97LUIFGaST4fkS5T7zOcZYLQ29Q1TQz9m224pqJ64fs0WTcQiEjdOdPjb0pHvB1SVdBJkB438uiyI2A== 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=iE2Wnv4ABzNGxzjDUacxJh32ahtcvgCN/0oflg3y0vc=; b=ia/RC/zAYXYEeukP/KBW0ZenJpvMPBnkb+0w4W0G+jzScyrUm69KJskZhHJazUE5F84PTuu4sTPPFXBsSGTnVt+Z3bNOlwuGFtX0efMj8kw80dq8GxNGc8fAinHagZvbDBGgpYtd0+MliFJrzsefT8lX+QPLiMgvMCi9uyfHq4kV3yIrmpdtMW0rDI4F+fjJJPHotrB17ek252gGBkOavjGeReb0jMVgZbeR09QbyQNLjfYWPvEVGEl5w81d+4KSd8g1sJsfwrGV7u7QLcq584/D7aB1PkF6842GDZVXokdzyv/yrEjMxQMkaJpVnydioKU1OXP1i1K/t+Df7c8cew== 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 CYYPR12MB8924.namprd12.prod.outlook.com (2603:10b6:930:bd::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9275.12; Tue, 28 Oct 2025 15:07:52 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%6]) with mapi id 15.20.9253.017; Tue, 28 Oct 2025 15:07:52 +0000 From: Alexandre Courbot Date: Wed, 29 Oct 2025 00:07:38 +0900 Subject: [PATCH 3/5] gpu: nova-core: vbios: use FromBytes for PcirStruct Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251029-nova-vbios-frombytes-v1-3-ac441ebc1de3@nvidia.com> References: <20251029-nova-vbios-frombytes-v1-0-ac441ebc1de3@nvidia.com> In-Reply-To: <20251029-nova-vbios-frombytes-v1-0-ac441ebc1de3@nvidia.com> To: Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: TY1PR01CA0193.jpnprd01.prod.outlook.com (2603:1096:403::23) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|CYYPR12MB8924:EE_ X-MS-Office365-Filtering-Correlation-Id: e382638f-5c96-46e0-85fb-08de1633c3eb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|366016|1800799024|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?aThUQkVxZE1XdFcrNFlMdUZZQ1IxdWNYUmIxRjd4RXZQRkNsQWhUbjZkZDAv?= =?utf-8?B?UFNDQjkxRjl4cC8rZHp5cDJha2dBRGJsR1Rzc25lZ2JEUDFWMk1Od2Fqekxw?= =?utf-8?B?SmRmL1QrVzgzZUtabmx5OHlsVTFTRnFxMmJtYVpKMXdmQ0lLQnl6TWxLZEpE?= =?utf-8?B?U2NZVElHbW9ISitCSGNmSnZLeks4cDdyVDVEdkpweTIxNzAzWHFReXNwNm1X?= =?utf-8?B?alBscVRNUEhBTDRQc0szTEM5TU9iTXZ2Q1RjaHdUNXpjaDBwcE9ldFlzbnk5?= =?utf-8?B?L28ydWdmdHVUeFVMSGIrK2x5VTEwN1NqdDJzMy81SXNjR2ErbWRaZGJ0VDE5?= =?utf-8?B?V3VNMCtDQkp2Ymg2M3phamN4ZnlHbjBEcXZYZ2FqdW1uOFAxeGlJTXd1ZHQ0?= =?utf-8?B?L1pKQ2dUeG96NGMzQzExKzRiNzZ0U0M1UFgvNDBNUXg0NG9aSmFJcEwvbWI5?= =?utf-8?B?T3ZxaDI1YjJINFhIMW1xbVdldXlpSVF1Zlo5czJWcXFPdDFrclpkbld3aFFN?= =?utf-8?B?YWkxS3JIYlBFZFJHWFF0TDVMOHJIdFlZUkY0QjQzOHkycTd5dnVYYkFqSUZT?= =?utf-8?B?MjBEeUtaTTFqRTRyODN3OXpjTHhFWk81eFZQY0hObjRGR254VTdPSWFKSlRD?= =?utf-8?B?UWlFK2EzWmJBN0hERzB3SW5NN0U3T3hQMEl2U1ZrMEIvQUZXdUJMUWNLamYx?= =?utf-8?B?dHliOTNxc0pKUkZGaklFMFhrMXpXSFh3bGxvRitYSC9kaEtVL2UxTmdtOVVP?= =?utf-8?B?YkZkSzcvU1JGaGFqZkVsUmIrKzFiZ0txVXg3VnY0UERURFZWYkVxVzlnTnA5?= =?utf-8?B?Y05BNk5aMkZXR2tGMDEzZmpUQkZJNWFrMmFxRW10blpjczVhenNoMlpvVXV4?= =?utf-8?B?ZnJuV3hEZXJFYTI2VWtNK29ka2ZLbWp6RVkySEVCTnBGMEtWNWZONlUrdldn?= =?utf-8?B?UkJ5M1NPNjJXZFYrZXBFQ0Z4SmczdGY5WlF1eDBoeDNRYnBHZ3dxRmZ0MC9B?= =?utf-8?B?NE11aVRod0JRVXFJWjRMVXlKN042K0ROeUtvMzRXTXFMWUJEVkg4VFFrUSsv?= =?utf-8?B?eWZ1ckxhQ3pvdS9MSmpXcm5NRDRvYkkzT3h1azRBbE5KSU5Ja1NWMEhhanA2?= =?utf-8?B?Zk93bWUvT0FERGc0VG1lZExEcXlsalNLVXJ1dTVFUlJHcjNoYkErRG81RzFr?= =?utf-8?B?SkZvLy93TzF2WVF4Q1YvQkJsQVNIcHk2MWRRc054Qkt0cEFNV0JGQ3V4TkZU?= =?utf-8?B?bGgzb3FFL284d2Z1QjFzV2VGbnlna3hxWVBxK2lIVWN1c3VCYXp4ZlBXYmhK?= =?utf-8?B?MzJ2dTlhZEZaQkJwQWZRMUp1RTh2RHFDOTdQOUprTnhWN3ZISkQyZzRJT2Y0?= =?utf-8?B?MGZIc1ptVzlFTFhSYXlLekFXNUJuOFRJeFFkNEFWRndpRWpIMHRhU3NHcXpE?= =?utf-8?B?WVhvb3Z5bG1zYjNnQ05rem80dDY5RTlGM2RacitBcGJRTHJXeWVIbHYxTTFn?= =?utf-8?B?VE9OUHVCVzYzRlFxdFBtczNLaWNIRUVpejRSbUs0T3pMN2VzUkJJamljZWtm?= =?utf-8?B?SDBOaGEzNDFjaU11NEF6WThpVnRkNS9sZmFSeHlweFdUYlZ4TTFNTWo4WTZ4?= =?utf-8?B?RWV2eVRkY2w3WUdwVUExWTJKMmhZVTBJamgvaHZ0TWpMZmF0c3hTMXlUZTAw?= =?utf-8?B?RFJhS0NDQjJSb2xneUE5MllhSzBiSlNsdFlQbTE2WmI4L3k4S0ZtZnF3blM5?= =?utf-8?B?TzJHS0c4cTh6MTZMbXFnRVg4MDhhQ1ljbEU1YThDOUU5QkR1czRPeWFvTjRX?= =?utf-8?B?Z2hXRXdCOERibTVLdDF1L1JtMTZucmxuOHM3VGd3aFpaK1JiVVQ3RkpUWllI?= =?utf-8?B?dFdRQW10dGV3Z1FzeUpRamJMTVhrbHdhams3WUV6QUF1b0o3dVBZbU1xT2lD?= =?utf-8?B?d01iMFNCRUlWLzNGY0J2SGVkUmlSVXFPWVFTNjQxVjdJNUxZRWpQUUw5Vk9J?= =?utf-8?Q?n/dySTVQyIxGuryIz9NoXQ+cfNq/4o=3D?= 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)(10070799003)(366016)(1800799024)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?K0hQa1ZrbXRUaEh0a21MY3c5RzF0blo4VTFoK0w1TlhpNDFhTkxxNlNjVFQ5?= =?utf-8?B?ODdoaEF4QzhUSTY3Y3RucW9QNHFHQzkrTFVCQWpPU1kzWnpsTEpmYTFDMkNE?= =?utf-8?B?OVVpTXNiNlVOR2g1V3VqNUw4WGY3cUJ4WTRhTjQyeFk3VmYxY0xKdm4xa0hP?= =?utf-8?B?cjJwRVBmbDNnaGVYTmVBWGF3R2Q0RlVUdFUvaTR3MnF5Q09IN0FZL1VyWHhK?= =?utf-8?B?UXZCUjUzZVVHS1BjcnNKaXRMZlF2NXhQQmRnT0lPbG9nSkNJbkE3OHkwUk9a?= =?utf-8?B?by82SnRzTEhYaUtrR1BKeFhidmJTRHFpVGVIWmpXV1NBOHorL2tYVjVXOTVZ?= =?utf-8?B?NVlqUlozRUNGenQ4Z0ZoTldSdTlVSTJ0RVIySHNVWU00UU92cmd5TFB0c0Rx?= =?utf-8?B?TmdWWnFGejRJQzkySEtEbloxNHNjVmJtQ1I3bzVHTmVLNThvUEdEVFJzOFBR?= =?utf-8?B?cy8wTjdTbmNXZEIzejh6RFdGSjBFMWdkeHhkbzdFTlU2K1Z5dXJvTTBOME8x?= =?utf-8?B?dVJrYUE5bjExOGtuSU5rRGYzOXFNRmlWSmFnd09OTmRVM3djeFRlZUpJNUNu?= =?utf-8?B?VmdNbkFTV1RTZUxLb2R4bDRzTjdDS3BkT2RRNHBmQlQ2dnlNK3VOeGp2bUhn?= =?utf-8?B?OHgxL2ZFQnNCNmh5WjZEeWk0RUE2WHExMEtEREpLaG81S29jclpBQ0pnb1lt?= =?utf-8?B?ODFsNlZSTE81eG1OM2hFSnFSYXd1U216emZHNFNEbGNZV1RpNHltR2pwZ1JK?= =?utf-8?B?VGJjRHhnb3BKNk4zUDlVOHdHR0tPL2VVenVvTnkwblpHMjlmeHc1UlI1SjQ5?= =?utf-8?B?NTZ3eDJXdGlpdW1JQVZHU0tpRnlYWGhQamMxWTZaWUIwRHlxSXdBUnBSZVZm?= =?utf-8?B?ZE5EZmI2a1lLSnZXWmM0UFlWdko0TXltck9hYk5sVGR2QjlKc05WU0JnbWU2?= =?utf-8?B?NlBFVkFVTzdvMktyaGtSRFVPQlRkdnRldU5tTGV6NWlYUlBSZWdEbzh2Tm1p?= =?utf-8?B?WTk0Ulh0RUpSMXB4Zjk2WlJEUjZRWjJsdm9yRFlXWUN4azlZS1UybW9DeWxj?= =?utf-8?B?NkxCdlV6VUV6QjR4ZlE0TnBmeW1hMkR6SGNsb0RCdEJhcVRyM3hsV3dBT3hn?= =?utf-8?B?bnhLWWFjRXQvRkQ2bkFubk1VOTJUR0ZnM0VXSWJqYTc0YXZ2eWpwZzJMT25s?= =?utf-8?B?QndIc2U2SUZjVUxaVzZTOFBNT2h6Rml2czlPZ2p6NVBDSkdLK0ZsTEkxWGZJ?= =?utf-8?B?ZzVSbkJyazJRQkdYU3V3N2UyOXdYanB2WE9Kb2lMZjZOclMrKzB5bzRrTUM3?= =?utf-8?B?c0Q0ODVjYVhuN3crbFlmeXZrWG4rTTlkdWg5dFNCS1hGcHBrMmxpL3VYbXNl?= =?utf-8?B?Zmh2SXkzUnZJVXZSSkdTVnJtRExLajh0V3MzWTRvakxlK2lMOGFlT2p0M0k2?= =?utf-8?B?V0lmb3pzR1ZPdTFBd2ZwV3BtYUtFYWNmMGNJaEdXaTZCNURsR1FxT2hJRjcv?= =?utf-8?B?OE1ocjc1S0c4bTZzRFVQajYra3U4TjBIN1ZmeWJBT1daNzNLOS9DOXlZdFZX?= =?utf-8?B?VDVDcXd3eVZmNERyZGlzb0l2RW5mc2RnamlwUUhWYUcyeDZHZVB0cDF1UXVt?= =?utf-8?B?TVdnMjdGdjVhL29NRGMralBWZTlHQ1pEL0VVR09jblFVN2txcG91QUlSMkxQ?= =?utf-8?B?REtuYnNoZ3Z2dzU4U2paOE8yYmdvZ1E2RWpOSGtlYjY5ZnVsVHc1WmFKN0Jw?= =?utf-8?B?NlRQcW9BM0VYRERxYy9iSHVoUlV5cmIxbnBRN2pub3NXZXk0NVBwQU1Nc0V6?= =?utf-8?B?b0JreElKU3k0eHh3R3JiM3VYdVFpeUp5QW1SLys3YTkyUHZvaFlRdUZTNER6?= =?utf-8?B?SjF6UW1SMXk1WmtPU29lSDlXRUxJQVd1YnZGTnJQMlRIUFZKWTN6YXFBZGRW?= =?utf-8?B?Q1BZVjhDazMvdjlGd3EvVUVQWGdWbm5yekE1cnBqNWV4RG42TytZdHRTdHpt?= =?utf-8?B?bWZ4OEtKVzVCSnA5cVNiTm03bUwwRHBva0c0VzIvOXlJS3A4WHQ5ZE8yaDVM?= =?utf-8?B?Um82S1ZsK3drUUV3ZUdYZ1BVWUhyRHdKcXV1dEZHeW52MVpGd0t0aW4wU0dW?= =?utf-8?B?Y1NVYzUxRFhER29jcndVRnVIcXVYaXRiN0NKOUFsSTdxczF2bXJTWGhJS0Yy?= =?utf-8?Q?Q0h3/SOoXMaD1XJlyN9JITzhefz26EoMiJ8JIxax41i8?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: e382638f-5c96-46e0-85fb-08de1633c3eb X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2025 15:07:52.1985 (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: pMnzd0of+QcEttPkX73hReeubXCTmJHhuKC3/lGZWW3hhFPXwIgGOTiav6goEF+R150D8vzOwze/sBoloA4V9g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR12MB8924 Use `from_bytes_copy_prefix` to create `PcirStruct` instead of building it ourselves from the bytes stream. This lets us remove a few array accesses and results in shorter code. Signed-off-by: Alexandre Courbot Reviewed-by: Joel Fernandes --- drivers/gpu/nova-core/vbios.rs | 40 ++++++++++++--------------------------= -- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index b6c20627a5e3..b02a1997306f 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -314,45 +314,29 @@ struct PcirStruct { max_runtime_image_len: u16, } =20 +// SAFETY: all bit patterns are valid for `PcirStruct`. +unsafe impl FromBytes for PcirStruct {} + impl PcirStruct { fn new(dev: &device::Device, data: &[u8]) -> Result { - if data.len() < core::mem::size_of::() { - dev_err!(dev, "Not enough data for PcirStruct\n"); - return Err(EINVAL); - } - - let mut signature =3D [0u8; 4]; - signature.copy_from_slice(&data[0..4]); + let pcir =3D PcirStruct::from_bytes_copy_prefix(data).ok_or(EINVAL= )?.0; =20 // Signature should be "PCIR" (0x52494350) or "NPDS" (0x5344504e). - if &signature !=3D b"PCIR" && &signature !=3D b"NPDS" { - dev_err!(dev, "Invalid signature for PcirStruct: {:?}\n", sign= ature); + if &pcir.signature !=3D b"PCIR" && &pcir.signature !=3D b"NPDS" { + dev_err!( + dev, + "Invalid signature for PcirStruct: {:?}\n", + pcir.signature + ); return Err(EINVAL); } =20 - let mut class_code =3D [0u8; 3]; - class_code.copy_from_slice(&data[13..16]); - - let image_len =3D u16::from_le_bytes([data[16], data[17]]); - if image_len =3D=3D 0 { + if pcir.image_len =3D=3D 0 { dev_err!(dev, "Invalid image length: 0\n"); return Err(EINVAL); } =20 - Ok(PcirStruct { - signature, - vendor_id: u16::from_le_bytes([data[4], data[5]]), - device_id: u16::from_le_bytes([data[6], data[7]]), - device_list_ptr: u16::from_le_bytes([data[8], data[9]]), - pci_data_struct_len: u16::from_le_bytes([data[10], data[11]]), - pci_data_struct_rev: data[12], - class_code, - image_len, - vendor_rom_rev: u16::from_le_bytes([data[18], data[19]]), - code_type: data[20], - last_image: data[21], - max_runtime_image_len: u16::from_le_bytes([data[22], data[23]]= ), - }) + Ok(pcir) } =20 /// Check if this is the last image in the ROM. --=20 2.51.0 From nobody Mon Feb 9 03:10:48 2026 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012068.outbound.protection.outlook.com [52.101.48.68]) (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 10D1E33DEC6; Tue, 28 Oct 2025 15:07:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.48.68 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761664080; cv=fail; b=Va5kLKnlDZT/bpGCO/Mu3vkszlZd+e3U5d+GIDBgpIkNfCDpxSVJm8yTPVbm8tvXDCa2OWA/BTMakMqX52U3DTzwkxWwUnWRkCA8ixpRC89HLxRC6qqW1wQcnolp0FRdOhZJhswGcfjg8BlbodhP5fA9vRjKB3MSCxzoDKXplWE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761664080; c=relaxed/simple; bh=RtG/jRQAU9hYWCMZpNLo9ozlZmvSvt8QY3CBg0wlhKM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=WmPtyTQBoaiWrp+DR+kaKFns9/nY89mdsEA9HEvM9rnFCkZ9H3IwwxtSWBYuq/wnkVBLwP7HVwRUz0tlPgHcGECU8Yv3gnJRbErbyD8c9WZ+Sqn0VfdacapaGNAnyGU7yA2RVKN9tVQH61Jec4CLOyxGPzlrQZPJ6ywlHJbKfBQ= 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=jKbeYWnU; arc=fail smtp.client-ip=52.101.48.68 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="jKbeYWnU" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jyY7AOd+ttk3F65LMS48aJw3q2ADvV+52AJF2rrOKsU3ydLTS7W9BIb21PrPz6cKJOAmqBqM+ul2kL1gxJVu9IScOnPcDDF1MFdbz0/a9q+OGNnYHYXqP4wlDK0IeatfnGRuP0ADpm0P/g892AqfyCmcls0e6Wkdvvcw20B39nv4O4fLRrAQLiiAX79M9y2tg8ZQ54YK8JSAF2qKpuM71qs27SvFcWrodlGLuy8Wpn3XmjjsW0WxaPJkYBaQj3p34KvnESl/Qah7VYFmy3P3TQNxyFvVaUSdzGkrEsxettrOymDf7q5fDGVktrR5uXqyHSQkw12goXBkaAFpxwUTpg== 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=oUsM3bdAzewwtEhA/Sa310RpDK4L/GVvwRgeZymV4MM=; b=CezdHZWV6X5dyYADit+2pObdYtastTZZMBJtfYmsidHojP7xlpiAT6RafmJjsA8WQnZVMnVWCJ7uR6VAWiRcidaeVXsfNzWcNaGadiHJRmDD7hNloX80e5zyGDYbMeoesLvQPErfD3IuVGpEOg0EMUmhKZaTET5BRnmdZhqwRE3NOfPoenNklOfia3OdCuzsOd5O3SLvrROWkYZ5hkdx7gyJChA9c1bN7zNhkpHCySFbL3fm4RbVeThcBlQ6HFNSDNbOua/2icGmvwB7mnHypri5puCCcVaXhBJ2X6SA2EJwQ+0+vmF7RlgzACulfntrqysP9rUv9AuVY6qIuIFEXA== 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=oUsM3bdAzewwtEhA/Sa310RpDK4L/GVvwRgeZymV4MM=; b=jKbeYWnUyH9y6zjmHkS6hrcSur7hPx0Vv5T3nlMGSOsT+IfGzFS8g39StoVc7itNaueqe9qG+t9JN/BNb8NkHPke4KlXRrN7j9HRDzCEEISpd9pimjEhbId+dvUrIcwf9Kda/CHOEv38OiY0e6Yy7A5gtWwrJBa10phOe4BdPm+pmgZL2eKUWt2BRD2X5J1hSW3WhZnHZ9H3LzoLI6qETI+iT0/3F2Nn9U08otT/ZQUDJIp1iPuinGxLDY5ilvlig+2GYkOZFRtLEpQTO2IaiWvy9OK+wqZvumHpxMEaJgFCwkGaDOwYTvLU+c/Kg9+zJ/m3QZYksxe0dKb4HwIVFw== 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 CYYPR12MB8924.namprd12.prod.outlook.com (2603:10b6:930:bd::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9275.12; Tue, 28 Oct 2025 15:07:55 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%6]) with mapi id 15.20.9253.017; Tue, 28 Oct 2025 15:07:55 +0000 From: Alexandre Courbot Date: Wed, 29 Oct 2025 00:07:39 +0900 Subject: [PATCH 4/5] gpu: nova-core: vbios: use FromBytes for BitHeader Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251029-nova-vbios-frombytes-v1-4-ac441ebc1de3@nvidia.com> References: <20251029-nova-vbios-frombytes-v1-0-ac441ebc1de3@nvidia.com> In-Reply-To: <20251029-nova-vbios-frombytes-v1-0-ac441ebc1de3@nvidia.com> To: Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: TY4P301CA0111.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:37b::10) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|CYYPR12MB8924:EE_ X-MS-Office365-Filtering-Correlation-Id: a65c1340-a938-4ce2-cdd1-08de1633c601 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|366016|1800799024|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?ZzZ0Yk1SdXRpRkFITWc0Q1pzMEg1cWZTMytpZXNUczJzVmQ1WHJOYmpaUE1t?= =?utf-8?B?RnZuQjl5S3dyaHF1dUFwZlZNQjNXbFY2WFpKS2lVQTNHckFMNnJDbTgycEZX?= =?utf-8?B?SEhDeHh2MUlCWm5NeW5CdDFVZ051Q3YzS3UxMm9Ka09VRFNCZHA4dS8zUEd1?= =?utf-8?B?R1BTMFhsK1dTTndJS3lsb2ltL3pFaDNsSDJ3OEJ3WnVkZ20xK3VaQ0gvc0dQ?= =?utf-8?B?Q2RLaHpUVVZIc09KVWZYcCtCbUlhdkk3aTVmT0hNMXo2MG1xekN3akVOdHpa?= =?utf-8?B?RzVlaGV5TzdnV2s4blFoUk1jOHYzNEVyN3prM2crb05lTkJtOUxqNWVxY3Y5?= =?utf-8?B?SUNXeXA3d2NicnRySTRhaytrdjQ4SnNYMjFXR1lCNFUxYjRmL3dOZVpvN0FT?= =?utf-8?B?Vm1KYmJxdnBFaTNLZ1NKYnBmNk1jb3RPU25FQWc1MXdkRDZWNzA3NUFwenZw?= =?utf-8?B?NjV6V0pMYmtYNmxXcnVFV21VS0VBVENONXZnazFjTmtiNEZFRUVBY1ErUmVZ?= =?utf-8?B?czdkTHBxL1A3QTVLdjRPbnh3TExvdXhHTWp1Y2lRWjlsQ0hDRHJxUGtlVHlH?= =?utf-8?B?RSs4aC9nZStWMU43ODY4UGFGWmNVSGxUNWI0RER0Szk3SWN2Q09NcUJpQTAx?= =?utf-8?B?QWZvSFpPOHZsRkFOSnNMQ3dkYmE2OGh2Z2FRUVk4S2pJdUtFdHRRNjdJYkdC?= =?utf-8?B?M3dZamNXSzMvNXNxeW5HbXlRTFZHdVhlMDhabUxOTnpwTloxZ05mQXJuZ0pu?= =?utf-8?B?MCtwNFBsSjdCa1FSamxsdU9pbU1raDlpSjdOTWR5ck9lcXJRWWxBL0FmWm9r?= =?utf-8?B?cUVldXNDYk5KUW5VRVFOMjZUdEhia0xHQmY1SGY0bElYY2g5RmVxUnkxa2Zj?= =?utf-8?B?NzJKTVl1OGhSTmtTZ3FYZ2pDQWE4S1JEeGpNRFRYT3dFMHRZU1ROSGZUd2NX?= =?utf-8?B?MWgrbnpNYlhQeElPVEV1WjVIclZWQmg2SVJsVkhORmxPWElFV3UvQWcwOWZH?= =?utf-8?B?SWxQcThyai9KZFpqeDlRV1RNRUdWRmIyUG1ZcEJuRHRuQnhwemdSUFFwUmlE?= =?utf-8?B?RkdodW9NUUMrWWZWQWFSZEc5cjN5S1BzcnRPZk0yaTM2RWdvcTZuODN1VWpC?= =?utf-8?B?cm5VZFV3cUFNeklDTHI3SmhRSjhQNjlSWkN4dVlRUG9DamVXeUZvdGgrSCsv?= =?utf-8?B?S1NLMEhJbmhLMWo5L1NZbk12cW16andMQjJ1YUgvMjVDUXVnYU1ocFZ0WmtI?= =?utf-8?B?TkFUZ21FNG9UbENrQlBJeDNLLzlUeVBaWkN6bUR0dit6TnJCVTRvVmYrbzh6?= =?utf-8?B?a1VidWl3T01pek5obk12TEQvZE1SVEU5bktiWENFdmNxMDdHUm5mZ1QxYjFL?= =?utf-8?B?NHlPZkthN1VoVXhjdGdFcG1QUWdxT0Nna1BjZ1ZsRjZYUGZmLzlmN1RuTlZk?= =?utf-8?B?THFjUzV3NDlGbDlkRGJ1c1o3a3BqSzByb3VTcTQ2M2ZEUFBQUld2QzRLaFpE?= =?utf-8?B?YktJK3pSdVFFQzRMMTZnTkZoMFJYQkp1aTh0dk11UjRzNitzL2hiUHI3TnIz?= =?utf-8?B?d2l0MTM2U2hNcmxmdjlTY3JuWjdkVTF5djdoS0lvWDVOOWxESzh1S3dRM25F?= =?utf-8?B?K3ZaMTNUYnN5MEd6UG14Uy9lU1BHUndDWGQwWlgzTFBmT2s0eHM3WnBBcVFm?= =?utf-8?B?RXlGeitMVVZKTGo0c243aVJaZ3dNNFFSQ2NFZVB0YTdoVVk2dnl2bUhXSEh2?= =?utf-8?B?WDFTZVJsckEvemZ3cmkvalRobnRMRWxhb0wyRktnZmxtQndEejJ2aG84WGlJ?= =?utf-8?B?TEo3OGNBRlgxKzQvekpXYXFTVDBzVlhsZlhBUGI1NUdYdWFXZ0hkRHFhN1Mv?= =?utf-8?B?MzFQNml0NGhFaDByM25aakRvem1yMnJVQnFkaWdtcnp6QmZRSGp6dnhXT09J?= =?utf-8?B?TTFvRDExN0FXMlh6Z3Q2YklRWm9PQlJlRkt6YXJsWUVWRWxFb1VPWG12R3FZ?= =?utf-8?Q?G98RgqHI5KH2xfdVRjiPDYIylK1gG8=3D?= 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)(10070799003)(366016)(1800799024)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WjZPOVNBWXlZVGwwbjdGU1dMdGdJMGJ6R1d5RnY1VlFrSmxWcjdJNy80b3NW?= =?utf-8?B?LzFONDNsZzREVkk3aUUwU3FJOGtGai8vMjVLdGppWXI3d0RTZXVjckFYUlcw?= =?utf-8?B?WXV3LzF0T2Yza0Q4Umh1UFB1YjlZL1pBWlhJREFlS2Q4dWVHL1B2U2Rib1RL?= =?utf-8?B?d2ZpUGxGSWpkRUg3WW1kVnA2eUJOVlhnVlBJL1dQR2hickk0bTRoTlJwejcz?= =?utf-8?B?RTJ3bFFPdW0wZlpUOTBHdUtQT2tVMDBRQ0dDZm1DRGFiK251aGcwOCsvLy9I?= =?utf-8?B?ZU8zTzhzTTUzNTJBbC84ZXliQnFtTk1oNG5peVRPSm1hUTNiVDRCZEdEdFlO?= =?utf-8?B?UzcyaHZRSDFkMGtLMTF4NDFBWDIxclVJWWJDelAwbkZ3N2dFQTNOOSt5UnhB?= =?utf-8?B?K3FpNlV4ejFPSER5cENCZ08xWGJrYW1PN3FKODNkNjVlczZBQTEzQ29QR3JR?= =?utf-8?B?cFk1Uk9ET3Z5a2pwam9aZjg4VUVPOHN2TnE0YU8rc0gxWS9XeTBEbXMwMXpL?= =?utf-8?B?RzJWOCtNRE9yQ050YWdxMC8zVGREMXVkNmN6ODVWNTJOZ2plbXRvQVJOU3Ez?= =?utf-8?B?VGlIMkF5NU1lTGV6VWtjRzMxTnQvNGNBdzdvT2VrRU14cVgvU2draEp0Nk13?= =?utf-8?B?ZjRpT0tvNEJZTXp2MlZ5WUhPVDJqT2tIczVQV3VFYjBFNjVqaDFWZUdvd2Vl?= =?utf-8?B?NytDQy8ydk44L2U1aFZyZ3FycmdZVDZ6STZHb0xYQjJXRStVdFVCMDJ5VzVs?= =?utf-8?B?cHBKeFU2aFdmSDNRc1pZTjVFTFdoanZ6bGVicU1ISEdzdU1GTzBIYnRzKzdH?= =?utf-8?B?bzgxNWZGTXZ6aTZUVTZBRGpqVW9SVzc4ZEdJbUVJNFhsMC9kZnY3UUpkaW9V?= =?utf-8?B?RzVxa2NZZ0JQaHl1M1dxSWl1TEZxc0JTcnFvRHJzTFJOTlZaNUVnNlpYQjdq?= =?utf-8?B?bW1EOW5TTGZMUldOSU5EbkNoUXNSU1BDQ25zdE5XczRWZldkQ3pFeXU0OGtH?= =?utf-8?B?N1hhcnZpWSsveG51N0pRMWRHTUpOYkVzRUd3UDE4dVBqVll0ZGhIeXJNM2xs?= =?utf-8?B?Q1dYY09vWDJjMGVoTEJuaUJPaGFWblUzeCswUU9HZUhiYVloUHZQMUVyRTdI?= =?utf-8?B?Skk0bnFVS1hhU0VXMG1pYkY1ZnJ2QjlLdEVQU25Db3VUSi9mS1MyQlB1S0pP?= =?utf-8?B?Mjl6VDdremorUHVtenJORC9Ga1RiUHB3ZWxWaUtScEMzOHBJNGo4QW9LSjIr?= =?utf-8?B?RGR4b0FYVERzZFhNQXhGL1BqZXlVWEllWnNlK2pwSnlJSTZ3MmNCckxHUSsr?= =?utf-8?B?MEhsSWV5dGJTZzR6OEx2NGhUT2dIbGdMR0I5Rzdjem9oRGVLdFIxY0tFV0Vp?= =?utf-8?B?RHJ2dW5vb3hsM3ROQ3Bac0c2NEpBOFB5VExYNzJybTI4WEtMNHJsV0FSVjJ0?= =?utf-8?B?TjVqcW41ZmZxVmFreFJzRlozVFZuZTlLeVZaMGNzdkFIcmhpZGl5SmlvR3RV?= =?utf-8?B?NlZoZ0k1aEVJSXNkdE5DU2F3L0hJRlBMQ0hXWmJ3OGdhSGNvSHR6dW9EUjFH?= =?utf-8?B?MzdIV1FOM3dMTFRHRlU2OFBhcUJWWmdFS1k3aGZIWStubFBUMTVGdDlaQmFn?= =?utf-8?B?bHhWRnBFU3pZR1g2VXBEYzJEZTkvSWVHT3dpbVhDdUVpZnVQemRWbkdOY3Zu?= =?utf-8?B?QTkyWXVrbHBVdlM1V28vMlRVTEVlZ1kxeGQ4clkzU1NOMWRMakJYRUpKNDNx?= =?utf-8?B?KzJCTFFYaTZROU9xRUVXMEhhMHM1WGNHVEE4bURRUWR3eVdSam1kcUE1YjJC?= =?utf-8?B?dEtkSHlIdUJsU21vWTYyRGhZeEdlOVZMVTY4cjNjMy85LzFIZ0lwbUUyVTFx?= =?utf-8?B?VHFOTGVBaGZRU0xuUHZZVTdGTmZpWTJSa0lBZmRPMkcwVjd3b3poMTYrdWQy?= =?utf-8?B?ZU9pbUdQdDE0RmdnWldQWU9nMkgzbTQvSURoSkpLSlJKRVg3blZMMzdMcTFJ?= =?utf-8?B?a2dvYUNmMXEyRm9yZ2NNZmluT0pRQkNyckZiNU91WnJkKzVrOXZobDRtQmQ2?= =?utf-8?B?MURyRzhDdFJsUldZRE5JQXhGcG44MStHeEpoSWxNZnloK1BtMFEvY1E1dzJJ?= =?utf-8?B?c0lpSkhacjlGTGU5NDBZaFR2dGZiQldpeGpGdmFaRWwwSnZtMjcvT1hHZEhN?= =?utf-8?Q?6aSz8NXc+Crz0v42mA4uPaNqd+eppJeIyZQPL3nFikIF?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a65c1340-a938-4ce2-cdd1-08de1633c601 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2025 15:07:55.5748 (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: gUZv+F5ii7s1zK/ntZtmC56NLOsNwHW8aaJHQpGeDEW7dfOtJJ51DmUroi4UwYDwlcilzMFtOWAuj1ZMJYbh4Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR12MB8924 Use `from_bytes_copy_prefix` to create `BitHeader` instead of building it ourselves from the bytes stream. This lets us remove a few array accesses and results in shorter code. Signed-off-by: Alexandre Courbot Reviewed-by: Joel Fernandes --- drivers/gpu/nova-core/vbios.rs | 23 ++++++----------------- 1 file changed, 6 insertions(+), 17 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index b02a1997306f..ade99c90dd3d 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -374,30 +374,19 @@ struct BitHeader { checksum: u8, } =20 +// SAFETY: all bit patterns are valid for `BitHeader`. +unsafe impl FromBytes for BitHeader {} + impl BitHeader { fn new(data: &[u8]) -> Result { - if data.len() < core::mem::size_of::() { - return Err(EINVAL); - } - - let mut signature =3D [0u8; 4]; - signature.copy_from_slice(&data[2..6]); + let header =3D BitHeader::from_bytes_copy_prefix(data).ok_or(EINVA= L)?.0; =20 // Check header ID and signature - let id =3D u16::from_le_bytes([data[0], data[1]]); - if id !=3D 0xB8FF || &signature !=3D b"BIT\0" { + if header.id !=3D 0xB8FF || &header.signature !=3D b"BIT\0" { return Err(EINVAL); } =20 - Ok(BitHeader { - id, - signature, - bcd_version: u16::from_le_bytes([data[6], data[7]]), - header_size: data[8], - token_size: data[9], - token_entries: data[10], - checksum: data[11], - }) + Ok(header) } } =20 --=20 2.51.0 From nobody Mon Feb 9 03:10:48 2026 Received: from PH0PR06CU001.outbound.protection.outlook.com (mail-westus3azon11011025.outbound.protection.outlook.com [40.107.208.25]) (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 4C39133CE90; Tue, 28 Oct 2025 15:08:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.208.25 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761664086; cv=fail; b=W6YHLBka9hmALKeQHzLtIpFY3WTMfGhMwDlfbBCTHpiNbeObkmslAZIYyTUEzX1zg35hwlXSR4mLe1sGgNGjwJ2nlm95t+FpTEN+5VgmAcBvowLyyIQV8dv51h1F/YffFOdQgGOxQalpUbu3R3AdfoqbtJ+HWh/2DGJZhJjqdZY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1761664086; c=relaxed/simple; bh=qOOgaGrSjfnwCQiUQG1WhNl0Pn+1UwG9YtQG2KWvX24=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=d876xWk5QGLIwFnPy5k8LPBnorq1vD9W7bhCpFAJu/Y3n80BbikUzvGnj3CVSlR4/Uwvc+JdE259WIFiJ5+/wQKyCNj6ujbPR99b76PszmYQ8a7bSN264jArPVxEjNZloUzpaG6QKnDM/D8ANltAOFBLSv5FRFhDNTI5RUVVRrE= 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=qHHeBPW4; arc=fail smtp.client-ip=40.107.208.25 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="qHHeBPW4" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=RCQVSrPCvv0Zc+OWOM3cCMNXyUpflTUh1KubFDL+IfeAf2/xMjKeTH612X70e2gLZ+XQCEcAoBiTfDpUHfsThRvZKRlPw3K5zIwZaXMVeu5zaFN5zdb2X/tZkonyWeq75p03+Y6Xym23AHATFDn71TT+llT66L2HutHBu25GT6Ds98e47GuWgCa4ibVt0vgm0C/aNn+wyYcWPO5kWAIacJhe5qo9oOtuxbssnpAIV7lQtFQpzx5mCotlOUDqLawDYM4vS8MZBw1KK3oi0YbqtFi9sQxtUeHT5AyZUH9L06MmFPi/zLNss3dct/9H1bSKyNFPP64zBO43QK2F7q9+Sg== 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=UN4eY6j9NDqJEyWDUa0EF5bPY51KUkoMPHIJSTj45H8=; b=Wq/IQJk+ujdg34qo5o2QY0hYLz1zAcdnkzNKNyKE7259+rWkxbOBF66J5sJ2cg6G1dfa4AvTAsi3hRE2KXpyl6GH42loTEJvNHo01KV59AWgJEYyorvW/W3OWqt2ojNBW3etpHyADWN0b7l18OvLiSue2D0o9CgXdfMe55UiQIeAVwQJqNbPlRjLnzNIjlZm3dNMzMJLNkr1DWLcs1bFqpzmgMdWjYhcUc8CAL8m25DKMQgZ9fk92Xl6dHf1LslDdI9DC03+OHYJ+eUnR7x1YTSBC29LYixIfFbEtghP59DV6PHsMW382yjlcm+YkqG7YPSZx3h05ZeIZYILkOmazg== 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=UN4eY6j9NDqJEyWDUa0EF5bPY51KUkoMPHIJSTj45H8=; b=qHHeBPW4tbmmfxjl0zE2YYoejxvBB0dVBG71KvZ8IanLNEpi40zI+VpzWbLS4iltY4NMHE3EAGDW899y0pCGUOlaMC9+N1tyJzcJVvqflFIwus03G+PqEQfE7bZlZYLeCxz0+WY6FteBGdZcvjJSiRRgg26Jx+NhPDzIkxQUpyutTHUGdhbo7F49OvjEcCa2al3B+Y2471qCqs7kb51X25xB/0zymmweq49z5WQFLzVd8ha5D07Uygp3k2Zys8nkZQsi2eAqZhLDR6gMIoGOkecgc3jnIJlVI99yAuzP5LbnN6tv6SvwUNJTz/fvw0pQVbba10YxWiWs2Y0d/i2Edg== 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 CYYPR12MB8924.namprd12.prod.outlook.com (2603:10b6:930:bd::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9275.12; Tue, 28 Oct 2025 15:07:59 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%6]) with mapi id 15.20.9253.017; Tue, 28 Oct 2025 15:07:59 +0000 From: Alexandre Courbot Date: Wed, 29 Oct 2025 00:07:40 +0900 Subject: [PATCH 5/5] gpu: nova-core: vbios: use FromBytes for NpdeStruct Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20251029-nova-vbios-frombytes-v1-5-ac441ebc1de3@nvidia.com> References: <20251029-nova-vbios-frombytes-v1-0-ac441ebc1de3@nvidia.com> In-Reply-To: <20251029-nova-vbios-frombytes-v1-0-ac441ebc1de3@nvidia.com> To: Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Joel Fernandes , Timur Tabi , Edwin Peer , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: TY4P286CA0002.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:26d::19) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) 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: CH2PR12MB3990:EE_|CYYPR12MB8924:EE_ X-MS-Office365-Filtering-Correlation-Id: a5affee9-539a-4d34-7c77-08de1633c83d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|366016|1800799024|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?V0hKUWgzbC9YYU9NRWhyV3Q4UFB3NjloUTloWDhwQ1BhcUdrbW1vbW1pdzVY?= =?utf-8?B?bUlBMzE2RUJ1RVRJZVhsSkNrN0l5QXhvSnF0RitMZXY1ZmVJbllUNkJRVU9I?= =?utf-8?B?aEQvNTd4RFpvNFN4QkRUM2dOWVcyK1Zzd2I4N2t6RDZMUmdnUVEvci9CaWFU?= =?utf-8?B?ZS96RWpETXlTdEhWbWlyK3p0VzQzajVzeGpNVGRydDFkaE9tS0xHaWhyQnpI?= =?utf-8?B?N1BUWitTaTVQSHQ2Nkk5K2daTEw5anRNOVR5K1A1Z0tiZHBURlFSNGorZEJO?= =?utf-8?B?Q2hTb2hpN0xHOGlRTnlURkZuM0RTNUl3RkR6VXhuNjMzb3VtVm42ZWtXNTNH?= =?utf-8?B?cEo0Vi9QM0pzWGpCZUVRNHlqMWhpRjVjN1lLRHErZjJiSEliWU02M01uNXRP?= =?utf-8?B?Nlk3R1JpQWZSYjl4cVVFY0c5SngyZUFQUUpXdCtmc2FKN1B1NnhSa01tOTNB?= =?utf-8?B?R0ZFVmhWQTZZUlRrTXVVUEFxa2taVy9wbWdSdGd5RnZhdXZNMFoza3dQOGxu?= =?utf-8?B?MVhia1hoTDFibERSL3NQaEpoczNBT2FhdC9vMEtQRWJLUVBEa2IrcUZ4TUJR?= =?utf-8?B?T2U1V08zQmNhWUYyUmJTLzR6ZVhVbktlYUZENGE5aUJGRmVuVWZHY2tRL3VL?= =?utf-8?B?WUY1eTVwdFRDMU55dGdIeGEwUnRBV2RORnFjTWZxWVBsUFh1Q0hvT1VaZFdX?= =?utf-8?B?Tnd1bUY0ZXNwN3pPL1hmZ2ZuL0hSeXZFS0hlTHVPZ2c1anBrZUxBbEkzRXpQ?= =?utf-8?B?YXZlUlJ1aUpWd1dlZkZIa1RxNjQrUy9jbHUxTUlFaXpLSGZFakhrWStqYkQz?= =?utf-8?B?eE14d29LTG5PcGNMU2c3OHEwQlMxNDF2OG1kSFlPRndydXJtREduR2dJa05X?= =?utf-8?B?eG94dEhjWFh2WEpRV2o0U2taNWlReWN1ZzU1K241VXFSb1NiWmVtZkRrNWFT?= =?utf-8?B?YjFkRkFBcms5dDk0S0lnTWxBR2tvWGNMREhXZnJyRWNwQkN6cnBuYy91alJv?= =?utf-8?B?UG15SitVRGNNZGpjei93UjdiUWpsSmp2ZXpmUmpWenN2Zyt4cHoxNE1wZ1cw?= =?utf-8?B?U1hlZ2RWdG1LeW4yU2RRcXdXMUhMeWl5czZCOFcwWDQrdlJlSXNDMFYvMlBQ?= =?utf-8?B?Z0VTQmhZdXBzMjJCS2pmeDRpODlqMG5FQUpXcHhNTFphVHpqZ0JaSXRmaVE2?= =?utf-8?B?bTA5alBqS3V0M0d5cm14YXFaZmpPMmhRSkF3NFpzZG4zYmZyZmFBOTJxTUps?= =?utf-8?B?OGN2Yml1UkoyeitiQWJ2cjdzU0xPWWhKUkdMREF3VzM2ODl3b0VwN05CRWF4?= =?utf-8?B?VnJWNy9rWE9FVXRaa21RNWd6cXJhMmpkbkwvOENpaWpUVXZHR0piL2xsNW1E?= =?utf-8?B?aGdPL3M1Rmk2d2ZrYitOMVptOXBrUjRPVjYyd0FvTWpwdkwzRkhGdEw4ZUxo?= =?utf-8?B?S21XZzIvQVlUSGdRVlZOMTBDbENjNlRWSjBZc1NPYWtPOWh0a0drTjhWL3pY?= =?utf-8?B?Wk9tSHV3V0dYOTREYmhZSmUrRjVpY0RVdy9aejRyVVczSnpxWE9iUWtnL2xr?= =?utf-8?B?bHZjOE5PNDZVSXdtQTRIcWp1Z1J0c3VEUFNTNXo1UytaREd3dUtKM0QwZFdp?= =?utf-8?B?eFJOMm9STnduZkRLSGRnRGcrenNRdVhmZklQczRmdGlTVDFHVGZXNUVKdHgw?= =?utf-8?B?bUhzRWZSMkdpdGQwWEFlZ3NJcFNFOFE1amI4L3J0NXhHaXQ0NG9DLzVZdHpF?= =?utf-8?B?VWpoMkhDVUhyc3hOeHlvc0VVVjhiaWJTRzZoWUtvMzhMclFqa0ZBZ3FGNDdR?= =?utf-8?B?ckFUVERwVWt2cHhodWl4U3Ztb3ZKTktGc1hkQ0dTUldGNWhZMmtkYzlSc2Vq?= =?utf-8?B?U3E0U3JRSGFxendUQkVER2FWdDdQcEE1Y2lodE11YVRUUWFRZHhydGNnQjMy?= =?utf-8?B?SGxtTU91Z0N5aVBkbzNzNDE2Uk5sOGVtbnc0cWxyc2RnNGMxYjAwNTYvZmZj?= =?utf-8?Q?k1gdkSoqqozsTyA60AMI04wwV6F3rE=3D?= 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)(10070799003)(366016)(1800799024)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cFNBdUd6SHNtU0pjbVNNdzlCakM4SGtMYUE2cHdxeHhKUWlMNzJ3U2tkbXpa?= =?utf-8?B?VmpCMHJPRitNdExtYzBrUUN4Sy9oVFZHand2NzJmdWZmT1RPblBRTllldG5I?= =?utf-8?B?THhiMUM2dUo5QTVWNG1ic1MrVER6aEw5T1FwTUUxajhKblVzeHpQb3NnUDZN?= =?utf-8?B?Unowd2VZeFBKWS9mZHdXeC9LR041Q0ZxTGFxMlowd2E3VGE1NzhWQ0hsak1Z?= =?utf-8?B?d0xYRTFwYTJobG1BUVY0TWpwRnhDbWN2cFJyeGVFQU1BT0VrRkdaa2IwKzVX?= =?utf-8?B?M1drMFpyenh4bHVOQkwra3FicmJWZUFuQnlWYkE0cUxobkZ4UE4wS2NQRmxB?= =?utf-8?B?OTJhSm5sZTdJclNzN3QwYzBjWmNqYzFPWTM5NDlFemhia2J5Z1dKT05UZElZ?= =?utf-8?B?WmFEbHJuMGUyWlRmalFxUkxya0NHWjhGb1hjRU9RR20weHdOdnh2c3JDNFlS?= =?utf-8?B?Q1p1YUdBNi9RTkV3OGgzV1JTSEV5SlB1VHF5NUJuWDdVWHVkOHN3eVRVS2pE?= =?utf-8?B?QmIxdkZRQkZwbjBwRjJqYUh5VmY4K0VwNnU4U0pUTk1FOEJWQVMzcm1Bb3lJ?= =?utf-8?B?bEpicTUxZ080aXQrRFVpNm03WVFPRHlybHhNMG4rMHdsWFBUeE41ZW9ZcjlQ?= =?utf-8?B?cUZ0NGM2SSt1N0hXb3RpQllzbXRCS3ZEcmxCVU1Oc3gvMHBpUDdQY1lDRzll?= =?utf-8?B?SXFobkMzNEZzdHk3ZWhaZG5ra0xsUnRpRnhtdkVyM0dJZkM1QmtaVmVPaUZM?= =?utf-8?B?M0RyanZ1a2szZFdWWlZmK1lUZVZUUDBhTjFNZUZTRFhhTU9rRCtuT0NvWCtk?= =?utf-8?B?VWk0bWN1ZHRmZHIxeFArRTFTYkhRdS9CT3ZucHY0Qit6MFZ1S1Rwb3FSZGJp?= =?utf-8?B?eWdncE1BblB6ZkNYY051SlBQS1F4TnkySDBCbC9Yc1g1elRWaURrZUZZVVRh?= =?utf-8?B?VzBvV3ZBWXdqU1Zxb282Ymo5aTIwZWg4NG8zTHNpZVlRMnVVZ0Zqa2RqQlE1?= =?utf-8?B?WjdBRDk3emRLQVZIaDZPbkhxbmFaWjFqUkkyeWI2RExVbHJqYmUyTklla0R5?= =?utf-8?B?VHVPM2xkQWhkVHcybmt5aEpmRzQxd1pSRm1EamhYMVVDNTFodkV0UFhvY3hD?= =?utf-8?B?T0k4TWdKV0hKYks1NVorWGVrbGlKZzNXYlA0cVFjUjJWRHBxMVhBYW9Wd0Vv?= =?utf-8?B?YjhVMFljcWYyK2xKQWFpV0RwanZNV2I2ZytmQlpVOXN0ZUEwR3A5b0lXVzdH?= =?utf-8?B?UVM4WGFrWjhSSG5kZDhYcUYvVE5CT2YxdzBzcG1aWWkwSnJFa1RUc3pUVDA2?= =?utf-8?B?eTdKbGFDYVQ0MGJCNVJmVExmUkxORzRGY2lkWitxUmxWejZhZ3didFBKYlMz?= =?utf-8?B?RlRlY3JINlJZcWR4VEptVjd6bU80VWFVanNEL200cW5EUGFOKy9DVkpReGZj?= =?utf-8?B?KzVxUUdzUytTTzRJSFNta2RUSnI1NkdqcHR6VzNhRVliTVBTM2w4NE15ZFZL?= =?utf-8?B?SmJJZVA1REh1R1AwVTh0Vkx2UUlKbVlFSmROUVo3T3cyenpIVDg1YWRackQz?= =?utf-8?B?bjJ0Yyt2ODlDOGJGUUl1aHQvUU1rL3dvRUVWSmNZWG9Od0doelJpSEpHOFhp?= =?utf-8?B?NWVyVmtsNHIwa1BVSzJJTlllUmIwUHgvTDE0Nm03OG1lNng0aGc0bnltYlJD?= =?utf-8?B?MGxaR0orOFZld3JxbG80clVjTzdOSytwMzRpNXh5cklRYVlZMEh4azRUN3Bn?= =?utf-8?B?dXA3MG9FVzlRbmVNY2xLeGtKNnBscDZneTBEMCtWcjMwTndEcDN0a2tsbWti?= =?utf-8?B?YWFpOStNcW9ZS2s5NnlyQmdEYkkzaXRCTlNLNithbXFHd3RBZTdJQ0tUTVV1?= =?utf-8?B?VCt2WXJGVmhaMVJVdndtTE1hNXZmK2xCd1UxdzIxc2xFU3dDMWxHSEZzODlD?= =?utf-8?B?WDRwcE5UZFowYWFJZ3E5ZEowK05zOE1qMzdHLzJlaVR2cG1iODlKb1NQKzF6?= =?utf-8?B?OGJHeFJVaXZEQnVibGRjNDBCd1hqeSs3RkFRSGxNVCt5WFNlcXpYVkl5aXBp?= =?utf-8?B?YUh5RVNzRFJuNHQ5NkRUTUNHQkhXOHZlQnNLSVlMZ1BTblpIM1dGOVpBSEtS?= =?utf-8?B?TzAxMi9hWER4QmlnYkN2L3NNS1d5RENMQXZmaWUzeVdaejBMdkRKYlEvNUdm?= =?utf-8?Q?TGEP9ktc7F9Zf1g1lR4zo9DF6/Bqiu6Hqy7MtrFxAYw3?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a5affee9-539a-4d34-7c77-08de1633c83d X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Oct 2025 15:07:59.3242 (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: frftjXdhveqppNCQJF/aDZbK3Ai+sY9aUMdxRrx1CBjCHM44Mgn8bD2XTF43iEQ6v35MuuoISH1iJFoUieuVYA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CYYPR12MB8924 Use `from_bytes_copy_prefix` to create `NpdeStruct` instead of building it ourselves from the bytes stream. This lets us remove a few array accesses and results in shorter code. Signed-off-by: Alexandre Courbot Reviewed-by: Joel Fernandes --- drivers/gpu/nova-core/vbios.rs | 30 ++++++++++++------------------ 1 file changed, 12 insertions(+), 18 deletions(-) diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index ade99c90dd3d..8d143df46ede 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -537,35 +537,29 @@ struct NpdeStruct { last_image: u8, } =20 +// SAFETY: all bit patterns are valid for `NpdeStruct`. +unsafe impl FromBytes for NpdeStruct {} + impl NpdeStruct { fn new(dev: &device::Device, data: &[u8]) -> Option { - if data.len() < core::mem::size_of::() { - dev_dbg!(dev, "Not enough data for NpdeStruct\n"); - return None; - } - - let mut signature =3D [0u8; 4]; - signature.copy_from_slice(&data[0..4]); + let npde =3D NpdeStruct::from_bytes_copy_prefix(data)?.0; =20 // Signature should be "NPDE" (0x4544504E). - if &signature !=3D b"NPDE" { - dev_dbg!(dev, "Invalid signature for NpdeStruct: {:?}\n", sign= ature); + if &npde.signature !=3D b"NPDE" { + dev_dbg!( + dev, + "Invalid signature for NpdeStruct: {:?}\n", + npde.signature + ); return None; } =20 - let subimage_len =3D u16::from_le_bytes([data[8], data[9]]); - if subimage_len =3D=3D 0 { + if npde.subimage_len =3D=3D 0 { dev_dbg!(dev, "Invalid subimage length: 0\n"); return None; } =20 - Some(NpdeStruct { - signature, - npci_data_ext_rev: u16::from_le_bytes([data[4], data[5]]), - npci_data_ext_len: u16::from_le_bytes([data[6], data[7]]), - subimage_len, - last_image: data[10], - }) + Some(npde) } =20 /// Check if this is the last image in the ROM. --=20 2.51.0