From nobody Mon Sep 28 03:41:50 2026 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010053.outbound.protection.outlook.com [52.101.201.53]) (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 A49C8359A91; Thu, 27 Aug 2026 07:30:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.53 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815829; cv=fail; b=a8bVqgVsf/S80HIWC4JOeUSIwv1ZbIWQWolEaYoY/y5EzjWnOpZ41vYn5SfrY7Etl/4Vvziyh5G8d9D5U48FHr9hEiu9cEgNHQTw9s7psKf4019KCPw6YoZqKHF5De5qH9LGS1mz/GikkkK/wekg8RLopoI0YAAbeTQaFsU+isQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815829; c=relaxed/simple; bh=qcOLzysGGSsjLUFhCvOEwho9GQva6kcYxNgUQH5+wEw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=PLDiRM2WtBnWT5TJ9/rsVO32hXZFaogeo0zjQU4A3D5cnoH3+IrwUslw9uilmNj3ya+1Bya0KH6SExxkDheaOVrg7Ur1G0IV2P4fVdteJYI4LYWb59fb9plS5jyNC+ymQI30XvET/GwPbfKO0AF5kWPDS/bs3xVGyjwzEn+UiNI= 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=gvs0VHyP; arc=fail smtp.client-ip=52.101.201.53 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="gvs0VHyP" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rS0VN+ZpxcMFWXCT82CaT0DCfvnp1DYb0jEMkSpKpZa6YPzXgXJzTT9ZQsSAX9KFQaP267cLnKHSSokeAJA2RvOFHw9NuIotalC5z9+/V+F2zGy0EHfEZ54mI+jkACIxSTA/C8uJqunn4dQEBjpdmupCW49pPYWGRWbnU4hYuNMTldEJ5HIDeitZmOSUxm6yciF49m4IFKNgSONxd4Aba9pf3/wiwtHyeLoelTyqQ2gRLDOKAlL3+XIpBO7AmzeEkImoyasnJc1lMxBiLqdH16/xcpuCSw6vAwhm5+r+hPRURgsKEWb/CNPBvAQgLfgzuGWz6HifvdTKZsBL/RtF7A== 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=+fKWG8O02Uz5mDQ/qYKA1kszylId4ZueHj1l4N6hfl0=; b=U5KwvkmpODvs3BcP7SCIHBly+fkE9FP0ckIlVvt2EW0zA1rpfWNuECWDMrX5C17LlCQAvga551QjCi9Uf5A2C7Lkq5P2/Aa0q4qIc2+X4Te1R3lCViRua1cqj7j/86TbHCFIr4o3AUec6uAOlTj5xbtQw5hcHE9SzDhGKODEomt93eX6cipYpx8FwmGCyPau+TMnPxpxz7/TM58a3r3UHp+9tZApdTd86CPyHv5/oSBK6OWR5m+2g3Dm4QuS399jG9kUAQRilFP5DY2XUcs2mGhXd3uAwqyJQrR6K7NlSCVDBwP3fFUkegCnQ7l5s4ld/kdoriubRuoDCJii3nDdIA== 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=+fKWG8O02Uz5mDQ/qYKA1kszylId4ZueHj1l4N6hfl0=; b=gvs0VHyPmc/0xzHwGjiSqFNumvmeeQhujoeGTRDKRhq7v//AA/IHnpG2NBub9wt3OvbEL0K9fF+Wo2J+3usAyouy88Hk+dmrk2nk/hn99c9+inhJ8Bp9ZGNdNF3vAloEIzUQQOLBIrJnPIK7uSNrron2AXtG+O5ReD6tzhJRPTSgovt6QjqeKY/2lmjEuE2OfqE5KsveR1/bV1VeBXX+rybKiGoXOM2cdfOdO4MncGgPoAydshNIwTcZLewna6tKfevQBYg9tGcJzhwT7qjmnT0aCnEF/Aw4lXEhgCaE8EXEgcpk4psS6e78tFM5JsQNu7SBkVjWCv9N5G4LJRM8gA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by DS0PR12MB999081.namprd12.prod.outlook.com (2603:10b6:8:2ff::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.10; Thu, 27 Aug 2026 07:30:21 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Thu, 27 Aug 2026 07:30:21 +0000 From: Eliot Courtney Date: Thu, 27 Aug 2026 16:28:29 +0900 Subject: [PATCH v8 01/12] rust: bitmap: use function-level cfg on kunit test Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260827-chid-v8-1-bc74c77d0214@nvidia.com> References: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> In-Reply-To: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> To: Alice Ryhl , Burak Emir , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , Alexandre Courbot , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: Greg Kroah-Hartman , John Hubbard , Alistair Popple , Timur Tabi , Zhi Wang , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, Eliot Courtney , Yury Norov X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCPR01CA0136.jpnprd01.prod.outlook.com (2603:1096:400:2b7::6) To DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) 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: DS0PR12MB6413:EE_|DS0PR12MB999081:EE_ X-MS-Office365-Filtering-Correlation-Id: 211fcf78-a37b-4718-9e39-08df040d0d03 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|23010399003|7416014|366016|1800799024|376014|56012099006|10067099003|18002099003|22082099003|11063799006|921020; X-Microsoft-Antispam-Message-Info: RcTX1vf2kOL53qH8NQR+RK+2WUzM5ZjVJU6wtptjlkZzpwiYTYxVyi8587vhbWqFZsvCdXB8/EszP81kgWGaFPiu4z64MRzN09ElGHBeNKFZwLFXny3gNMQUDOG51Nso6nSZtw2172D2MBGDDcdr0MjYuyoz7jjOyUPJuwg2o/5grIAtiw/RhzG/SKySq7uqqZvGNVMEvMMWndyebOz7u8YbnsMXfvw3T3Z46x7TKddaOgwnDWI9UyJFxfwuis7fivb35vOsQtplKPWW90QBLmyEKvDql4ZAPOT7hloWyLVE4VO/P16GYsfCpM6JarTGXPo0QbD2xLxm7cHapzvXxmf40czZ2m34CqatDxi+YXNhbxxJGEu7n0yXtZ4Z/JAq0NgHD8bHjUXwR/A/2gvnT7q0g89gcB+DykCoCGFINmLNP7AD01Pgzy/flN5BeBDxrrxTA3G5qWI2+pcThhVrZ8rKnQnnUQeodB42kQVJ4Ovc1MWkPYGLRKLCjJtAAy+J439AvLLq6j4XOMOSezXhEcaAud/ppyxPKS9F3HUNM961lFL4g9WrhUUCX/iv8Ad+LfEAoBuNVMVj5di5Mks7ZVx9lxU0CUpASSkjyO516zQHIlwyV8DHdkTFImy0AueykFQ/ZZej5BX4b3uM1dyjqkK8/qpPVDmfksGFN1zC2ddAwOxDDR0uD48iGrNT9it6A+fyRsGcKojcYw1lI4j/Vg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(23010399003)(7416014)(366016)(1800799024)(376014)(56012099006)(10067099003)(18002099003)(22082099003)(11063799006)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NGljNUU0bFFJODM4N2ZNUDRIQ1YrTlVaZmhGYUdDZ2h3M2hmR29oL280UGVy?= =?utf-8?B?YUF5b2szdjBsVVF5ZGFTWjA5N3hmVkRuWmJscko5bmhqNlpXL1dWK1BuTWxX?= =?utf-8?B?Vks5UFkvczJNM2FCa01ockFjdjNuZ25TMlh6N1U0blFLbTA5M1lXK214SG16?= =?utf-8?B?em5IdTg0WTcxRFJuWnd0L3NxOEVWWVluVlJ0dVA1SitaUmxVUURRQ1NmVlhh?= =?utf-8?B?MWhGR0F4aURYK3lTbWI3dExIZmxSWmtlaEx6TjNmNXl2ZDRzVnJVUjBZRmlU?= =?utf-8?B?Wk9OMEgzampNTGN4enNlVVEwU0YrbDBDdU1ONG01cmp1WVVMTmJHVExVZXlz?= =?utf-8?B?Z29tL3dIWnZUVlZYeFcvTTJzU09YMWdzbmU0U3V1QjRTWFMzQ2s0MmZPWkVS?= =?utf-8?B?bUJzbjZwNXZuT1h3ZmFkK2tGWWZSMFFjaExSYVJCYnFGTFRxaHlwOXd5Y3VQ?= =?utf-8?B?NXBMWnFaWmgvWlNEK3MxcjJleWpSRGhYVDhZMWs1N2d2clZ1TUxlb01FSDdx?= =?utf-8?B?c1BnZU9Mci9jYThmS0R3Y2JWUGlDeVhzeWpLZjQ4RndoRzFXcGJOeWtvb1Z6?= =?utf-8?B?WVBEZnVnZmZSSXJzbjU3UEZ4NEtWYXB0YjZVMmR5alV1RGdVOWVmUXpyeXBH?= =?utf-8?B?RUpzNFFUVzVldjdvaU9jeUV1ZnhGbU9kRUhPb2xlZmxNak5qQmNXZmVtTHNK?= =?utf-8?B?WGtFZHRVeHZ3MWlVcHFMR1cvbExKeUl3Tk5Ea2ZheW81WmM2NTdLQnlTWjk0?= =?utf-8?B?K0pDSWRva0oxR1BieGFtSVZ1LzBJWFhRL3FFaGRoemNUajZZUGFxbkxyUzIx?= =?utf-8?B?VXk3bCtYNmZYdUU0a0lhbXhkU2ZaaW0wUmkwVmhGaGc0aHMzdnVFNDNQN0pk?= =?utf-8?B?U3RWRDFpOW9OSjFtOFhtTnRNNGpHUWRkWmJFaXI3V1hiV2dTTXVhWStJeHo1?= =?utf-8?B?S29vS3ROQzBkT09wcXdzT2ltbUs4WnNwamZ3Q3E0WHFHSC9MSDFRajFod1Bh?= =?utf-8?B?MDJNckR5alVGSjgvOVhXMk1wb2ZXenNLMUlldG9RMC9hTFBRajN6WG5nbEZL?= =?utf-8?B?Um9EVnkxWFc4STY3TjJYTndka1R6T1l5L0dIeGdqMUxHMmZLMlR6RDYyVDlv?= =?utf-8?B?NVFIaW9BeWxSUG1YTE52N2NnYjc0aGY5cEczd1Z3dlNMUlNZeE9iQno5U2lr?= =?utf-8?B?MkpGZkV6ZEJ4c3dSUHJ1ZU5uRjRYbDErWERDdE8wVTNHYlpnMDhYYUJYaWpS?= =?utf-8?B?amtweHlKVzY0SE4rdHBlWFdiOFZ4RXZNRDVhL0lEZEp6Y3R6ZXo3aGJoNktP?= =?utf-8?B?QmJTa05HZGZleWEwektjOWlHWVRQUDJnYWVMZWhLMXA5SmlWZkhXVy8yUVQz?= =?utf-8?B?RERRTS9nMWZzM0JsWjA1OGp4aUdrVE1ReGR5L0lkd1Iva1JDUmYvVjJBdHBS?= =?utf-8?B?cW1pU2x6YnppeC9uVkpjalhYVk5QaThLcXpGMnNTYlFUT2M0QXJ3d2dvN3hM?= =?utf-8?B?ajlKSGZmcVRmay9RK2FrdE9aYnp2WlZyZFJ1akd1S3dJUWRrc05hVm4rR1pC?= =?utf-8?B?Q3kwZ3QrZmh5NnRBaVAydmYwWFJ3aE5aSjVUWkZjOFE2TFlTL25CTjFvK1Mz?= =?utf-8?B?STVabXpNOERkdUhGMTFselpCeVFESjVFQTZha2ZRYzNscXNEeFl2WkxMN3o5?= =?utf-8?B?UjhISTlJeWEyYWRQUUNxZ09qZ2ZFR01pbnJsMkxvcFpQT0Fkb2hzb1RXVDRz?= =?utf-8?B?VnY5MWJOdm1TcnhYU25NWmlXWTZjQ29JVk1VMEFPeS8zZnRlNUpWbVI5d1oz?= =?utf-8?B?VVErZ0ZqVjJGTDV0Q1dyeG9jVkcyUHJsQVRyRHN3d2NuWW1TYWpKQnBQSkFo?= =?utf-8?B?ZnJJdGx6MGYvOG10M2x6NkxuNHJDVFVmODBqK1lkUFFYRGdLUW9aanVnK0Rn?= =?utf-8?B?TitvM29DS0V3QnN2d3lWaVZZS0ZCbzFwd0tpVzBLRCtQdmdEL29DY2s4d1g1?= =?utf-8?B?VWJNRkFURm5zSVlsbk1TdmVHcXArWXlIRUNFOU9VSXBwbUduOHFpR2xXb0VR?= =?utf-8?B?aklZYm5ZWlJHbDBEbE9ERUVZam1MSWdBVmQ5RWk4ajE2WHNvejV5STFTOTJu?= =?utf-8?B?dXRkS0UzRnZUZEtya0oxS3RpL0p6NjFaTHM5OGR1a0QvQ0tHalplQzdJSWFS?= =?utf-8?B?YUdvcTkyNSt6emY2UUhXSUUrTXZoR3FqV2oyU01Yek5QRWdnNTRBMUZTQzZU?= =?utf-8?B?RWtkSUI2dU01VWFtazhlZ3NiV0Joa3ZncGVrd2xoejZqOEFaWkNmQmt6Mmx3?= =?utf-8?B?MXYwZ0hKaGkxYmtOOUJ3UE45RDN4WG5ESmp4bit1bCtzS0pMSm5PWVQxdmZ5?= =?utf-8?Q?O9ir0X50o+2+ttUJg745EDIlpRb3U1jsUH5FUqAJRdWN0?= X-MS-Exchange-AntiSpam-MessageData-1: kanD7/eQfVbpow== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 211fcf78-a37b-4718-9e39-08df040d0d03 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6413.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2026 07:30:21.0458 (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: SvcIj7rKAC9Yfcc/cXDJWRz5UVqueWbHomPUZlCvXZMpMdgdwDTKMJuRK1dRE8mHBBJZz0kTOxSe8j38MI0UpQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB999081 Since commit c652dc44192d ("rust: kunit: allow `cfg` on `test`s"), we no longer need this workaround. Reviewed-by: Alice Ryhl Reviewed-by: Yury Norov Reviewed-by: Burak Emir Reviewed-by: Gary Guo Signed-off-by: Eliot Courtney --- rust/kernel/bitmap.rs | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/rust/kernel/bitmap.rs b/rust/kernel/bitmap.rs index b27e0ec80d64..a43bfe0ec3dc 100644 --- a/rust/kernel/bitmap.rs +++ b/rust/kernel/bitmap.rs @@ -572,24 +572,21 @@ fn bitmap_set_clear_find() -> Result<(), AllocError> { } =20 #[test] + #[cfg(not(CONFIG_RUST_BITMAP_HARDENED))] fn owned_bitmap_out_of_bounds() -> Result<(), AllocError> { - // TODO: Kunit #[test]s do not support `cfg` yet, - // so we add it here in the body. - #[cfg(not(CONFIG_RUST_BITMAP_HARDENED))] - { - let mut b =3D BitmapVec::new(128, GFP_KERNEL)?; - b.set_bit(2048); - b.set_bit_atomic(2048); - b.clear_bit(2048); - b.clear_bit_atomic(2048); - assert_eq!(None, b.next_bit(2048)); - assert_eq!(None, b.next_zero_bit(2048)); - assert_eq!(None, b.last_bit()); - } + let mut b =3D BitmapVec::new(128, GFP_KERNEL)?; + + b.set_bit(2048); + b.set_bit_atomic(2048); + b.clear_bit(2048); + b.clear_bit_atomic(2048); + assert_eq!(None, b.next_bit(2048)); + assert_eq!(None, b.next_zero_bit(2048)); + assert_eq!(None, b.last_bit()); Ok(()) } =20 - // TODO: uncomment once kunit supports [should_panic] and `cfg`. + // TODO: uncomment once kunit supports `#[should_panic]`. // #[cfg(CONFIG_RUST_BITMAP_HARDENED)] // #[test] // #[should_panic] --=20 2.55.0 From nobody Mon Sep 28 03:41:50 2026 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010053.outbound.protection.outlook.com [52.101.201.53]) (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 33F79367293; Thu, 27 Aug 2026 07:30:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.53 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815830; cv=fail; b=lr25Dlk3b74PYMLW0iTJlgOucBHYWKfGcle4huCLSTx/woHJJwWfkucf22d/032y9zCgaN58xxYY34fOEavyxqlwVN69qPiNlfl7X1bcRBdNIQx009/ysbGVjAHKWsLFcKDcAepg/FTO6k9p/JqdW+sTf41uha0b9zpq2hD+xQ8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815830; c=relaxed/simple; bh=/OoNkk1XDJFkyD95FSICZ1TtGpkP0QShixzpN1kUqmw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ZJ+lDHxD++xANyZZBnjJigPiLXrLw295qw5KTiPA6G2uoJdmLJZhdS5AT3m7jPi0OeoMkTRH6LY48joScXLYNpAVrIkE0s5PY5yD1Q1aO9CrHgnXQaeZOeEqJ4zgbs16j7oDGSIcWo3KLd5EqFVE3Imex4NbkIet3N3TuK/+5k4= 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=V6Bav958; arc=fail smtp.client-ip=52.101.201.53 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="V6Bav958" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MFpa6xR0cMjB8OjKe0zO5493p7a+ch6hSZgwbCB3nZN8SJk/0k/slHaCBPEZe6NpCtg8Yy6iRzG0h0Q6jBl6SFuHp+jpAula5sqzKnvmUUbeUEEE9ezxMjavPkvVlX+MBiqnxbIlQj97sbN64/+3h81GtBsFUvayH03TQrh5k1rMhkjsofFgqif+IiLog5qQHjemlTXlyfGOYNXCP3hPJ5wF0f4zYWfgXC44aqPj2/78rdFHjNHrxwwlmcg7y0Mhxb2kvBzgIjH49D78TY7u/Trvjvopkq13haG5Rv4s3poCh/d8C9yvKtESTvMx1m6F1JW4AUyUogN5tlF0k4UpNw== 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=A5aLLm7ugufMFPvjCTovVkma4So9mGCQdTkhGB6v5r4=; b=glFLHno7PG1RKjDUE8MAlvKkQXh7zfMFM3B1P+o2M3pjf+AgwYCFiQCyTohZ6ZHIZoj2MPxwVYqZcEoz4GvttOPMIB2vLUAZUzr3PN6dhlvQ8ZwqnPNh8hSBfsMoL2UH89oTh7uXRTOMrgcjxju4pXdOFDFZlM+sB8eZhrKpsUuRQucuirlz+KFN5EIX6wXSolTGmvotvV5PX515vfcldCZ5rArQe5WqdE37ArtNJKOr38Q24B8W2uUgl64JMGdsRUxeOtaxCNL91ujDY7unQR+vMNe+yYw50vPjlsnLuSAnwh2NtVz1CzMWeMJnkUT1VsZQz9W18Dl5GIe3L6ldew== 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=A5aLLm7ugufMFPvjCTovVkma4So9mGCQdTkhGB6v5r4=; b=V6Bav958HmNouV/C4vTMZgRpH6XIszVewbovQ2Q8sYJ0qGzemOUwSCkk+ztlnog8twBozrztnbFv9kPOzh7QOUR+zoejZy084mAzBTDE8pqwAlPK3Y2L3/3IlKy2ldKB6r9uIOe/nqMllgJviJv1GpeApktIb0flZFiFJx0m6MlNnrXN+USFupRO7MNsgL5Zm4q6LLtwEk6xTnXlkxxX+BzSadqqCM//hJuA/i4J2Rd9FMVgvKL0oAcu4ockkJyriKlavCILpJ1d7l19+Hel/8FwXHojO1FuUBv0xpu+oWqnzfHjrvQ4L/yn1Lb/us72r6p0fWuTgfTB/QeRHCm+1w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by DS0PR12MB999081.namprd12.prod.outlook.com (2603:10b6:8:2ff::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.10; Thu, 27 Aug 2026 07:30:24 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Thu, 27 Aug 2026 07:30:24 +0000 From: Eliot Courtney Date: Thu, 27 Aug 2026 16:28:30 +0900 Subject: [PATCH v8 02/12] rust: bitmap: restrict bitmap length to at most i32::MAX Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260827-chid-v8-2-bc74c77d0214@nvidia.com> References: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> In-Reply-To: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> To: Alice Ryhl , Burak Emir , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , Alexandre Courbot , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: Greg Kroah-Hartman , John Hubbard , Alistair Popple , Timur Tabi , Zhi Wang , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, Eliot Courtney , Yury Norov X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY4P301CA0080.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:36f::8) To DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) 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: DS0PR12MB6413:EE_|DS0PR12MB999081:EE_ X-MS-Office365-Filtering-Correlation-Id: 081b81a3-ca4b-4370-f5db-08df040d0f0b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|23010399003|7416014|366016|1800799024|376014|56012099006|6133799003|10067099003|18002099003|22082099003|11063799006|921020; X-Microsoft-Antispam-Message-Info: CwQJXxiSiyBpMHHxsNC4/FXszHieJuDvl2eCN8OUUTVRLKtqRl2OXwte4wezZOZhGrY9MDUJ0KyDuef94dLfC6GIzDoGrSVoot12StT6+yPoE9nb8WaTBIM6Deg7os51URHerBp5GS3eHwbrH4gwJ8i220ve0yt2fKAkLMfq9n30dofkkjMZ3/86EYbOsEndXFmOvQpayjfWM27byjtvNmD9lMarMuqL6TtvV6sXpzwnc7hYc7tC9N9M+Cm7shtiHMmxWwZfac2LNElVre/lelI1NUF/PBB5OdxWFLWaUK8XH4yDgJVk+3hb5wor53BkkJZ74u/BkiRu32zGE0M908EI20/yWasOiABqSWBDtoxpG9sCaISl9NG+6nnqOuDhAT3zciZJQK9nVbBImaZYl2rTkXPZb9zK9jXYV+ksr9vLj9y4PiVUCQhCWhm7/GhaKgw/uhhoGxwZ616VwLazvwa/t7hrb0VMUplcne/5j09rdZrudzqfUpg+tdhP+pJf/vzxDpgbqSoKRB/2B9vT66AooIXp/PtnSf070o71Wol0+hN5qAC/rtOlSVSDPw7Ya24WS/MLXg3QFn8jwDiHorOFeGdrX944cKV0aZybIdkNKdJodlMGAQZSO9DkJHYZkH8XaqPRGiUxwjWLamdTacqeGtt9cLGp13g2ebMs2ytKfzn9R10+xLIDJuQr9PAnbD59gpVbOBeUBXf9BFkVCQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(23010399003)(7416014)(366016)(1800799024)(376014)(56012099006)(6133799003)(10067099003)(18002099003)(22082099003)(11063799006)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?cUlyc29CeDNjT1BiYkRoNnR3alVidVg4eDYrVkZKaTg5RmNXdk41SC85a2Nq?= =?utf-8?B?bkZhR0hnMkhpM1VBM0NNOENoMkFKQ2NscFVlMVU5NE5hUGREMnJIWWlvelp3?= =?utf-8?B?bDNDZEM5MkJ5ZlZEbmZZZmVqNmdEZ21PNHpHUys5OWEyYUJrTXBNak9icU4x?= =?utf-8?B?KzRZZU9zYkdmMmt2R1p4MTM1d3ltL01DcUhybzU1UE9HS2ZGVFNrenNTRFk0?= =?utf-8?B?bVR3bVhxT0p6bDh5akpKWUVMdHdnTkllZ0V2SFcwNVV6NjlNTzEzNTJNVmNQ?= =?utf-8?B?d0VwSWI3NUYydEwxTTNpd0V0dUYrR3czY0NrbUVVTk45STJWVDV2L0tnR3F5?= =?utf-8?B?azhoaURTOVFNRmkzNmN3WC9wSTQyd2NhUks0NzJlV0NjdzBXaXVjMFgxYnlQ?= =?utf-8?B?VTdKVUtoYzdGUnNQNjhFUmxieE5NRDRRR3pLc0cralE4VXpnK0lZb0lSNkpP?= =?utf-8?B?allrN2FXTzFoaCt2SDlxd1JtWU5zU0RGNzd3UUVsZlJseXpoOExUWHlZa0xt?= =?utf-8?B?Z09xUWV6RjhSakhOOVpHUXJnV2tjeGpoakxxT1dNcnowd0tHeDRzUXFjV1N0?= =?utf-8?B?dUNqNDlLTVN0blQxd3FRbXBUbER4dUxJMTZHMXp6R3pGMmkyUndGYnBQa1Zq?= =?utf-8?B?NGx2RlRDY0YrRGJJM2NlWWo3ZnBSdDllMXpHbWJ0Q2lNUjh3LzR1L1VRV2FT?= =?utf-8?B?c2JMZU9GbGtwZlJuMzRmUDA0YlJuWXhjRGR1elJEeGJPQ2pRdnlMY3FtbFBu?= =?utf-8?B?SlVTVi9NMG4zd0prUW5xNk1HS0I4VHdZVkI5YWNTZ25PSE80d3R2Z0p3RFc2?= =?utf-8?B?SEFWdGx4eWlGbTZ5ZzYvSXBIbUpFMkVIRFU5SStsK0pHaDdtajlaRkdJNFRW?= =?utf-8?B?bFhIczB2dmJ0aUpSbzF6VnlkbktkWUkyS1QvclVpSWtkbHRuWitUditocWFw?= =?utf-8?B?RE9qQlRUcThDdnJSUjhyU0R3czVPZkVNbU5tVnE1dzkySGtLdEhyWUpjT25Z?= =?utf-8?B?UEllMGNxdHAzL09kNU96eUNvMXU3bnFsdXBsUDRJMm9MUk5vT2c0Rk1wbUVJ?= =?utf-8?B?N2NrRFltcDE5QUdFTm50eVo0T3p2WFluSEpiWDJzUHphT1cyUFBkQjZoMk44?= =?utf-8?B?dVE3VDdkeEVzZm5ydEZFeFNsdTgrVlB3UkRHc04wM2dXN0FKZkdKMXJ0Yjlr?= =?utf-8?B?VmFBa2JJQ2ZEYlJPdk5tVG9iRDk1dzExNmVNeVZURU1wazRUK3I3NGxGYkxl?= =?utf-8?B?RTRFMmVFSUxjSjRDNEhCVkViWDBWNjlhdG13V1lnNHBraEdNL1U5MWw0NlZK?= =?utf-8?B?c2ptWVRySms4ZmVYdW9JOE5wNHlyREMxN1hreHFqMDltSWJ2OUZBejFXYW1M?= =?utf-8?B?dkpzSXY3bFMyQzR6UVRuNG1qSXBramdqK2JBbGdVTnp3NzQ5SlZuUUVubmdl?= =?utf-8?B?RWEzaEErblZ0dW1ESkxsUmlKNitGcWpYR2x3bDUrQmFxc0hCdGg1aEczMGQ5?= =?utf-8?B?NWZkNGZIODJINFFjSGg3bXd0aG00QWVqdkF4VE5rSU05UVlEazJwRDdZMGZu?= =?utf-8?B?WDZtVzFBSEhBZHI3bXl5VHFwSXA2bC9RWkk4N0tuU25jMHIzN0gzZjBuMm9U?= =?utf-8?B?cy9JNlZhSkhmUGs0Y2c0SENtekY0Z200WGFld1hYRHdITXVqYi9WcUZFVnI1?= =?utf-8?B?UHU4VklpYkhPbHh5SGdjNkdHQy9YV2RGYWtRQmRoQXc5N2ZkdG83TmFYTlZD?= =?utf-8?B?QnAxN0YwOW9EVzRFMGNSWU93V2RHOXFFOUtGQ1dlV092S0UyYnJGMWpLYktI?= =?utf-8?B?RlhGMzR2ckorclA3WFpQbDZiQzRYM0x0NHNTQi9nRDN6Ni9laGxBUEk5Rnlv?= =?utf-8?B?MDhKUjBMN3I1VFUzcTY1aTZYeDVqTndsbkVxMWVDd2k5NGw1TE5kRmJvdUxr?= =?utf-8?B?YXlDNkpTZlArUlR6ckNGdXJDU1RmTUtXekNjbmNCY3lsMlRiNE83T1dxZ3ZI?= =?utf-8?B?Vi81R2RVTk9GYitjRXNUcHBIV0o3UlY2ZzR5UmxhekJlSVJyUnF0YXUyRnFS?= =?utf-8?B?QjlVRDhjaGpTaXYxb0dIYVFUcVNJeVZhelorRXFhY2hGRC94eTEvS1lRS1Mr?= =?utf-8?B?U3pYYUtpQWtCU09xVEhIVlFOdDg2M1VOeGVNZzFoOHM4SGFRQVk1V1oxK3l6?= =?utf-8?B?NEtkd1VBb24vaHVQbVpHVEZncmRNTzkxaVBacmwySkVQMC9OUDlOSGtjTUhP?= =?utf-8?B?OHUxQnY4dUxjSWFmQ2dodzlqeDNyWHFvTm5RbG9JSUpEcjBMWWNTcHI4dkNa?= =?utf-8?B?OVZLOThyZzBGb3Q5VUthdlRNMFdwWndIZGVtUkphYVFKd1h3Yk9sWlhPTXBC?= =?utf-8?Q?HwO9NZpIUjVTaVftgoWXJ+SCJlIh/Tz57VK1wQ+wsqT3F?= X-MS-Exchange-AntiSpam-MessageData-1: E+mSX/dx/iq8PQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 081b81a3-ca4b-4370-f5db-08df040d0f0b X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6413.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2026 07:30:24.4529 (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: Pc7zddrsjAhy2mXXoAUw5dlGun2Xsh8z6tTrtk/klzmPd/ndKcPA0w7PHnlOqVxPEC2SqxS0pYrFe2dzFvDEYA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB999081 It is currently possible to construct a non-`BitmapVec` backed `Bitmap` using `Bitmap::from_raw` that is larger than `i32::MAX`, and it is not part of the unsafe requirements. Restricting all bitmaps (even non-`BitmapVec` backed ones) to a maximum size of `i32::MAX` simplifies a few things and matches `BitmapVec::MAX_LEN`. For example, `copy_and_extend` truncates `len` to u32, which is wrong for > u32::MAX size. `__bitmap_set` and `__bitmap_clear` need i32 for `size` and u32 for `start` - so they can't be run on a `Bitmap` with a > i32::MAX size. Rather than adding runtime checks to account for the case of a non `BitmapVec` backed `Bitmap`, just include that in the requirements for `Bitmap`. Add that requirement to the unsafe requirements on `Bitmap::from_raw` and `Bitmap::from_raw_mut`, and to the invariants on `Bitmap`. This also fixes u32 casts truncating in `copy_and_extend`, which could otherwise lead to OOB writes. Fixes: 11eca92a2cae ("rust: add bitmap API.") Link: https://lore.kernel.org/DKG0U8RLO7LZ.2I1AIH0S38PAP@nvidia.com Reviewed-by: Yury Norov Reviewed-by: Burak Emir Signed-off-by: Eliot Courtney --- rust/kernel/bitmap.rs | 70 +++++++++++++++++++++++++++++++++++------------= ---- 1 file changed, 49 insertions(+), 21 deletions(-) diff --git a/rust/kernel/bitmap.rs b/rust/kernel/bitmap.rs index a43bfe0ec3dc..df5505ec7a96 100644 --- a/rust/kernel/bitmap.rs +++ b/rust/kernel/bitmap.rs @@ -17,24 +17,59 @@ /// # Invariants /// /// Must reference a `[c_ulong]` long enough to fit `data.len()` bits. +/// Must not be longer than `i32::MAX` bits, so offsets and lengths used w= ith +/// `Bitmap` functions fit in the int and unsigned int arguments of the C = bitmap API. +/// This also matches [`BitmapVec::MAX_LEN`]. #[cfg_attr(CONFIG_64BIT, repr(align(8)))] #[cfg_attr(not(CONFIG_64BIT), repr(align(4)))] pub struct Bitmap { data: [()], } =20 +macro_rules! bitmap_assert { + ($cond:expr, $($arg:tt)+) =3D> { + #[cfg(CONFIG_RUST_BITMAP_HARDENED)] + assert!($cond, $($arg)*); + } +} + +macro_rules! bitmap_assert_return { + ($cond:expr, $($arg:tt)+) =3D> { + #[cfg(CONFIG_RUST_BITMAP_HARDENED)] + assert!($cond, $($arg)*); + + #[cfg(not(CONFIG_RUST_BITMAP_HARDENED))] + if !($cond) { + pr_err!($($arg)*); + return + } + } +} + impl Bitmap { /// Borrows a C bitmap. /// + /// # Panics + /// + /// Panics if CONFIG_RUST_BITMAP_HARDENED is enabled and `nbits` excee= ds `i32::MAX`. + /// /// # Safety /// /// * `ptr` holds a non-null address of an initialized array of `unsig= ned long` /// that is large enough to hold `nbits` bits. + /// * `nbits` must not exceed `i32::MAX`. /// * the array must not be freed for the lifetime of this [`Bitmap`] /// * concurrent access only happens through atomic operations pub unsafe fn from_raw<'a>(ptr: *const usize, nbits: usize) -> &'a Bit= map { + bitmap_assert!( + nbits <=3D i32::MAX as usize, + "`nbits` must be <=3D {}, was {}", + i32::MAX, + nbits + ); let data: *const [()] =3D core::ptr::slice_from_raw_parts(ptr.cast= (), nbits); // INVARIANT: `data` references an initialized array that can hold= `nbits` bits. + // INVARIANT: the caller guarantees that `nbits` does not exceed `= i32::MAX`. // SAFETY: // The caller guarantees that `data` (derived from `ptr` and `nbit= s`) // points to a valid, initialized, and appropriately sized memory = region @@ -51,15 +86,27 @@ pub unsafe fn from_raw<'a>(ptr: *const usize, nbits: us= ize) -> &'a Bitmap { =20 /// Borrows a C bitmap exclusively. /// + /// # Panics + /// + /// Panics if CONFIG_RUST_BITMAP_HARDENED is enabled and `nbits` excee= ds `i32::MAX`. + /// /// # Safety /// /// * `ptr` holds a non-null address of an initialized array of `unsig= ned long` /// that is large enough to hold `nbits` bits. + /// * `nbits` must not exceed `i32::MAX`. /// * the array must not be freed for the lifetime of this [`Bitmap`] /// * no concurrent access may happen. pub unsafe fn from_raw_mut<'a>(ptr: *mut usize, nbits: usize) -> &'a m= ut Bitmap { + bitmap_assert!( + nbits <=3D i32::MAX as usize, + "`nbits` must be <=3D {}, was {}", + i32::MAX, + nbits + ); let data: *mut [()] =3D core::ptr::slice_from_raw_parts_mut(ptr.ca= st(), nbits); // INVARIANT: `data` references an initialized array that can hold= `nbits` bits. + // INVARIANT: the caller guarantees that `nbits` does not exceed `= i32::MAX`. // SAFETY: // The caller guarantees that `data` (derived from `ptr` and `nbit= s`) // points to a valid, initialized, and appropriately sized memory = region @@ -96,26 +143,6 @@ union BitmapRepr { ptr: NonNull, } =20 -macro_rules! bitmap_assert { - ($cond:expr, $($arg:tt)+) =3D> { - #[cfg(CONFIG_RUST_BITMAP_HARDENED)] - assert!($cond, $($arg)*); - } -} - -macro_rules! bitmap_assert_return { - ($cond:expr, $($arg:tt)+) =3D> { - #[cfg(CONFIG_RUST_BITMAP_HARDENED)] - assert!($cond, $($arg)*); - - #[cfg(not(CONFIG_RUST_BITMAP_HARDENED))] - if !($cond) { - pr_err!($($arg)*); - return - } - } -} - /// Represents an owned bitmap. /// /// Wraps underlying C bitmap API. See [`Bitmap`] for available @@ -415,7 +442,8 @@ pub fn clear_bit_atomic(&self, index: usize) { #[inline] pub fn copy_and_extend(&mut self, src: &Bitmap) { let len =3D core::cmp::min(src.len(), self.len()); - // SAFETY: access to `self` and `src` is within bounds. + // SAFETY: access to `self` and `src` is within bounds. Both lengt= hs fit in `u32` + // because a `Bitmap` is at most `i32::MAX` bits, so the casts are= lossless. unsafe { bindings::bitmap_copy_and_extend( self.as_mut_ptr(), --=20 2.55.0 From nobody Mon Sep 28 03:41:50 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010010.outbound.protection.outlook.com [40.93.198.10]) (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 6BA0336B92B; Thu, 27 Aug 2026 07:30:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.10 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815834; cv=fail; b=BJ2ElRnvTkuHsBx5SwarD5JIpsvEWdixpqIU129G5TQ6qdWnGcQuaiKrYp6MvBjvKQz0XmE0QqJFsgJ959aiLA1QGM25SaPKC3OahL123xWld7eWEiVNe3MkiuN39w0/3nZodSeUZdyQocJXsb1GXoJPh2bMe45Z4ajfrrjWVBU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815834; c=relaxed/simple; bh=Jwyt8Bo8CYvYppk6H4Qt5uOULGDRcnhEToWO46SI9Rc=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=LBSylE1fuVitqtQ0sN7hqQ8UdzhGP2Hoc654FpI8ZwWq59EagJVd55BoTdnCaOFdLcPWjmbrC5d9znro7DLhBnKh1gGYqYpdzkxSc7fasE06su5x+cRmH8mEgD72BZQJFaT/we7WyprVkigFt2LHiGWuS91yxg6BQfae3/vbGYg= 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=PU2IZSag; arc=fail smtp.client-ip=40.93.198.10 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="PU2IZSag" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=rz4B0nSj/5YMJw7L9tclN4ESpz1gQ4I4dGYIL2xFCcJORbh20ljpXCz0Zw6qeZXxh9fPRiBlJPZvhTN041YLLEMERhLYbiMgjKovnrnY013YAa0rPejT8Zhy7BTJ8XpWQhSv3OOEk2hM32ldtECxZZXh6EwdAmbb3364+jBZL+b3J5TbzGk5vmpT9tN+HEhwLDlELJ2S9QuKm1ufC61BY9hCkU/mLFoYzXOrqhzSon/z5l8niVRSnGnnf0CwLdUEJrPooArz+9bNanQK64NxvMeW13PWHtkZG4we8AGy/bQ8wfynGE1F/tG+SLBvXJi/ZDdsb7pwBl+AhRLlG1fD3g== 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=9lW35W/d5BSz4A2CpgYnpAjJl8wpJErEWmlUtoDeUQM=; b=WTVRtgKuZ72y7eMKO2npowZzRDLwuRmFak1ETs1wNiKwBOQG6rJ/+mB7mV2Jtag2e3oa86IjRVgRU9ObByU2/h0IDwWPy7GhSXAo4P06iHHJTRpstkIfk8PDTmfbo7itD82NjzZS3CiHMfIVR9/iHJMHxHr42Ops5fI+SKldrbTH0TFT6I7YNj66WgGAZexzrCcNSHnjJq5Vz8OVcO/yBhWdFOfk+KFuJ8RWO9VhE+TL6CQpLEW48bR1wItdvmDRCIwwGmNilpazI3iCtXo9EOUP37+aMJuio+QdODBjEDT3vl1kux3l15+Z2Lug+7H7rG0RyEddr1e7ygWiYBLmMg== 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=9lW35W/d5BSz4A2CpgYnpAjJl8wpJErEWmlUtoDeUQM=; b=PU2IZSagvJ0r25JH3hMyCVt37p8jQUnOX+T41SIFmGNvjirLlzAuNKKCfu3+Andj0ndZkRxmt7k6N5agiWWr1hRztqSF90nRhfK99YQO/cZ8gfEAmBVNPmBCy5asDpWoY9V2qgmzoYCaHw/mzvkIF8WDyNEakRALPDgeRRKmEZa9N+RuIJLlCh2zcDT7BUwtmLEWvOEBL4h7PiEygmiKjtmxIHrw6o9TkkkI8ktynKTNnz5d894NlKira6sXKGw1iuezNygN8hHmXne3RpZlog7aq5rmW/hViPmZzxoaf55IbBirkTEkVUg3GMRAmRV8iCb/iGAbsRl56HYSN2hAMg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by DS0PR12MB999081.namprd12.prod.outlook.com (2603:10b6:8:2ff::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.10; Thu, 27 Aug 2026 07:30:28 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Thu, 27 Aug 2026 07:30:28 +0000 From: Eliot Courtney Date: Thu, 27 Aug 2026 16:28:31 +0900 Subject: [PATCH v8 03/12] rust: num: add cv! macro to create values from constant expressions Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260827-chid-v8-3-bc74c77d0214@nvidia.com> References: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> In-Reply-To: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> To: Alice Ryhl , Burak Emir , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , Alexandre Courbot , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: Greg Kroah-Hartman , John Hubbard , Alistair Popple , Timur Tabi , Zhi Wang , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY4P301CA0073.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:36f::7) To DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) 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: DS0PR12MB6413:EE_|DS0PR12MB999081:EE_ X-MS-Office365-Filtering-Correlation-Id: bd1f7172-b0ef-450b-183b-08df040d1142 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|23010399003|7416014|366016|1800799024|376014|56012099006|6133799003|10067099003|18002099003|22082099003|11063799006|5023799004|921020; X-Microsoft-Antispam-Message-Info: v/HaHWIFL7MgRY39cuIFgvPQd55hQtq970XK0yRpQzIbyWE9A/lVRquMwsoC40vNLbsGWmV45Mj7PL9BWYRiZlbZ2bwwKvMJdK3kxDqB+mRVtu0fh5RLm0zMnGDop43AmVCAc+R9hapL7R72MBGiSXWWQaz0NWZd6dh3vZfTabCx4uEMjZDeInvOfv7eG+eB3DZLu1D435Ngnd99embiNMUPM8v8BLFCezeLoiUMqT4ohhmW3XFlyX5XOPw6UhcMx4AEWz0L1sy4eC9pMc+1Tf0HIq1ZqZ4dWPtVBlJ7sjLeZumd8ohgM81lPdcdvIx1GizOuIJrs3yXZEUgB+cXMZVO3S9yYYk58EO/OpwcyY05BZ4Yna2X2OkTwqo3bud8R7NGCXsHblFz9HFnaYR2xwocIymKpbsn9+30HrYAIcAT2//Q4SJ3g9BbysB1nNEjpkqcyc9dBV2YHoztDl39F/ezsOiZAiFInFmkpSb1DNWTi8wI4JgsOd0OAsqXuBtP7jLfYeBQLcSUPeLVO4VN5UT3xHnrfmYluQCrXoi+Wz38EyYhs8lDkc8XFfdQh9xdO5RdmEN3E4qDdQUDPhblsNBYygH3XsG+1HTsbKaOl3HUTjQzUHPbT1ZmZmv0SWmVtALeVvRVUDC/GupWXQU524in7hIY98q1WRFhFaYpEkjJ6MXxtF+tYrwIFJSNx4VZU7qzlBZTNUdb+2J+RcFSdQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(23010399003)(7416014)(366016)(1800799024)(376014)(56012099006)(6133799003)(10067099003)(18002099003)(22082099003)(11063799006)(5023799004)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SWZzV2wwNWNiSWs0Yy8xK0xwSVVoaEY5S0ZZbTlvRmhlQk00WEtiaHBkMmpX?= =?utf-8?B?V1p4M2d5bTZZUmh6N3hscDFhRjhrelpOU1JGYzJlOEJ3bmF3N1V1dVhHT1ZD?= =?utf-8?B?N1RyQVdqM0dMa1FpU1NhWHFLS3FINjlaOHlHbjVKKzVEdzhVaFRRYjZVSFRC?= =?utf-8?B?TDNsYWdpQy9KSUhjY3NMSlR4bzFrejY0L29hRUI0M3dSWU9FY1ZQcXl1TzhF?= =?utf-8?B?Uy9JOHhVUlQ5NDJ3U2E3VGphMzVIbk5qNVBmS1N2c0tuc1ZnTEpJTWpSb0Vs?= =?utf-8?B?UDRvZmY0NmxYRWRVcWRyRDQrTFNNUEpvNjVYWmh0MElmN0IwdW5aOXAzR3RW?= =?utf-8?B?SG5tRkhOWWNUT1hSaEIvUmcrM0tHSXNwMFNkOTJtWkcrOFVCcTg3OHVLbzY4?= =?utf-8?B?elg2ekVMcnVBREIrODFscUc3K0w2RUs1RnlRZ1VySE8zckc2MkVhT1dSMUVB?= =?utf-8?B?Q0t0NGpsTWFHMTZ4OUtablg1RmF2UUxBeUZXNmJqTWFpSXhOL1M3MzRuWXp1?= =?utf-8?B?bHdMcFIxMjZmOGtRMVNTeEhwNzdsUk1sS1dUTDBlT0duOUNDZ0hwMytMeXdD?= =?utf-8?B?cDNaNGxlaGYrMi9naGhZSnJmUm1McTd3Sk5MZW9FcmE3S0Yvc2VjOG5vT01D?= =?utf-8?B?Z3lBTlhpd1hTN25YNEc4b1FuNVVabDNpdU9WUlRSTU5vQkJUNEJMOHpjdnoy?= =?utf-8?B?aVhDN0dJS3NWWXNpQnNqeE55V0dlQzFoYjFKZTQ1ejdPS3JSNUtQaHFtSTFk?= =?utf-8?B?R2svbHcwamdlRWtsZVI2L0xhQy9vQ1pkcTNXWml6ZUlRenN6dkQrSzg3SDlR?= =?utf-8?B?elNydkhHcFRlak1NK00rbzg0UU1UanJCZzF6UXJRYVNhNTdzNmFmcDlkNkJ1?= =?utf-8?B?MFU2QVVzdjdZQm95clVTUllSYjRGeExzbWpUemlXdUI5ZWxPQU8wcDliOW9W?= =?utf-8?B?WG1uMEovOFV3Sno2MHpQTzhPQlRkM21nY0hQM1h4bHpiMStkTW8rOGt6cU12?= =?utf-8?B?UkFrc0tFYnQxQnBHdkZUZUN5Vi8weXJKVUtNSWpBT0VzVFVjdmJCOUlzbjE1?= =?utf-8?B?dHRncVFQZ3JRaTM1VER3Y3E2Sit4NXFubEdjd21VS3JkT0Nlcjhldm5PL3Jk?= =?utf-8?B?V0NzaXFubnRsREhNWmVOdzFieHJsaytiOVdDWTBxWldJZ2hQcmxncXRhaFBv?= =?utf-8?B?amFrTzdKSTdOUW5XbzBvSkpORkFqMlpYSzVJUFlxeFRGcVN1dlNDZThCd0Zp?= =?utf-8?B?b3gwRWwwNkFSQlVldlJUZ2VKUlN0VUZUbm5yMkZ5ekdFZXV3ZG1ieDRCRVQ4?= =?utf-8?B?YTM1RVBWWXRWVnlsZGRYckFjSjZ0anVCY2tsOURsNENIZ0lrdXY1Q2NuS0JX?= =?utf-8?B?WkdoVC94RjJYOWFqS2E4TVpwTnpNaXVqVzJrZWVpMEJXQWVFcVpuZmZKTmZO?= =?utf-8?B?RmU0aCtTcEZQUkJOU21tVWtNZjJ1SXA1SWoxZk1XbHF4TW9wWWZtWHZhRFJ4?= =?utf-8?B?Z3YzTXBYY1F3eWg5VEptU0RkcENUb000YzFRdFB4K1hubVEyUDFCS2VTMVdY?= =?utf-8?B?S29YMVlHd2Zzd3ROK1JaYTdieTNJeEd5d3Q3QmVvNXJGM0djTS9oL2tTUlNK?= =?utf-8?B?YUhtNmM1a2gyaGxkcjQrQ0IxZmQ2SDZTN3lqTFhHVkh6UmlkdWhPQUUzK1Q3?= =?utf-8?B?Y1YzN2RQQVlRd0RvNzhrem1oY2U4d25BWWh3VGVyeE11Ryt0RkF4SGtBWHk4?= =?utf-8?B?dmxQTE9peFNKSC8yWTRHWDRsVXdpVDFjUTNOSzY0aURYREJtbWtOTXpmY2x5?= =?utf-8?B?TGZuTWFxdzhpMGxwd2NJL2poUmVFRDRZTmZETkprdGgwSVpKcHZBYTZRd3Zr?= =?utf-8?B?Z2JWSW04eFdLSFIwTFNNekkvYW9pS0UxK2dWcTBZT3VtV01JK1lLZ1lLUWt3?= =?utf-8?B?Uk00bjJHSEl6aTkwRDRPVG0yaVZMcS93K0hpZVlEemk4R3hySVp4NXk1cW96?= =?utf-8?B?VTg2RGtBZ2ttWWh4WEtMMnhMQzF5Q1ZYSTFBbEdmRWVwWVRTQ0VycldzRFR1?= =?utf-8?B?WEViOURtYUM0N1ZWYVdFTXdpa0hzRkRQbE43T1NNZEI4dDYzbXdrcTFabkV5?= =?utf-8?B?TW9VbWMyM0VxZDlzcU9kWFRmTTlodFFuUXpLRkYyQ3ZmQ2p5NHJHT1BkUTZG?= =?utf-8?B?OXBITVlZazBSaW9pU0tUb09WcCsxRjMzS3l2VjZRNFl5OHl1OTVrVW1nUnBz?= =?utf-8?B?QjdTdHdzckp2YVdDNnpvbWY1Y2FZWE5kYjNBeGJjcHVOT2U3THlOSUVkUU9R?= =?utf-8?B?S3RCMFFsLzRFVlczS2JpTEV1WHNGM0JkSjkrb2N2U2FXVUpHaFdJZFVvUUd4?= =?utf-8?Q?Llc9+6OSN1HsLsDcgrg8sazEbQ38/ds5P5+kTlWrSiPMe?= X-MS-Exchange-AntiSpam-MessageData-1: 3cR4sGXfn9tlmg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: bd1f7172-b0ef-450b-183b-08df040d1142 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6413.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2026 07:30:28.1589 (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: ER5KXScIATF9KstRxy8DkHNIbamxbW/9qdvc+q4M8Anh1uCjOqiB4+53yO6XM3FZo7+l/eRGWTfMjoOUqa71/A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB999081 Currently, using NonZero/Bounded constants is quite verbose. It's unfortunate because it disincentivizes using it in interface boundaries. Introduce a macro to make it nicer to use. The macro `cv!` (for constant value) takes a const integer expression and widens it to i128 (at build time only) before passing it as a const generic value to a new trait function `FromConst::from_const`. The trait is implemented by NonZero, Bounded, and Alignment and lets values of each be constructed from constants without a verbose turbofish syntax. For example, `const { NonZero::new(1).unwrap() }` can be written as `cv!(1)`. Suggested-by: Gary Guo Signed-off-by: Eliot Courtney --- rust/kernel/num.rs | 89 ++++++++++++++++++++++++++++++++++++++++++= ++++ rust/kernel/num/bounded.rs | 21 ++++++++++- rust/kernel/ptr.rs | 13 +++++++ 3 files changed, 122 insertions(+), 1 deletion(-) diff --git a/rust/kernel/num.rs b/rust/kernel/num.rs index 8532b511384c..29bf903a4a74 100644 --- a/rust/kernel/num.rs +++ b/rust/kernel/num.rs @@ -2,11 +2,100 @@ =20 //! Additional numerical features for the kernel. =20 +use crate::const_assert; use core::ops; =20 pub mod bounded; pub use bounded::*; =20 +/// Creates a value from an integer constant expression, with validity che= cked at build time. +/// +/// This works for any type that implements [`FromConst`], with the target= type inferred from +/// the context. +/// +/// # Examples +/// +/// ``` +/// use core::num::NonZero; +/// use kernel::num::Bounded; +/// use kernel::num::cv; +/// use kernel::ptr::Alignment; +/// +/// let v: NonZero =3D cv!(8); +/// assert_eq!(v.get(), 8); +/// +/// // Any integer constant expression works, not only literals. +/// let m: NonZero =3D cv!(usize::MAX); +/// assert_eq!(m.get(), usize::MAX); +/// +/// let b: Bounded =3D cv!(15); +/// assert_eq!(b.get(), 15); +/// +/// let a: Alignment =3D cv!(4096); +/// assert_eq!(a.as_usize(), 4096); +/// ``` +#[macro_export] +#[doc(hidden)] +macro_rules! cv { + ($v:expr) =3D> { + $crate::num::FromConst::from_const::< + { + #[allow(unused_comparisons, unused_assignments, clippy::as= _underscore)] + { + let v =3D $v; + let r =3D v as i128; + // Pin `back` to `v`'s type so `as _` casts back to th= e source type. + let mut back =3D v; + back =3D r as _; + + ::core::assert!( + back =3D=3D v && (v < 0) =3D=3D (r < 0), + "value cannot be losslessly widened to `i128`" + ); + + r + } + }, + >() + }; +} +#[doc(inline)] +pub use cv; + +/// Types that can be created from an integer constant expression validate= d at build time. +// TODO: make this a `const` trait once they are stable. This will let cv!= be used in const +// contexts. +pub trait FromConst: Sized { + /// Creates the value that corresponds to the constant `V`. + /// + /// Fails the build if `V` is not a valid value for `Self`. + fn from_const() -> Self; +} + +/// Implements [`FromConst`] for [`NonZero`](core::num::NonZero). +macro_rules! impl_from_const_nonzero { + ($($type:ty)*) =3D> { + $( + impl FromConst for core::num::NonZero<$type> { + #[inline] + fn from_const() -> Self { + const_assert!( + V >=3D <$type>::MIN as i128 && V <=3D <$type>::MAX as = i128, + "Constant cannot be represented by the underlying type= ." + ); + + const { core::num::NonZero::new(V as $type).unwrap() } + } + } + )* + }; +} + +impl_from_const_nonzero!( + u8 u16 u32 u64 usize + i8 i16 i32 i64 isize +); + /// Designates unsigned primitive types. pub enum Unsigned {} =20 diff --git a/rust/kernel/num/bounded.rs b/rust/kernel/num/bounded.rs index dafe77782d79..b04bba3fa0cc 100644 --- a/rust/kernel/num/bounded.rs +++ b/rust/kernel/num/bounded.rs @@ -13,7 +13,10 @@ }; =20 use kernel::{ - num::Integer, + num::{ + FromConst, + Integer, // + }, prelude::*, // }; =20 @@ -262,6 +265,22 @@ pub const fn new() -> Self { unsafe { Self::__new(VALUE) } } } + + impl FromConst for Bounded<$type, N> { + #[inline] + fn from_const() -> Self { + const_assert!( + V >=3D <$type>::MIN as i128 && V <=3D <$type>::MAX as = i128, + "Constant cannot be represented by the underlying type= ." + ); + // Statically assert that `V` fits within the set number o= f bits. + const_assert!(fits_within!(V as $type, $type, N)); + + // SAFETY: the asserts above confirmed that `V` can be rep= resented within `N` + // bits. + unsafe { Self::__new(V as $type) } + } + } )* }; } diff --git a/rust/kernel/ptr.rs b/rust/kernel/ptr.rs index 82acb531b17b..3dcf415bcec3 100644 --- a/rust/kernel/ptr.rs +++ b/rust/kernel/ptr.rs @@ -166,6 +166,19 @@ pub const fn mask(self) -> usize { } } =20 +impl crate::num::FromConst for Alignment { + #[inline] + fn from_const() -> Self { + const_assert!( + V > 0 && V <=3D usize::MAX as i128, + "Constant cannot be represented as an Alignment." + ); + + // The unwrap fails the build if `V` is not a power of two. + const { Alignment::new_checked(V as usize).unwrap() } + } +} + /// Trait for items that can be aligned against an [`Alignment`]. pub trait Alignable: Sized { /// Aligns `self` down to `alignment`. --=20 2.55.0 From nobody Mon Sep 28 03:41:50 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010001.outbound.protection.outlook.com [40.93.198.1]) (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 6AD7A36606A; Thu, 27 Aug 2026 07:30:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.1 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815837; cv=fail; b=jxeXG4mlskK2Mm/rxX/37s5q0dVQYEnKFyxAnL7/rvcCbEkYDyjNKCdjxkRJ9lX2mNiZk1kKxW2PHI1WJ8zXoBnxgJoUnUCGQEghE6BKT1oPNBeP9ftGf43dh3qCRhqt2Obz0vegYSsFzJ7e9nxFF2W+5SlWSAn/MLaRGmZemJg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815837; c=relaxed/simple; bh=XSFkjETjaifNPvs8rE4mkkdi9y02Hh4GuiWLG+BGKZs=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=PoWko/y2l2YW9YDemdT28PBQFLquPLA4HfCOtc4tsD2eE6UEUHEYK2tyddGcUQlIthPtpHEKh2lSt9Zof5XJv0zCnNnN4Uow+OCLriIuhw+DuumAonBxudBOSPqaaYMKUjdgX1G5Kibx2j0BMrz6MRqCF62uidOciTtPL7gDNjo= 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=VMQrG646; arc=fail smtp.client-ip=40.93.198.1 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="VMQrG646" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=T4PSMRflsZNM1QMPe6KUnTWGDQFt4Q+BL9uh/0o76hBxhPMMVrUskuU/Dnd0cE6aghHq5T9B1rJbPX6/rte7fk/VCKGnamOSd18yE2Z4d2Hk3ACWDf/Uq8c2/kTDKhKC4EsQsFb/NL/4SCYnShdzqpwH5hHwDgpV3v8V0/td2t22nSfnd0dktVOt/Xsc9Fo6/Usaso3GbXa+hstgRl0TCjerqOMuNgLFn6wfUF2oKxdhtqJCqniA2X4VBI7jbEESp8ACrXrMmijgCcDMdl8OynUH31E5k0XYd8Q52bTCwgZuC3RxVo9o5bCvlLBGr4WkQUW7Y8dEoV6tgyAi4hqwBQ== 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=Kh1f+snMvFaEBAp4swQKZ+qqtQaeYWCJX2DekKP/CaA=; b=pwusYSVl7PCSWaH/Pa5PLh0emgklC/QxNylCD9CY2C2xmW0h9kcMNmB35I6u1CMx/9phubNM6znyDRuPEVgKdU1rumOrgmeEioJJP5ejpCa71vZKm/sAD41x5yMoTEOsItfHuy/ScgvfHpZmi3tAIQHYrk/p213svKs32WtM8VDn8B1fiqTKOjXC/Ed5yzMPO2igRQRXjxiR5GQup9WngLMLz4xbt0pe0eF/mYuQHUw5N8GNOx9ZWmIdEsEuclXNnru+8zAyJ11vbcjTP/vhNvlv4AHx7EDi1rklp0dA9HKJdnQRaZ2iuzlUysw46A1ImFnxZjl8HiYQ/1vuNSBVYQ== 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=Kh1f+snMvFaEBAp4swQKZ+qqtQaeYWCJX2DekKP/CaA=; b=VMQrG646KlyeIZSLOLtv6AgUwVgq+6fPw4p+B1RshXCUSZ6C85+2KULIr8VKVLfd0q7O50jfyXBOM78Q6z6WkPx1oTPk5UCqk6pYhqouP44ttdobvrov7aJHAkFSpqdNxRp/j91xyGeSEN9swZcC+5UbRguzoeT9WeXdjjyHYYDvGPEEhKqe71ahc6omX5Przz5Pl+gSPmsM/PyhoiQAd2K9Q66Zz32EUwevlhXXJJF/sgV/8jNsy3pLh2qJyHBpD8iHK4eePXPr/VdC2U8p/a7DjRXWMSxxZDWRxLBYmIYoeV8Sis6hpPaAQmPlLeZD5NgUt0riWBwkUQWRE41ZyQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by DS0PR12MB999081.namprd12.prod.outlook.com (2603:10b6:8:2ff::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.10; Thu, 27 Aug 2026 07:30:32 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Thu, 27 Aug 2026 07:30:32 +0000 From: Eliot Courtney Date: Thu, 27 Aug 2026 16:28:32 +0900 Subject: [PATCH v8 04/12] rust: prelude: add `num::cv` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260827-chid-v8-4-bc74c77d0214@nvidia.com> References: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> In-Reply-To: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> To: Alice Ryhl , Burak Emir , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , Alexandre Courbot , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: Greg Kroah-Hartman , John Hubbard , Alistair Popple , Timur Tabi , Zhi Wang , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYWPR01CA0010.jpnprd01.prod.outlook.com (2603:1096:400:a9::15) To IA1PR12MB6411.namprd12.prod.outlook.com (2603:10b6:208:388::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: DS0PR12MB6413:EE_|DS0PR12MB999081:EE_ X-MS-Office365-Filtering-Correlation-Id: 8e9cf56f-e12c-4360-0363-08df040d1353 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|23010399003|7416014|366016|1800799024|376014|56012099006|10067099003|18002099003|22082099003|11063799006|921020; X-Microsoft-Antispam-Message-Info: TV81AAPvUZ+qzRbfjpNkU5DqS5DuRmvYorjgjKc2k+k3VFxyxq93VRvgtenQP0G0EgO+ExCWLfNWwHdNkpaWE+QWhX0YIfU4Rr0jmNa7n4QoDnd/D2vjn16yT9zXyGRwS36z6EvISPtLhVY4PoSo0cYDWoTP8ILiyIcvWuuLwe5KEEr4OyRNavD6Z56FAUYHM1wBwtpMvsF9rtzvN5TLlbOZh0FzVQ+8qkQOMobOrhBIcaz6ignFPjPkr3Q+WF1jCzxFqTIou9mruaOimqYsSNUdOG14ompjPAtSQyYBC6fBoViMJqn4qIRmv2/0taC25QbsCadKbNSv29AvrSqR4ptn/Azdrah4OGQyUO6YWwMgkI+s/g/UDd4TLX+4qISGJT9V3Ew3+6EXiFKFRhy9Dt5/M+Aj9x7QWB0rdJbwc4Ji2o+YphPGBTTOwmwKczhjqHQOxYABLUOljo+D3BQTqPJyYdJIwWFtOHAskbsnpRGs0QKSA+4PMtV+uoHBeG42KBp1EUHyPXY5/HUgRrVPggwMDqgwBA2y6/DnJJqzxW8S2dadEK4MmsOT1ma2f4z0O7xRYxwrqh89tcmDyZif5l37UGLMlDyh9HXf8wbe3rL6Q3beIxXcXDJsZikPjrSf+Ju+sF/OJjNVFUFebxm0KuggBKNrCAfGYgUDynC53U8sca+Owx09oF9Y+K9l7c2Vby2/2DdH0w08UODmGM2Pfg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(23010399003)(7416014)(366016)(1800799024)(376014)(56012099006)(10067099003)(18002099003)(22082099003)(11063799006)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dWV1TGtidi82dFdvWHpRTG1WdEhEY01WVlhGY0J6WWN3ZlpHeHpUNmVaUXVQ?= =?utf-8?B?SFI2YnlteXdHcVVubmpVNnl0Uld6b1JEVkZNZ011VDFMYnhrQ2phVlN1NStQ?= =?utf-8?B?ZnhoMnFvWngyMlZvYlFucm95Q0hwRW5NNGRMakxyVEZTc0VTUm51dzQwVTRl?= =?utf-8?B?ZWRoMTVRbEo4NXFKczEzNmhjUnc0eXl5NWl1V2tkN3lQWlJGUGYxZUtwQ05a?= =?utf-8?B?eXZaYjFwS0dHYWh0S1FXMk9ocDRtL3g3RnhnTDZFL2pHbkhJcktPUU9MQzFr?= =?utf-8?B?SzV1Z3FyeFFCcWIxWlhMQTlvUFBuRVBGZFRtS2dzaVhXQ0l3di9YbVhhU25K?= =?utf-8?B?YTlmVlhLNWtUV0VjTUZFVnJnV1N0SlFtUmo2QlFGVHpQRmhuU0JRWXdqRzZZ?= =?utf-8?B?cDd4M2phOTlZQ0IwdWJyalU5aFBaSE0xaS9iOGRHVjI1ZVhxQy9IdWlmYTRT?= =?utf-8?B?YVdJZ3hXbVlTLzVHTE9PcG9zRkpYR0xPNHFMNlZvZUo1STZlQjdFKzZzUWhV?= =?utf-8?B?RkM4bHNhdnRwUGUwTlZoeW1iQkdXOHdGLzJhV0oxajJZcUdSQndUYWl2L2xU?= =?utf-8?B?dDluMmJ3K29SeS9IUWYwVTNWMTdoTzJuKys5SjE4c3RkUnhOOGFFRnB0bXNJ?= =?utf-8?B?NWFmcmhzdGxXMmlGODBIbWgyYjN1NkhlZGpqRzRjVmZMMFg2VGNvMGlEQWFW?= =?utf-8?B?c3JOVk1tMGNFdVIzZGUwRFZadC9JTjlHU0F0YVZOclVJMHdibjFVbGxIOUdw?= =?utf-8?B?eUZuMGxHa1Zrand4ZWJzalhna0M5U0QrMDVIWStWVnROZXBNd0RiQWFBRlc2?= =?utf-8?B?bFdxb3owUElEMGhwdG1LM0V0dEdlT25pYjZaMkxMZ29tc3FiNXhubUl0TnE5?= =?utf-8?B?dXJTekVzdFB2QnhDeWp6U045ZHR0RE1nTGlDcWI4dUxWSkxrd0FUZjFsdS8x?= =?utf-8?B?ODZlRGkxRlpscnkvV3ZKRGh4b1c5NjQ4SXJEdDE1UERMMkNBK294YlYyZVVW?= =?utf-8?B?bDNQa3YwMy9TZ1RqWGRLVHpKRlp2Q204NDRaQUxvM0FJVnUyOCthTGM0R2lK?= =?utf-8?B?N2lyOFVIR1FOTExkR1g2OHZUYWxaTGlBd2J2c1h3RzB4VDNHc2daZkh3L0lR?= =?utf-8?B?K2JzL0tXaVR2MUJ1amxjN1cxZml2OGVSU1pMbjhxMHJYdHozbnZ4VS90SzFY?= =?utf-8?B?MVErYUF4a3R4YzliUXNsc1A2eTJlZEM2QnZXUGtWcm5FajgyY285L3lrVWNT?= =?utf-8?B?RzRoU1BjUW5UYkxRU1dlWUJSbzdJTUpQb1lrb2pjdmhKdk5wand5QnVYZVhI?= =?utf-8?B?Q3B0U3hUMG5SdHBjYVgxYVlHRk0xMXFYbXRqeXM2Mmw0N01SaWhRM3FBSm9Y?= =?utf-8?B?eTdMN3BzVGQ0RzYyZWNvL29ITnJ3dUJQKzRieUtoK0MwMHNYZWhqSlRXTFRY?= =?utf-8?B?M2dyVFZudHQ2T2tkVHBLdm4xU1p1M01SRlNqU0hNZ0VHUTlvYUJSWnNJSjBj?= =?utf-8?B?eEVTcmY2ZlAvN0V5WElWMVB4eUtkMXdmWFZqTStVdmdtUGxuTFRIS0FzenBF?= =?utf-8?B?UzZ3WHdzNnlBYjAxWTliTlJMZ09Cc09qMVJyakFWaUpyeG5xdENRY2RLUzdN?= =?utf-8?B?N1RiclA2SElEeHFRRVIrNmRUdGtneWdvcVVRTEZxYmFYYTBrV2p6YVpKemNC?= =?utf-8?B?RXFPZnJGOEJzektKZE85K0x2NnpqUngvOEJ6SE1WL0FyemEvakZxcCtSbHRB?= =?utf-8?B?R25BQ2VTSWV2QkdnT2JWYWhhSnR0T1VEQ243Rk5HVXVCb3FaTFh5M2V6M1h6?= =?utf-8?B?NVRtdzAwV0FTMWM5Q3lhNXdsVVlSN0ZQNVFFN3JOMGorYjFNQkFxdUN1K2VN?= =?utf-8?B?MTQva1VIM2F1MFg0VGFVdW10T0NzNnZIQ3E4akhCU3dnRWlwYlFCeDAra3N6?= =?utf-8?B?TDRhN1dPdk5oMUphKzN3QVZHd25SZTVVS0hCdElDKzhNL084bUp3UEdCRFJG?= =?utf-8?B?Y3hqdGVFMzQrVWZnTi8xL2lvS051RWF5UXVVWnEzQm9QUS83UHRQOTVRZzlG?= =?utf-8?B?Z0tXMWIwcjhlbGo2U1B1WXhqRE1YMXdHUDJCeExQN2xIMjJNNFZMVXBQOXlu?= =?utf-8?B?L2JjT3RSMEt6OFJMbFJqN0VBMlpVQ2Y5VnZwUDgxRzlsWEdKeWlTb0tOQ3hR?= =?utf-8?B?OVNldWFJZE1wRkd2L0pTUjJCcExWS2JWclBQWUhVY0doNXRxT0Mrd05MQU1D?= =?utf-8?B?d3J0Q0djSHo3Kzl2eHVNWlcrNFVxZThNS2kyQWRRN0l6TjBKeE92a3E5OHF5?= =?utf-8?B?eVRCdG4xTGR3YjJuZjBpYXA2VlVRVk05TDhkbXBEZURWZEFvQnZWWEduZUV6?= =?utf-8?Q?3JmCRBTzUikNfK2kJQSZxy6BRLFwH+/NR0Eef241cVDlA?= X-MS-Exchange-AntiSpam-MessageData-1: 3ixKWMSawn313g== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8e9cf56f-e12c-4360-0363-08df040d1353 X-MS-Exchange-CrossTenant-AuthSource: IA1PR12MB6411.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2026 07:30:32.5677 (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: yJZPXMgRc0oEOw2rU+dcUm4zJIC3eyIm1mw62+KCegK9j4UGrMY9+GBLyagpm17LCs9hkKqOMiJXkrTKQWVHEg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB999081 Add the `cv!` macro to the prelude so it doesn't need to be imported explicitly to use it. Signed-off-by: Eliot Courtney --- rust/kernel/num.rs | 1 - rust/kernel/prelude.rs | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/kernel/num.rs b/rust/kernel/num.rs index 29bf903a4a74..a20b8937d4b5 100644 --- a/rust/kernel/num.rs +++ b/rust/kernel/num.rs @@ -18,7 +18,6 @@ /// ``` /// use core::num::NonZero; /// use kernel::num::Bounded; -/// use kernel::num::cv; /// use kernel::ptr::Alignment; /// /// let v: NonZero =3D cv!(8); diff --git a/rust/kernel/prelude.rs b/rust/kernel/prelude.rs index ca396f1f78a6..5facf8f7af90 100644 --- a/rust/kernel/prelude.rs +++ b/rust/kernel/prelude.rs @@ -106,6 +106,7 @@ Result, // }, init::InPlaceInit, + num::cv, pr_alert, pr_crit, pr_debug, --=20 2.55.0 From nobody Mon Sep 28 03:41:50 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012053.outbound.protection.outlook.com [40.107.209.53]) (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 406FF369D64; Thu, 27 Aug 2026 07:30:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.53 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815842; cv=fail; b=MjD9pVzY6NF8jxh5WWz4ZV67omD4cHsrTYjBxCx0vNQuprlHcOZ9NytOpdcBt7Fz8cxaAf4CayAYCJNpAQjeKLNX2NlCx/c8jpfiM/tSTKyREF0wbrain3zQfhV2giVZuQOIZ+Woz0KOJHXje1T+/88RfTJh2LE/AVB7PgMmaCA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815842; c=relaxed/simple; bh=a/xEsYvUirTteK2oPVtXSnp7oCI4OKSFS8V4oDJJmIQ=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=HruHA4vD73ibL10XCBxhr8kTGwG6Xwm1ys6USOqN1n0q35ygPIqT3CSNdqIdRH8FVRMcN8CSKJhlglXbJxJBeqpb3EcHPDw7VqEEejDEedN0ifbdrUb8Y0lCI1D6XfdTgXQMKxa5ok6g3LZMMG6GbpFhHqJIbKhELyscwQusjsQ= 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=DnDqlGHh; arc=fail smtp.client-ip=40.107.209.53 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="DnDqlGHh" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=njSZWQtXWi4V6NV5uk1MNIgzCXSn7t3jrrW/rqADGpYO6L6uy4wTtea6+imXmCIABS9lK2Yl60fyP0JI7/4q27+J3I/rSx4q+G0QrRqhimrwMWoSxsg1ISGJpULgW5UO/jQlv9muSd5iMF72eutbEFUP0FM3H2S0PKX0LHLsBYUJ0mfcQ9aU2v5PkXkLVFRUF4kQKvHZkiE5S6JU/D3aa/Cu3dtkcKxTyL4nPy/84RNEvEKNRgchXxW3INMPg8xUNBzmCfojFmiPTgmAqjEoTOWMV2XrKxS1GcCbbaFjY4HeJtEf1I5+Cbm6ZTiyP3Jq2MICJq0pfR8AQFOHnRJuew== 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=Vv+SQPi3gHtp8gmvjW3PQLcX00eggQ7Eu4WRxiTh7RA=; b=KuwpW4fjvl4CJCW+5PG5ztceS0h3BeQpph5O8uiwcgGm3Tqfko501GQw21Fsi5D4X/Wr665zA4dmaTE61ledm5hDsNSQXp1QvC2pIN6QBOQiohvCJ/5fcxplElZwsiUhMJIupN6n/wEfqRrikMUtKDPpDS2x/DUzg2Y1Pvbj1cA1fJC82LFQP5HiFB7Fo545VCmj+H+EbOQu7RRqE6VZpN2r/rtFb03afPrVkEhiS1+Yp2GDjn++J59TWnfV1y5u5K2+Y2TTJWWxa2+oxoazJ9iYzUl+gAWZe6ouok4sPAR6Hb0F7LNjokasYESSG5vOdyjn59VZrHJUTvt/x9q6Cw== 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=Vv+SQPi3gHtp8gmvjW3PQLcX00eggQ7Eu4WRxiTh7RA=; b=DnDqlGHhj+nt2IhtpShNBqTc0245Bg2/E323hS2qs+Bau5wglczaZONj+yQXidJ5nKFO+OhcTBgYNluTfPyaX/LanszVAkofEaoJb3a2+g1aa/9a3q8KQ2nJeoogbG8taazJvP+6D10MBh9O6uWJz5TXY5/P/pkvQ0R8Dbyh5VP8QC7nZFlU5j3utQnqb+zR+tdEfqKW9G38jVXPgxa745D09yuDvRL8MWQ/372l0eSwReI/bra3ecUuHwXZjJWLdaAnuZ89HJKKjkQSP/DNbI5D/MiP69vwMxDnSsXXMnG3xVzXKzkwPF/ChetHd3HfjB0yvVUiROESZaeZPRYgrA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by DS0PR12MB999081.namprd12.prod.outlook.com (2603:10b6:8:2ff::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.10; Thu, 27 Aug 2026 07:30:37 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Thu, 27 Aug 2026 07:30:37 +0000 From: Eliot Courtney Date: Thu, 27 Aug 2026 16:28:33 +0900 Subject: [PATCH v8 05/12] rust: use cv! to build Bounded values from constants Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260827-chid-v8-5-bc74c77d0214@nvidia.com> References: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> In-Reply-To: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> To: Alice Ryhl , Burak Emir , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , Alexandre Courbot , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: Greg Kroah-Hartman , John Hubbard , Alistair Popple , Timur Tabi , Zhi Wang , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYWPR01CA0002.jpnprd01.prod.outlook.com (2603:1096:400:a9::7) To IA1PR12MB6411.namprd12.prod.outlook.com (2603:10b6:208:388::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: DS0PR12MB6413:EE_|DS0PR12MB999081:EE_ X-MS-Office365-Filtering-Correlation-Id: 8e433d0d-1c24-4cc0-67d0-08df040d166a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|23010399003|7416014|366016|1800799024|376014|56012099006|10067099003|18002099003|22082099003|11063799006|921020; X-Microsoft-Antispam-Message-Info: MdPBKgBNyFqfZLmrm8aA6Zm6jYnzNVTvolHrn9Wckd60t+FQ0AoUX0Hovc2R2NcgPzFpk7lIn9w0ghI/650K6hjemQkYMDNawyv9KJLlZRcJdaCTaAPRNxdPGMooPmkvTpvlZDIbL1G/owH2DurQ3flRFEqn3UuXVmvBZtWzdOShbZcpq2wPvTIhH7se2G62kUKLiJnfgRaeiEvT69Un9gQc97quz6MWDjMYB40Gm89N2fiKrpDsyKvT8Z4a57vFLU3gW6Epcof1tNxv+tco3WguoQDFdIjCUg7jizsOwMWDCYk/Y3H4gD0PTiAjEJt21L0s0vyDOz8kmZ3iwboyxUPRWzSsIn8T+63AYVmTJnrsG4BGOYy/ylJ3Rk96F1cCckWtW6apwFK6+Ga4RV8J91e6gaXQgbVKUDHl3cd5Ji071f8/mmp2nYl7Mxdn6PZ33o1YGq3w9mxrLu2l29REUyBSgk32GtnUeDhczdr1L0eOifS+nva2LEj11w/NYs5Et4oQ2OfKh+CBIKNIEM50oGJnlAUjCmYJsMp6Bw5VIDBkg4XLjGsAgZlPrIj9/ng8Ekl6BU90QYrYLKaoGZGoDpP7STrYetaErOLQSpsmoCuSV7OuXeO+ZWQPI+sJF2sJeqjTV/vzru/F4vRuydFmOxtM0iIS8z4ungFmHLUhRykvwjpqi6esaU0KPtWhyZJDxr4ga2qVRTmlIIFtgL2Khg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(23010399003)(7416014)(366016)(1800799024)(376014)(56012099006)(10067099003)(18002099003)(22082099003)(11063799006)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RXRjSnZ6Qzd6b3I0QURvc2hlWEg3QjFmSTlRU3Uyd29QRlFER2gxcEFMWXpE?= =?utf-8?B?citabnMydVlwZTZJbDdxUFZKWGUyTlArYVBoM0F3WEh5U0JXZVY5K3AxTWNW?= =?utf-8?B?VmZLckovcmt6YjI5c0lJY1h6Uzd0cUdZdkpzNmxLaGVWdXBrZGx0alFUM1ZO?= =?utf-8?B?OVZFejBybmhnRFdSMFVLRFpCQTVwdUZHNkJpby9DTlFuREw3NElZMm1MUlUr?= =?utf-8?B?SU9FZFRMUUF2NkEvZW5RTnl0OEpPRk9PVDNMUlo0V09YWU1ZejI0VlpGVUlZ?= =?utf-8?B?eGRtL0JaNnNCQ284RUNsTzg0RnJiWE1MMXdDVHFhdXN6MGFSRmVDYUhuUWRp?= =?utf-8?B?MXlqZStzQ0pqWlJwL3krbXN6dE9ZcUVOU0dVOC8vOFBuMlVOTmpQQVAyeUs3?= =?utf-8?B?b3FIU3VvenRvdHRUb0lCa2tZWU03SVhBdThCbS92SkR1RVNTWWtlVjc3eGI4?= =?utf-8?B?VFhaRk9SSTM4R3Awamkwek8wdFlESUVlMmFOVktGelFMU3YvU2lFTDRrQUcr?= =?utf-8?B?MERzSjNWYU1NaG8yZVVRV2I1SGExMndrRjFrNmlyeWl0Y1ptSFFkTjVsSVlu?= =?utf-8?B?UG0rd2JDbWZjdXQ4L1BtQnVSZGRYd2VWNW4waUdTTUxLblgydEpXTVpxMURs?= =?utf-8?B?M2dMUmF3YVFibzJ3VlZDT3A5QkUza1dJaGloOGUxd2sxMW1HdUE5S2g5YjBz?= =?utf-8?B?M3NndE84elVLZEcvMm1OVGpiektXS09IL2hBdHp0TGVwZmFtSUwyaE14UEdI?= =?utf-8?B?bUdYc2VYQWIydGlxSUJPL0NxdUpQNU5zeFBtRXlRUjMwVHhqZ3ZlUDFvRzk2?= =?utf-8?B?Q2NaOU9lQlJqNmNpeWRPTUxWbldnNUlTd2pSVXBYcnBIdUNveTVXc0V4bnVp?= =?utf-8?B?Y3NWd0lCQ1MwcGhTODZjSkRhR0FuTUtOU2NoOEZ6R1JYYm1YTXVsYldVVTZv?= =?utf-8?B?UHRpS3BuWWlhNXg1Q2szdE42eG80TlNpQUFCNUl5aFBjcVhnL2tlSGVRTUlh?= =?utf-8?B?YkhmMHhoMmdTRzhJYTlvQ3NTbjVUa2ROSFo0aXhCZytYdDhMRFZyWmhTYzBR?= =?utf-8?B?c1ZmT2NQRXJINW9haEFWOVJCYU93My9YLzVkQ2h1NW56YVQwOWhDNE05dHNt?= =?utf-8?B?cXEzdUJtYWx2TWlMVm90c0hkTVhIejBROHE5aDNtWDBGWHlaUy9wOGN1Y01L?= =?utf-8?B?T215cStoMkt5VGdkTURyamFub1FpZXZMbDE2RmRXS1Z1ZGg0WkhmblJQZjAr?= =?utf-8?B?RjF1SjgrMHNta01JcDlqeU9KMW9oem8yaE1CNFhzRVdtaStLdndTdmFMSTd2?= =?utf-8?B?QzVXOUptZWdjT0FVdE94cnRIOTNwZnovR1BybnZhaFI2NS91Ym96QnpQeWNU?= =?utf-8?B?Y3psR2FBQ3F0MGFmVmpMNi9CblJTU09YTVRUZmFPdG5IK25ZRnRkdTFkRGp6?= =?utf-8?B?Y0VPdVdIZmlmTTNqMkJmcVh4TTFmSE9uNmlsMUxZSEhHMHVUWitFR2NscERG?= =?utf-8?B?cmRSM05XbkYwQ0dkS0huMmdNckpVWDNtd2V1L09qcEsvZUxxOEduNDlKQ2tI?= =?utf-8?B?TGJqbEVtVTduYlU5U1BmVGVUTnJWSDV0MVg1QWFQK0IyUGc4eDZLQzRQWStL?= =?utf-8?B?amJ6NkdGUUJJQXRhSHpuMkxVZzVaRXhhSVlXNERRYlhtT1B6b1Fkdk1vMnlX?= =?utf-8?B?Q2Q0R20wMDFFU3RPam1oYitJcTZxeFZyUVZmYmFhZy8rZzBiMGF2T3VXTkZC?= =?utf-8?B?OW5Gb3A5RWx4Wm1GakYzRzd6UHZkcENtd2hPQm01T2x3S0lOMVI1NzJCb3po?= =?utf-8?B?VVp5aXA5SGE0dXMzRnNlRWwvWnVrbkpVS1ZQZ2VHS2FHT2FOM0w3dGp4QlZ2?= =?utf-8?B?N3c2cndYdmc4ZzlQL3pEeTZQcnRPTit0bXI3MTRKclhOOWQyYUVRaDFYOWVW?= =?utf-8?B?VkF6cU53M2Z2aDRLWnlKUVBvU1pxbm5TM2tOMzFPYlRjU2pPQkNteG94dWhL?= =?utf-8?B?L3U1NDVkT1BaWGhNb2Z4T1BycUJpUUN6d0orNVFpRElxeXlNdDhnbEsvN1hy?= =?utf-8?B?a00yNE5CTXBNSGlTTlR5aUMrMEZyZUg2dzRMUXNCcittQ1JhdmdFZEpLZ2Z0?= =?utf-8?B?NmIvRExpVmhna2VQdzNOWUdlcE01ZzR5WktBTUhNNGVSd29QVWxzbEFWN0ph?= =?utf-8?B?SDY0Q2RYS0o5d3ZJN0VSTDFYMzMwdWt2cERkcld6aEJPWUY2a2V6Vitab2ZU?= =?utf-8?B?TzNLY29QclBrb25IVzl5N2lscnZGdFl4Qm1ISlMyTHdhYWtieVdja2p6UWNh?= =?utf-8?B?blhTUXJaMFh3enkyZHJuelFDdU1kaDVXdklkZ2F0aDlJVTMyRS9NTlRRdTc0?= =?utf-8?Q?LMtbrm75M09XcXXsvdkVF405ALFESQ0XCPN36IJ9PSRO1?= X-MS-Exchange-AntiSpam-MessageData-1: NHaHh8GLqFIvLw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8e433d0d-1c24-4cc0-67d0-08df040d166a X-MS-Exchange-CrossTenant-AuthSource: IA1PR12MB6411.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2026 07:30:37.0637 (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: t//yDdEcbRdXb1Ggi7sLNsTnvmE3UqyzMbMBobU1BWS/p3wtu5v0YxVK83ZQ1kgXnF+ZHLGKz20cnnahb/rEuA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB999081 There are some locations which use Bounded::new() which can use the new cv! macro, so convert them. Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/num.rs | 3 +-- rust/kernel/bitfield.rs | 8 ++++---- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/nova-core/num.rs b/drivers/gpu/nova-core/num.rs index 6eb174d136ab..03a7e7b3ff8e 100644 --- a/drivers/gpu/nova-core/num.rs +++ b/drivers/gpu/nova-core/num.rs @@ -240,8 +240,7 @@ macro_rules! bounded_enum { impl core::convert::From<$enum_type> for kernel::num::Bounded<$wid= th, $length> { fn from(value: $enum_type) -> Self { match value { - $($enum_type::$variant =3D> - kernel::num::Bounded::<$width, _>::new::<{ $value = }>()),* + $($enum_type::$variant =3D> kernel::num::cv!($value)),* } } } diff --git a/rust/kernel/bitfield.rs b/rust/kernel/bitfield.rs index 35ede53f2b8e..5331df986579 100644 --- a/rust/kernel/bitfield.rs +++ b/rust/kernel/bitfield.rs @@ -21,7 +21,7 @@ //! } //! //! // Valid value for the `blue` field. -//! let blue =3D Bounded::::new::<0x18>(); +//! let blue: Bounded =3D cv!(0x18); //! //! // Setters can be chained. Values ranges are checked at compile-time. //! let color =3D Rgb::zeroed() @@ -229,9 +229,9 @@ //! impl From for Bounded { //! fn from(m: Mode) -> Self { //! match m { -//! Mode::Low =3D> Bounded::::new::<0>(), -//! Mode::High =3D> Bounded::::new::<1>(), -//! Mode::Auto =3D> Bounded::::new::<2>(), +//! Mode::Low =3D> cv!(0), +//! Mode::High =3D> cv!(1), +//! Mode::Auto =3D> cv!(2), //! } //! } //! } --=20 2.55.0 From nobody Mon Sep 28 03:41:50 2026 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010063.outbound.protection.outlook.com [52.101.85.63]) (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 DA0BF36B903; Thu, 27 Aug 2026 07:30:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.63 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815848; cv=fail; b=Jamq1ohxeQ7h8Qi2g4i4cgIaJBlEaEiWFeXAth7rjqiafuRC0oOD2V/hYsiF6m5ijTrhp4jdKHzE9YxhneUOwev13EBcNv+la5un/BpLyInalO1AAWERmoLTh5bfogP2v6bGQICsZcaI4n9zDup0V21iYX+bzz2WaBuKQp02hw0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815848; c=relaxed/simple; bh=/Ar9oJhxRpH9jzVOKcGbXdxR0l4lkZxTEy8NKF7ol8g=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=WEW/+wKZik7zhK2Xro6CNTLDFlDKH+lazKYS8aa4tJAj7VEpOJeLi3Qp4qhrcWTr+G4qIhE4ca/FUZfLr65oxGD9I2Trw8kLdOuHyq0CQFAf4mXWC4g8BSm6t98m56oDHtvivV9I/Vakz/E2eEdr0spmcUhpFzMb/6vSjTmlkGc= 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=ZB36Y0ui; arc=fail smtp.client-ip=52.101.85.63 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="ZB36Y0ui" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zWlGSiQlYKU4clDnwqwcro3XzISOnjjcese4ek/5b8V/aTKbiBKlZBjV7BPZ9HG0rBJ5RasJx2bH22ncjBcrsSwKtjELi6m8/nPAXzOwPtT9FHD50Ie2gw0RrdRmPyN4cCoaELImFwB2lN26bhuPQJSxEPto7r+TB1QLaebhz4WGjEDCrJhSUW1WusDIs7uvVtfiqI4eTzQ372xfvLrtdtlszvm5480GAGS+4DpcUKgChiiuxnWLPIkkF6is4rY+bhJKDShizxhZoto7tM6LizxtzknumYFE6m4yxT1A1mWBx8FUwL1FgnqJvZyXSmqNmNqJbiOXL4Qq6H30fup8fw== 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=FRJPJfeggJ+kULFkNGAzALNdZQf31kbGmiGeHk3gAXs=; b=rllNBFnux32P1utWCfXBQnp+y7GnL/SrQRI7jSTK7puY4Bufs40ULrFtVwDmgayabUS50OKEtpYG+uCo5GlqghGh2VYWJ+E6DE+iNSKtPXt+o9BlXX9TaLoHqmXGQcSK7rBR1azEqfCaN/CYY+iO87f0eu6mNSutnVQNSWlX9I77p/vBA9SGkRgjaCbi6jphztwY1BCm3yx0QbJ2sr/HaN4WbBGM104gMY1YfYiG9Lcu3+tCE6wc0Z1yNJcal0R1LO52bbV1cnb2C81BffdxnqWVGwnEs+n+W2yzSO0H5jr6U9GyORySQrbmqA4S6VFiPh3fXCMkDGZIC1h4/WFmHw== 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=FRJPJfeggJ+kULFkNGAzALNdZQf31kbGmiGeHk3gAXs=; b=ZB36Y0uiQtOIk6gQnq0RMBguy/pdfiPE93zJtlghCvpUAik1nFMYqXDVv6g/WLOr/pTTZWRrGURkEM2IN1wqSAA3mPq6XfRvKyOOker06mZ/5WhmX94bNAfo4y4zxjJ0GGCOAWoZgI6ZsXmyWaitsayCQnDFugfGiGGs3Hptj8XqOr0rMcnh/Dnm0t8YhANpG7cb4fwF8sF6frB58wBB1xSKaZscIso9cSdS4M+tVFejWW0ggeWeBKcClvZklLtRO9fg1ZfG9fWWtR7MkTg34YWZ3X1YvnJCcEmlzDMRrppv/Q6uFZK4rxBxp31rnvFl16mqsWldmUFV4ZkraCDsWA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by DS0PR12MB999081.namprd12.prod.outlook.com (2603:10b6:8:2ff::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.10; Thu, 27 Aug 2026 07:30:41 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Thu, 27 Aug 2026 07:30:41 +0000 From: Eliot Courtney Date: Thu, 27 Aug 2026 16:28:34 +0900 Subject: [PATCH v8 06/12] rust: sizes: add sub-1K size constants Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260827-chid-v8-6-bc74c77d0214@nvidia.com> References: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> In-Reply-To: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> To: Alice Ryhl , Burak Emir , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , Alexandre Courbot , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: Greg Kroah-Hartman , John Hubbard , Alistair Popple , Timur Tabi , Zhi Wang , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP286CA0141.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:31b::6) To DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) 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: DS0PR12MB6413:EE_|DS0PR12MB999081:EE_ X-MS-Office365-Filtering-Correlation-Id: f03dccab-f76b-4bf2-da3a-08df040d190f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|23010399003|7416014|366016|1800799024|376014|56012099006|10067099003|18002099003|22082099003|11063799006|921020; X-Microsoft-Antispam-Message-Info: LpBPokn8HWG4eCx/ZNWTQ6jOxsty8vskbcUpJqCG4rIK//p9GK5JcesVitpp9bCzLYD5ZPe6QHs/vMFTjzW2ljrGJSeuzEhczprGswlxzztUPTpdCpHQPPaI8fxwWjDwjPZEgwLL3bX2DRjsk33cHQZxUoWctwBQ8Ypfjs1TzZD2l3Av2WTnRB+92a6hgWv3yg8A9b9XKmoUa6IwKFcxOsOmjPeXpEAn9Ak8zsUR8e5ixKIO9fMDd/+ZOJzEQDjZDXme733qgUCM3gTm0hh/5KPO9nj+tLb7nkUyoOalsyXr2M0i1LsASm0xP6BUdE+pfEQFvHmLCJhRjGSOJm7Q9JUYcEe/X7N1MtbqiEP0vN5x9U4j2+NzQRG031zzDTamh3GCPgt340/WWuuvEOtIkFujwZ9jtGcdQzq5Yj0D1ONsa8HxjmLuOodrONGh1BlFYmUOB4M/AdC+a6nwSvbRog6yYa812KXfhRvcAEFU/4gQsJWtd13Y0TWl48yNltY6YqsmlTojFDI7Q1FsjR2bHBv5sk74BA/s3jcWsBfMrrJrsB9oDooAugqBku/SELlytpSsvGkpgtieBwUmJJ4GpPUQl+SN4753+bS0TzqWjIxG9yl4CgUcwYRGoj+uAW109e9xyvMWas1HkKhys8hbvFJvLUo3CKOg+DCkm/cuouT0zg3n+Crcxp3nBlK0tz9k4VEuszXMexdOdm0wT3UzYw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(23010399003)(7416014)(366016)(1800799024)(376014)(56012099006)(10067099003)(18002099003)(22082099003)(11063799006)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TktNL0lrNk5iUU1kYjBqdHAwdDg2U1hoOHJsY002Q29DblhkZmhTeExzSUdL?= =?utf-8?B?SllkRTE2SHFJd2FzVEkvekU1b0RJTE1DVm9xSURvK0huS0g5Lzcvc0N2OHhT?= =?utf-8?B?Q2Q1UjFrOTVWQmFabEdlbmlEc1lTZFo2RlA0VE8yOENPSWJGMHdDZ1NBZll4?= =?utf-8?B?RW1BcXRsQWdMb1h3SW9jSERreVFiNW9TMU1pWHgxenBRM2ZvVzJLSVF5TVFO?= =?utf-8?B?VVdvSDFSSHd4ajBkV25HTUFENlBnODRvNm91ZzNBU0ZmZEhPYXRNeXF4WWhu?= =?utf-8?B?QytjTHBCQzZHUTU2eHdWaE5Fdmg2YmxsS0taL2dyVzZCZGJTMEtTUWJzMVlK?= =?utf-8?B?dWQ2TE5RaWhsQ0ovRjRDeHFYbHZRd1NLOHc5YUpqbm1UUDBKVFd1U0NzaEVt?= =?utf-8?B?c3lXYVQ0azlHOFRCSDM2RDJmczhYUWV5dEg3Mk80TmRnaHprcmVGdE5sRnFT?= =?utf-8?B?Nm5sbGg3V0VMb1pnNUFMczR5MnY2bjZ1Q1J0UnBnZFNrMHBRKzZZSEdQZ0Rl?= =?utf-8?B?dlBXeU13d2JydzVjc3lMYlRFMnYvb1YvVmhPLzNaTGF4ZlFkd0p2K0xZeWNF?= =?utf-8?B?WEtiYllZMUE1MlJSbzEzQ3pUck1ha2Q0TmJSQkVVTXZwWmtybkhQMkZmYjkv?= =?utf-8?B?Mjlaa24zSzFublRpam9RTURkVENzL1NNVG1JMnI2Vko3TnpsOXg3b05YV1Vj?= =?utf-8?B?MHYyem41UnhHV20zRU9kZWhBdzFYZWMwdDRLSXpId3dPUjV3Q2hUMFlLNzBj?= =?utf-8?B?eXBwQ3NuZVVGK0NQdDhFQWgvNGIvbit5RGtzMWtvRVk5Zm1qeWwzRjRVSVhw?= =?utf-8?B?UDErWmZ5ZWNsMnREckhUU3RWelQ4ejhlVkdTOUtldzZFZG9yNkVsaU42YWZH?= =?utf-8?B?dTUxYXZpVEZRL1U3MFowdjhFdzREaEJxc2dTSWVWUWRTTGcwQkduNS90L0NX?= =?utf-8?B?cHZubUxDaWlMZU5mR01KamJJMjZBdW4zYjVucjROWnVKL2h3bnBNV0Vsdlo1?= =?utf-8?B?ekRiYWlvMXBEUW5kdmVhd0VzOFNZbHNUSXNSZXlFTVhqSkRoQncyRWM2Qjhs?= =?utf-8?B?aW5UNGM4UThxTmJJZGY4eG1NQmNIOXB5emVjaVprS2U2OGo1TXhITnlFa2VP?= =?utf-8?B?ZllHdUpQYWt3dGtzUGhQVjBMK1pWbUx2NkIvK3Fsb0JzeVFwazVlQU1YMTZW?= =?utf-8?B?UnZNK0RCUm42cmpaYTNpSmliU2IwMy9wNHhOVE1zZGlCVExsdWFXeC9VRHVS?= =?utf-8?B?SjRyT3VXL0EvcWl6ajd2a01sODZkRVdwcCsxZ0xVeEt5Z1dIeW1LdCtrYXRL?= =?utf-8?B?eko2ZWE4QjJiSXF2TnpkQWhTYWdoRzR4TDBHb292WTVqcUtSc01CTDFmaTF1?= =?utf-8?B?UC83aGZnUU9HWGsvcFZURGhwcEd2OG4vQWdWOUcyOXZDWmZmN3RqZkl1SVN2?= =?utf-8?B?LzZhOU9BSzI3d05jMHBEeXpESEVObnEyM01GL0ZhcUpuQlMyY1p1ck0vMVpZ?= =?utf-8?B?dHJycjdYcUo4aVBzNkNuVEhLSmE4RjViM3hKaWtMVFFQK3MveHZ6UXRadWR2?= =?utf-8?B?RDE5ODQ2YUV0dHVDZnZXUGc3NEUxYUVXbGRacEwxdFJQYnN2Tkh1U3Z4OWQv?= =?utf-8?B?S0RoWDVXS0IreGgrSm0zZUlMT1VtN3d4TG1ieHVOSEhtNi9qWTFKQVZGdUcz?= =?utf-8?B?SU9HK2ZyZWg0cVRzOUUwVXlsSW1sais3TEU5YTdLL1dhV3dsTHBOc05jN2lj?= =?utf-8?B?ZXhlcTFZM2tjMktGK0Q2MjFEazdtTy9IejllLzA4LzdkbUZGVjZaTVpEejVO?= =?utf-8?B?TzVwdjVSSnNkcGEvODk4ZUY4cSs3azBhanhISnpoZGNSV1dqNWtkaVRWQ3JB?= =?utf-8?B?RlY4TG4vTnJIYUVCMjdJek43dFpSL3J3VWc4NVNNSXg5OHA5aFc3SVZpSUtq?= =?utf-8?B?WThNb011NVBGcE1GTFgvSHFXbHdjVmRFcnBNbWpITDdPMU96aE5ROFpvT29N?= =?utf-8?B?SzBlaS9tTDNPLzNlRHNUK1p6ek5RSGYyMDZYcnlPVzZYaHJOb2p4UWF2STM1?= =?utf-8?B?VlJuZG1Uc2s2OUtuYnFyUHB5dzhkYnZ4VnVVWVpvdCtQS2dtenFqejE4bzBQ?= =?utf-8?B?ay8xamRsRHVJZmpjMzV5SEE0OGZ0dDRuTE9UWWl6UzdSTkIrNDc1ZzQ5SGlk?= =?utf-8?B?S2NSYUxCNllHN21paDM0dHJyazl2b0QxWDBEclhZUGw1VS91dzVQSnU4VFN0?= =?utf-8?B?SGQ0REVrUFJuZW0zUkp3VHhMN0hBUUozNkN6MHRwVGlsYWhMTUJERmNWeHFZ?= =?utf-8?B?VkR0Y2U3WE1VaTRFZHhoOFhUeDVKdUJlU29GeEVlSE5EcVM5YzhHZ3ZWT2Vw?= =?utf-8?Q?GfPCvUWC32VoJRdM49CJbdKF3OVroKpbjh4SBG11uZH6R?= X-MS-Exchange-AntiSpam-MessageData-1: BtwkbJ7DOIUNOw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f03dccab-f76b-4bf2-da3a-08df040d190f X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6413.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2026 07:30:41.2608 (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: ryUpYOs85cK7cTPHFhaTRi0zNfiGMC3nFlQgZXe+9TFQwFzQdYNQ1H1yWneM6hCkVN47hGYBCqnw4Gwf3wjelw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB999081 Add some more size constants, mirroring include/linux/sizes.h. This is useful for making `Alignment` implement `SizeConstants` in a following patch, because these are more common alignment values. Signed-off-by: Eliot Courtney Reviewed-by: Alexandre Courbot --- rust/kernel/sizes.rs | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/rust/kernel/sizes.rs b/rust/kernel/sizes.rs index 521b2b38bfe7..7d03361eae3d 100644 --- a/rust/kernel/sizes.rs +++ b/rust/kernel/sizes.rs @@ -35,6 +35,26 @@ macro_rules! define_sizes { ($($type:ty),* $(,)?) =3D> { define_sizes!(@internal [$($type),*] + /// `0x0000_0001`. + SZ_1, + /// `0x0000_0002`. + SZ_2, + /// `0x0000_0004`. + SZ_4, + /// `0x0000_0008`. + SZ_8, + /// `0x0000_0010`. + SZ_16, + /// `0x0000_0020`. + SZ_32, + /// `0x0000_0040`. + SZ_64, + /// `0x0000_0080`. + SZ_128, + /// `0x0000_0100`. + SZ_256, + /// `0x0000_0200`. + SZ_512, /// `0x0000_0400`. SZ_1K, /// `0x0000_0800`. --=20 2.55.0 From nobody Mon Sep 28 03:41:50 2026 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010014.outbound.protection.outlook.com [52.101.201.14]) (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 2D93E367B8E; Thu, 27 Aug 2026 07:30:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.14 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815851; cv=fail; b=IeiYFapgDIl4+J8RHSh5vAZqTOr4xDVLZiv1YojCMPaawf8udyN+pBUJPDKA0pF8TdROcCaSH66ktbez2Y41p/E1svJLarkHbIk4vI9cRqA+6JW3dAXuckg6XC7vq/YmiM5D08ehJ62gIy7ygTJanfqRUVreAcCq0E9A+So5Vxg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815851; c=relaxed/simple; bh=gspdo74obvuKSZsldLrY2iywYimOZ2YesjwpJ/Rfkkw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=OWBuyWwIjl/jEmTcVI33I4oDpHD6EkPi9juI7EbwKYfymx5VbEw6UxbtfzueK/imtpKi4U2SzwlxsaEOhGfgdqEHTv39ZJ2wz/v6Tg5bRH1kS6IsLdIrefTDiWipQfgNjD6CrsUGySkCZy72IkfulfqDucqJiVW/rM7Psjac4+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=N4PWA/la; arc=fail smtp.client-ip=52.101.201.14 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="N4PWA/la" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=EwC2YmevLmxvCSoweoQ2uf1bgxK9HJB8Qtc0ZMXQHwy3ttKb8z4LWlY2ZsWD9OsfrTzJCj/lMIE6D3Zmt0TN3aUVhqSYe/Rm8fMjrvprIM93O++CFL/ukdAeiMoLwoc0wbSWYgIYX+fe/sC4peyWNeSPkNuex/LeGryI9S8z8juOhjdhN+K1nS/vLKelH+n97+Ne+C0Z4q7/WIwpkiOeYf0SvquzPpuLszT4spcb7jUjeYlp+4pT7tAfbVSZqX+/tl3AfvqHmfRYJXbUjniOwWB3cB34WcgrFSPcm8JGcuXE1nYmk7Vb/2Tt52VqrnW2xQs7Pv0chGlaf7XOtHzkGg== 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=3+O3A4qzXACX8TaeBvjTt5HvhSNbOWZfwzvYwFL/fI4=; b=LG8fszfqW+mFqxDRr70tpS/ECedklpwvrbLbv7iE+Yv5FbbQz5n6cWR4WCVcw/mCs6GprXDhI7KOxr43bCFApSDKDhu4ewYXV8i9j1gXEaO9Eestqh85qtrIXLCcmDKLeHYNd2coqUHKvfsW7aTueZJdPxmfkyRR8pW9HTC82T2YZPdIaVq5jDlNuVDR9McBBdBG7fA0gkYaV1ruhGebfH6gnzD23dQ1cAM3CcSG529N/qTgd4H8xZwqlBtcLTy/eVAETFAown+BvCBxBsuXZUQwjQqnJ/12OJdW8CWaOvrVk4wtt8js6oZrgXGgwOmogJDbnT80AmElDFeMYMJPXw== 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=3+O3A4qzXACX8TaeBvjTt5HvhSNbOWZfwzvYwFL/fI4=; b=N4PWA/lavb0PeGXjg4FS93QhvBWQeve0ea8dqmEof62lCMYjBVAW8IdQoozDTqWrDkfd/mhG26TjL+89Zl5dCBgRzhP8AOCX3j5CSjJo8bog69xDRyuyg29a9PTbhTmRHBVaSLeVweYstcjOQZi3A/arpLkfdn1OWhSsUU1tkiL8+zbkJ/rSbNAbEWWsxIzfNnGRgsBHLuE6tMnznupryEUeaGAZKFbP6XXlZ3s5pz8+xGpocvZIoDO/7jyFO32L4Pf5RKnL5yTURpGupim4qmzkhKsnLK716anaslJ16wtvv4D/hVYwLR66iiUfy9cd8WWwjtW5GAKRqwA2Mssd8g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by DS0PR12MB999081.namprd12.prod.outlook.com (2603:10b6:8:2ff::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.10; Thu, 27 Aug 2026 07:30:45 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Thu, 27 Aug 2026 07:30:45 +0000 From: Eliot Courtney Date: Thu, 27 Aug 2026 16:28:35 +0900 Subject: [PATCH v8 07/12] rust: sizes: implement SizeConstants for Alignment Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260827-chid-v8-7-bc74c77d0214@nvidia.com> References: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> In-Reply-To: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> To: Alice Ryhl , Burak Emir , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , Alexandre Courbot , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: Greg Kroah-Hartman , John Hubbard , Alistair Popple , Timur Tabi , Zhi Wang , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY6PR01CA0029.jpnprd01.prod.outlook.com (2603:1096:405:3bd::6) To DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) 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: DS0PR12MB6413:EE_|DS0PR12MB999081:EE_ X-MS-Office365-Filtering-Correlation-Id: 7cc295dc-881f-4e91-cd11-08df040d1b44 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|23010399003|7416014|366016|1800799024|376014|56012099006|10067099003|18002099003|22082099003|11063799006|921020; X-Microsoft-Antispam-Message-Info: E/iDJbPHXbq9WOwwk+tK5tspwa+h8PPDw6M1KZLIAdOXBz4oqOZq5qejTIChKorr1IyYe6aH2EJ+ioZuZTbiVodBbtd4WvlJVMMYeBZKTk2C85dxWzpJHsWwW91IdMAp5ok9TvTQO/je+o/a8/Z39pwybA7JYEjoQPKbtTs/GOqvjBXiPUnRQuJLzqucqwbIGnG5PAzxup8GDtVqBOMQmcTSV0dHxHwYnKzXpI4Yr5YRroWiW593H2D+Hx12Q8wweA55gtMS8LZgKYoV/4GgKxAAnXr2kNz3wXkJqdRcWHFeGUlflLoXZcxVjcsPzPr1nhqhMbP+eEu/+JBnvUR5D5ivugaytVoqnqxNy1/Ezquqg1d78VflvLwKTmWevm4ObE93baLcZq7wpCOsWSJsx9MNfetBU9ZAI0woUadlPHO0nC+W9Rh8/AZ2VZxztbeINoqFMOSbCQSRGUoMt34+1kTNuekEbUXrr8TdHb7UI2zwf9/c15KlXbCH2l+e22TpaPHD+eR19jZWm64L9A6eR8zKBWelYCJNFyd3C8sBfWG+mYbWvTVX+GQ6DII04F+oxSjruBsCVm5Mgn/FDT/v45CV8LhZNy6+HnWtAuIITBdQ64KNVhe88/SX5kIXTueXY/ITCmFNxpqcrVbLsRt473rdZliZBNpH0cc8PrEy8t7AnlfM5RNbEkb8T//tnMjR66WM0m0B51jRDTBYDcZWiA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(23010399003)(7416014)(366016)(1800799024)(376014)(56012099006)(10067099003)(18002099003)(22082099003)(11063799006)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?R2tsUlhGYi9xdUdzRGR2WVNoS3hrVUNJc2Z5Y2VmQjAxY3YyUTFYY3g0U1hq?= =?utf-8?B?SFBkU2xMMXkxdWlvUzZlRE1vbHdxM1cwVy9CU1ZWNWtlNGx1ZHN5OWJKRGJl?= =?utf-8?B?aVcwUDRFRFB1NDFhN2Q5NFEyTVNNMzN2Mlo4Zk1nYWJsN1ZxRHZiVjZ2RUxs?= =?utf-8?B?dmR0amtwK2swSm5UY25KMjlJR0FERklhUzAyVXpFd3pCZmR2WGZZK1lZL0pt?= =?utf-8?B?TUdha3BpcDhYKzlGcG5SS1RjRlE1em1kK1hYVElCaTNCcmZRMHFFT0FZNjcv?= =?utf-8?B?TkRHTWpwaGJrY2g4b0FUbzFMWEV2UjNWRW5jVW5URytIZUFSWi9acFJ2S09S?= =?utf-8?B?dVFiQVRIZ2h1SzB0Rm9mV0QxeHJrZlpuS1hmMXRROW96SWlmTnNGOERReHlt?= =?utf-8?B?K3BpYyt0WWFXaG1vc3ZvanVHWUR5WndQUXI0VzhlRlFkQ1JLVkJhM0o0MXcy?= =?utf-8?B?UStYdGk3RFpQcWdxR1h3S0swb0UwN3c0WGJpT084MU8yUnd3Wk1yMkRtRnBK?= =?utf-8?B?ZnYzVWhCODltVStoT0dBZ3AzbURwZURleWlmOHE0QlpFZk5WeUJ5a3U2SUtz?= =?utf-8?B?TnhJeFhsWUNSQmxuY05HMW9mS0hrb0tWRk9yOUVuMDdQTGQrbStsZVlwa2hK?= =?utf-8?B?aDBveG9Lc3J2cXhMUXVndVBPUDNOdlF3L0xLdlJ4d3I0d0NFeXNqNmNxNXh1?= =?utf-8?B?OGNRN3AxQmlpSTJxS1QvSnJObC9HeEx1Qzc2MDRncE9NUFhGdzVhUzhLVEFs?= =?utf-8?B?ZG1CUmd2NWk4V2prWlVUaE1FNi9QazZxK0E3dFkzUFNLWkI3UW9aWVU0d01U?= =?utf-8?B?bEN4R21iU0dKRWJmT25zc1BGYlc1MkVYU3Z4c2RjbmF6eCsvOUI1NndTSWk0?= =?utf-8?B?ZjJJKzhlMFFzUTVWMzVzN2hvOWthMWNpbC9YSHo4OS9mQ3BzZkplTHJkb1ZQ?= =?utf-8?B?MFdMZHoxQ2NDRDhJNVRnWGxGZ3BPSHpxRytuSDlRNTB1ZGRqbmcxTUdjQTRI?= =?utf-8?B?SjhFUng4Wll5Z0xodDREbE0wSTVDd0xDblU2UjN6Tk5ZSjlndnFFWnlFekxt?= =?utf-8?B?WXg4UGRmQkw1dkFFOUlNTjB4UFNDM2tOM1lqeXU5NEJ3SWtNVUVHSjEyOEpZ?= =?utf-8?B?YTVNcG9lQTdqUmVKVkNVOUFjOXRoWEgwK0pjMTBvZUFoZkI1M29kYW82VVBH?= =?utf-8?B?YUcxb3dBZnFjR01OL2F2R3ZjZmtqNXdyWithZmFXcDNabE5qUk5ueDEvZ0pp?= =?utf-8?B?TE9neldRUHhQd0JlZnFkMitQeGtJTk5lRDczTXI2eG0wOVo4dEdqaVNnOHhP?= =?utf-8?B?d0tibGxQNXhCRjkrYzNLZ1pKT3oyZWk5R3E2V3R1Yy9maTQ1ZTE3Zyt5VXZp?= =?utf-8?B?ZWdhZEdqamhBQURpUE1FTXp5eWZPWll0VlVGQXRlanBHYjdJcW1EWjFFZzF4?= =?utf-8?B?N2pJMDEzWjY0aDlPSHZxV2ljUUZqZHhoMHY0L1labW1ZNURTRzg4K0pJd01N?= =?utf-8?B?dmY0VCtIdXNiVE9WS2VUa1E5eHNwWkJrRlRmZlF5aXppZS8vR3VwdVB3L1J5?= =?utf-8?B?cmlpNXRlMXBlUWxUN28yQ1hKL2p3UVJrSjRHRTZXL2R6U0F5UThudGdoOTQy?= =?utf-8?B?Q2YxV0tYWHFZTWxHRzg4b2dIcXlhSzR4dGU0ZldkQ1o1VzVuMk5ZQ2NkU3V4?= =?utf-8?B?UGxkc0ZtckNTM05VL0VVZjhXM045TW5nMGtZYW4zTjA0bzhVN0VBYzgzcHZK?= =?utf-8?B?UGQvU1ljaXZpVFJnVC82UVJRYXROenk2UExid2UwbUM1WjNOVHZoZ0VnLzdl?= =?utf-8?B?WVFra2gyMldScU5FS3lSUnZTbGFJUVh5SUpkc3NsZUVEY1NpVzBpKy9TNExJ?= =?utf-8?B?ejJkbHZLdSs3cFVWRjZ5ZTl6OHR1UTYrM0FxajJsb0h3OGU5SER6UXdRcU12?= =?utf-8?B?L0FmZVRVRTFvazFWVkt5bEZBYVA2aE1LajQ4RzYrMXdDK2JXakthS0oyTTdy?= =?utf-8?B?dXlPSEtZNml6NHAzTmgzZUJ5YVZTajU1UE1HYWxUWVZGWEFCRGx0TzkyeUN1?= =?utf-8?B?UGppdGhPbDgxUGg3VExiL3ZiZzhpUEEvOEdabGkyTUoyWEY1bEI0SENZaWcz?= =?utf-8?B?c01DUXNlZEJMbTdGSERTVTA0cnN0UjZyQlV1SWVMZ3UyUzBMT1VJajF4eXB4?= =?utf-8?B?VzFIRnhiRmlydjBwOStxUmJDWi9pM2NWZlFrUXcrdzNmaWt0d0Jjak11SGI2?= =?utf-8?B?enhURzExWm1xYVBWMVJSN2p6cDQ5Rkk0UXl3Tm95eGNaWTYrcEJ1cHVkYzZ0?= =?utf-8?B?ZUZNbTR5NDUyeHRNMHpFcGlObE9TM0d3ckVHZGtuS3V0TjF6OFlLVXU2M0lG?= =?utf-8?Q?2Z/WyXECW6X71m/LOfx8CPv4Jdv+AljJqh4bVfApM7q+G?= X-MS-Exchange-AntiSpam-MessageData-1: fQao2tAgW0F57A== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 7cc295dc-881f-4e91-cd11-08df040d1b44 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6413.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2026 07:30:44.9515 (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: UBYQ1xI8j966cAjz8RHFNQ1DAtbAUu1CeNn+xvj7QJS7ZF/yzAiLbFWs3ekLAz8ez9N8Cj+EOBaifba78ZMkPQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB999081 Currently, constructing an alignment is quite verbose: `Alignment::new::<8>()` It's unfortunate because it disincentivizes using it at interface boundaries. Implement `SizeConstants` for `Alignment` so we can write e.g. `Alignment::SZ_8` instead. Link: https://lore.kernel.org/an4xDp29VX8Am0uR@yury Signed-off-by: Eliot Courtney Reported-by, but the Link tag is more general, i.e. it is meant to Reviewed-by: Alexandre Courbot --- rust/kernel/sizes.rs | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/rust/kernel/sizes.rs b/rust/kernel/sizes.rs index 7d03361eae3d..188e00c2b8b4 100644 --- a/rust/kernel/sizes.rs +++ b/rust/kernel/sizes.rs @@ -13,6 +13,11 @@ //! these constants as [`u64`] (or [`u32`]) rather than [`usize`], because //! device address spaces are sized independently of the CPU pointer width. //! +//! The trait is also implemented for [`Alignment`], providing each size a= s a +//! compile-time validated alignment. +//! +//! [`Alignment`]: crate::ptr::Alignment +//! //! # Examples //! //! ``` @@ -105,6 +110,7 @@ macro_rules! define_sizes { (@internal [$($type:ty),*] $($names_and_metas:tt)*) =3D> { define_sizes!(@consts_and_trait $($names_and_metas)*); define_sizes!(@impls [$($type),*] $($names_and_metas)*); + define_sizes!(@impl_alignment $($names_and_metas)*); }; =20 (@consts_and_trait $($(#[$meta:meta])* $name:ident,)*) =3D> { @@ -119,13 +125,22 @@ macro_rules! define_sizes { /// choose the width that matches their hardware. All `SZ_*` value= s fit /// in a [`u32`], so all implementations are lossless. /// + /// Also implemented for [`Alignment`], providing each size as a + /// compile-time validated alignment. + /// + /// [`Alignment`]: crate::ptr::Alignment + /// /// # Examples /// /// ``` - /// use kernel::sizes::SizeConstants; + /// use kernel::{ + /// ptr::Alignment, + /// sizes::SizeConstants, // + /// }; /// /// let gpu_heap =3D 14 * u64::SZ_1M; /// let mmio_window =3D u32::SZ_16M; + /// let page_align =3D Alignment::SZ_4K; /// ``` pub trait SizeConstants { $( @@ -137,6 +152,16 @@ pub trait SizeConstants { =20 (@impls [] $($(#[$meta:meta])* $name:ident,)*) =3D> {}; =20 + (@impl_alignment $($(#[$meta:meta])* $name:ident,)*) =3D> { + impl SizeConstants for crate::ptr::Alignment { + $( + $(#[$meta])* + // A non-power-of-two constant will fail the build here if= used. + const $name: Self =3D crate::ptr::Alignment::new::<{ self:= :$name }>(); + )* + } + }; + (@impls [$first:ty $(, $rest:ty)*] $($(#[$meta:meta])* $name:ident,)*)= =3D> { impl SizeConstants for $first { $( --=20 2.55.0 From nobody Mon Sep 28 03:41:50 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010069.outbound.protection.outlook.com [52.101.56.69]) (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 5262C36EA84; Thu, 27 Aug 2026 07:30:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.69 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815856; cv=fail; b=ebVId+JFWQjATAI4j27uxVOBDBMdgo2vBtsSOgxEtZveqEC/2oh1UZUvi8TzXpI+zT2HLHyBNA+LUoCXh4fbZVNr0Pp8fzFxlfWyp0zZswQi6WyTHZzETOo2NjtWqOwNwpAzCD1X+1cvxYfs7XwNZ2nu8B4UcJFoEL9VSGjKe/s= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815856; c=relaxed/simple; bh=5biJFnJ3VaRhMSJoC6x3hG9tl19dZH6tTspC5/e7Mf8=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=XVr6fg4oCeg1+Xksj9eo5kkUyn1NP8BZAZwXFKdaYXh6E2mpOiU458shyk3+z+IyIbikXMMMsRgdwWv3PSK/MQeYz786+3SklBLm1tk22xhO2XDTQVUW31TtdOp+/GefgT0O9xU5Jip8qAQp9m6Nhh/eGRUKjdYBSSfF6H2F9mg= 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=JR+uDlns; arc=fail smtp.client-ip=52.101.56.69 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="JR+uDlns" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=v4q4iXe4c98LpPvtc2SXA6VcUS0o4iQZve9RX8efqlCHLF79rg7Lc9e3v6BaKR1I6zLttZbinjqsCU7VI/+dGighgmqdDQJfG5bZxWjFzmWfurm+solcq14HujT4/Ilamzgf2f8KAxNjGTHAWXTax0btRQa0T7i3XkIBPfSQRqc4T3lhZ1K1f5I5D3IAX2Y5qYAnjraDZML4zzPbzzvfnOgjEozsgFJtq8tDhPHyiPeRcmGZuYCJa/KfDCbp/2w9F4uanYjkfy9Lkax/w7I6Ybmy2LmXb3pDF8h/UITKNDXWl9bdQRZzieHrzkTj9vu94sL1lv2nPKIFg5L8aCulPw== 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=BhhcR2mlH9YG2shfAb0nUFZ8L6GCPadUUXs7RmKRvIU=; b=xww+9yfsl/Eu866KKUcG1jHYN9LI6MmCwA3AN/wju6ZZziwQjXAmPFHCyZJWxpi62ZcXCdLbWJn3tPUOWkX/9sn3drxkR5y958IBQLwA6TET4mPdLCVwJxbzGZGB3b+4drGLjEyY00Hzb1kTmhEQkcj/WOlGCZXfV2j6pSWVelqyOJeUg4EG/A7sIbl0RGgBoXZ7LaPArs8Mm/zVQ6H2rPPoJVV25qUejGBFVSofVtDfDsgwsEQwNlCoyNabkJlBBh40yKI6vcZFcqTEDhjZLc3pI+ErCjBotQvBvc2f0OhkSiLNYqWvuEsEeS6TrE5SrvG6EUXP5uwy7ST0s9T6mg== 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=BhhcR2mlH9YG2shfAb0nUFZ8L6GCPadUUXs7RmKRvIU=; b=JR+uDlnsDvpnhUGP/NFrFMTKVTKtdIghrUj2fE5mbhJpAUSaQy5ciH4X9XZ5MzKBz5gVtOByV1MhO1c6aGNItcPd0ft54ms2SUAmvwqPRrRFbh/UxmAxtFOuHn+UJ1z7nYi1CExlmObi9pHgUH38OsDutq1h4ae+Vc6z5JT9+bTRnTfKCNdsSaUudwf0bTkKhxFjxESEIvukPIC8mfweZ39F8VUktk5w0JvSPTtoScVX4nXz9GF54fhimIJ/t0xx+G9tLq1EysxcpoQzoAg6D/KvCNcdinRRumk/igTtSUbd2N+488ybgT4Z8ui/dUhRejOEdL+Wh2zvhJZp9XwPIw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by DS0PR12MB999081.namprd12.prod.outlook.com (2603:10b6:8:2ff::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.10; Thu, 27 Aug 2026 07:30:48 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Thu, 27 Aug 2026 07:30:48 +0000 From: Eliot Courtney Date: Thu, 27 Aug 2026 16:28:36 +0900 Subject: [PATCH v8 08/12] rust: use Alignment size constants Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260827-chid-v8-8-bc74c77d0214@nvidia.com> References: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> In-Reply-To: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> To: Alice Ryhl , Burak Emir , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , Alexandre Courbot , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: Greg Kroah-Hartman , John Hubbard , Alistair Popple , Timur Tabi , Zhi Wang , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY6PR01CA0042.jpnprd01.prod.outlook.com (2603:1096:405:3bd::19) To DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) 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: DS0PR12MB6413:EE_|DS0PR12MB999081:EE_ X-MS-Office365-Filtering-Correlation-Id: 3cb8a1bd-2b8c-4149-ed72-08df040d1d85 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|23010399003|7416014|366016|1800799024|376014|56012099006|6133799003|10067099003|18002099003|22082099003|11063799006|921020; X-Microsoft-Antispam-Message-Info: D02tgF+W4aFEFm94reCL9VXZkzISPqvD1niXwg7/EPQpyCvxbfwHKdDPMNPhI45+zbJYFPDb2fzsQsUtUw49e62d6QOGmO3nR2X0g0E90WmU2Ni+pDDxmc+w4xnWbeZonC7muwUQmOkaK8sSA9ZjWbaSpC2tUxQGfZ5vnIFh+s0nmk+eyCmW0Q9+LzXDBuu/IdNU+IISdk8PiiB9GmNwcIvBq3cKrgMK2Psd66WQxqwHqfi5AYGxAqFwbKkszlww5/aPHMb43G5iA9QDU4BtlluSWczZ/9q4tyhRAxm+yhlQ3Iv29B/w8XSbgLBe9BlBRSIjop7UFNhdMOnCuBjegBYpNnjPuLCY36gL8aQDp3CHk/HmAoh81RygcogIZ/KSH1T+Bw45gkXStf/4MGeu8Qrikq0ySfliQiGLj5EZ/9Bj4ianecR869bmAGzf9mcuMZF2eo1NZq0e6kFE0egAjNrozVmEmXxpsU46fuvWU77i4YcamgEDeCXLE3gBh9uqt5hmo6seAEbWhGUITotXS2s3lDom1OgKCCINIhmLHrBd4V7V3E1WvQ9OTwDJXw1F9GpEHlEqqtVvlCtmudjZZdqjdCaBVE/hJZdAww7gGXXZhf4T/v2mlbKxpvTSNWRqdRZTFF+8GJ0cUosIBFOU20G1JJPDd9k1eFFdZLQAEGK4b0RjvGUqnmU2NYfrYWzRP5mVUkWZDibfz22QeCuFqw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(23010399003)(7416014)(366016)(1800799024)(376014)(56012099006)(6133799003)(10067099003)(18002099003)(22082099003)(11063799006)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dEVIMFlYaVg1N1FGVFhJT2w3OHIzSWhyTzB1cUkydXU4N2YrV3NLUCtLVzZz?= =?utf-8?B?NDR6SUZlNmE0YmwrekNPTkhLc2gydXMvaDBvNjV0VnRQbjNLdUx2K2ZOaklw?= =?utf-8?B?dDdNSHJHQm9EaWp5bXJBc0Q0bnI3V0Z3RmpQaHVTUVFTVWFuQUx0TVVBZHM3?= =?utf-8?B?b0F5RDdjalZvVGtOWjM4Y1RUUGVuU2MyODhoQTJEWXIwL3lMdDdHWmh0UGRB?= =?utf-8?B?NVp2TzlnTE5XdFFzY3VPL3EwZmR5SHBKMkV2K1A4N05rTjdXZi9WK0NERHUv?= =?utf-8?B?QzFDbkZFVkwyV2EzVkE0M0tyRjZPUWRGZGI1UnQ0YXZVdlVsTGV6Wm9veVJR?= =?utf-8?B?eHM5NXdOR3grNjhDTXkxWUlpaGUrODBvV3JEeTJHVGxuRUoxbGlhbTlVeHJB?= =?utf-8?B?cVRVeXlGS0Y0eTRISGh6TzVMemxLZXZLVnZwSU1XT1l6WEsvTTUxWXFPQVVE?= =?utf-8?B?ak1qdlA2VENCdW51OFI1dlVkdGxDSlh3UGdXUk1oVTcxaFVHOTVodzlxdXpU?= =?utf-8?B?WUoxQUwwOERNQTdQdnpPLzIzUXE4NHc2VExZcXlta2IyY0ltVTVuNTljU2hC?= =?utf-8?B?ZG9LbG1XQ3c5N3hmVWkrZUtLUEowVy9GR1Y5QjJqUmgzSzZkdXZxUEc1Wk1J?= =?utf-8?B?MUxaeklIMmZuUWx5ZUY3L1MyMWF1bjlVbzdBZ1RySkh2YzNDa2I4aitPTnl3?= =?utf-8?B?U0dnaHVkUnFSMkM1Q3V6QnUvb3lsdDIvY1pISWliSWhkOWErSnpydzcwU21o?= =?utf-8?B?R3ZHNHpnemJrOGFqMVZlUERTbGI1Szd5K1p6ZElVaEhhSEpXaUo5eVdWWGFi?= =?utf-8?B?bHhLd2ZSRjBOK3RLU0RYRzU5OTR6c3RyZ2ZpV3ZoWWNFT0pQUUdXdWxoR1Vm?= =?utf-8?B?a3JtNlpKR0w3eGZ4dHRwZWNVdGV0WitMZFVQUHNMWlhPaXB0WXFxanRLK0dG?= =?utf-8?B?MUhGbmJmVVdiZ25SRUFFdmZYMlcrT0swYmNLYnF5VzNiSDAwTXlnRFpYVXRS?= =?utf-8?B?WUVEN3NRaytLaVMvRVlUalA5MnRlcEVFNlprUHlJQ0JaSGx5cWNSajJuUDZP?= =?utf-8?B?OVk2UE9VT0tIZEFmTnF3WnZLMi83eVY4Witkc0U5TzZZNU8vM2NBWTNNaWpj?= =?utf-8?B?dTRoZVMxeWs5SVFmcWoyZVNKaGx4RE5yVkVRa0Nwb1lESElsTUs5VUFYR0sy?= =?utf-8?B?Qm81NjYwenlXandZWHZWRTk3SWx6ZEhheGF2TWJwQ21CcG9xSkYxVnJjK0hB?= =?utf-8?B?L2ZnWG4wWEhqUXZhT1dkOEsyQnprS1N5aVh6WXFzMmlIMVZwTzhRSFp2dTBC?= =?utf-8?B?MXkxdS8wUFhmdHN2M1VqRXVadVBxdzdTdVQvTDhLYTRwZ1ZROFRFV1pXWnZH?= =?utf-8?B?cW9ZeHdrM2phRzdVQ29XMWtSM1hVQjF5TFV2THVSdHZJempkbGVCTThpWFZC?= =?utf-8?B?emZlTWk2cWlmWFd6NXVhRlU1YldOd3o0ajZheTNTWGFENnd2RUVxdlNPbDZU?= =?utf-8?B?Uk9NcG5tZmFvNXhCakxUcFhWcDdQM1hBUGY1S253Q2lLcStqZUhFMlpLWElN?= =?utf-8?B?R0hLYU04MGxReWdncWJ0MzB6VlFyUzFEL1BNendsRm9tWEJuQzlkenpmYmxm?= =?utf-8?B?RzEveXBXSzg1QlZxdkwvZVI3V2RHQlMzcUIvOWNRd09pM1NOVmtIMHM4K3Ew?= =?utf-8?B?UFEvakYyQ0RHdmtxbVl6SE9YUWpNanl0Z2N6Vnppa0lKMTdaQm14ZlNzeExQ?= =?utf-8?B?K2ljSXZCOVgycVVnU21ETXl5NnBWazBFU1dKR2NxT1hwQUhtNmZFcjZaT3FD?= =?utf-8?B?VGVrUmw2UVBxb2FYTnp0SkY0QnpPZVliZ1hhSUZaUmxuN0doWkZCcGZORXRZ?= =?utf-8?B?QURqWXdneHlSNENjM2NRcExrS21XZ2xFTnI3Q1lKQmFMUnplNTNjdDlrZkV4?= =?utf-8?B?VlVrK0R5WDN3V3RaTzlsWUNkTU9oMVo2bXJkTW53ckh2dGEvb0duV3I4MWcx?= =?utf-8?B?MkkxVkpXVHdwZjdnTFZrQTVobFE5N3d1WmNwUlhxcGNOSERmT0RiVWk2QzRI?= =?utf-8?B?SXFMa1NoU1A3SnQwa1Y1OS9lMWlCdnIvK1dpZE92MHVmOVg2VnZDQW0yNnQr?= =?utf-8?B?VFFKY0lpVXRGdzdHSTZyNitObzJ3NGY3aE8xSzVCcjVOQ2FxSlNDdFlJcnRj?= =?utf-8?B?NkZHZ0ErcDhVUldpeXdPT3N2NEhDVFo2WkhuZ3dkMnBYeHlvTW1rRWt6YzB0?= =?utf-8?B?UEZmdXVxMm1hN3Q5S2w3ajF3ZGR4b2txWEdQSUNyZ3lzMUZ4bFNCMHM0Kytp?= =?utf-8?B?anorMFRscm5LTFQ1aUJVMVVBdm84MytrV3BuakF0RHdCaURROTZZRGlSSVNM?= =?utf-8?Q?onra/tWSFQUbGU6P0mIWeVCdT9AT+icXvpaZKxP68zLW5?= X-MS-Exchange-AntiSpam-MessageData-1: gKYepe+TzUI83g== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3cb8a1bd-2b8c-4149-ed72-08df040d1d85 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6413.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2026 07:30:48.7703 (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: p+BGXs0ssrDXT/lygPzruYM4OhaydGyDRZVVBvN1dnDO0JaGGLI14KI1nK88OIOrVFec7My+KaANJ/OSAT79zA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB999081 Use `SizeConstants` for Alignment that are implemented now. Reviewed-by: Alexandre Courbot Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/fb.rs | 10 +++++----- drivers/gpu/nova-core/fb/hal/gb100.rs | 3 +-- drivers/gpu/nova-core/fsp.rs | 4 ++-- drivers/gpu/nova-core/gsp/fw.rs | 12 +++--------- drivers/gpu/nova-core/vbios.rs | 7 +++++-- rust/kernel/gpu/buddy.rs | 26 +++++++++++++------------- rust/kernel/io.rs | 5 +++-- 7 files changed, 32 insertions(+), 35 deletions(-) diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs index 1576399389b1..70493c4a07b7 100644 --- a/drivers/gpu/nova-core/fb.rs +++ b/drivers/gpu/nova-core/fb.rs @@ -219,7 +219,7 @@ pub(crate) fn new( }; =20 let frts =3D { - const FRTS_DOWN_ALIGN: Alignment =3D Alignment::new::= (); + const FRTS_DOWN_ALIGN: Alignment =3D Alignment::SZ_128K; let frts_size: u64 =3D hal.frts_size(); let frts_base =3D vga_workspace.start.align_down(FRTS_DOWN_ALI= GN) - frts_size; =20 @@ -227,7 +227,7 @@ pub(crate) fn new( }; =20 let boot =3D { - const BOOTLOADER_DOWN_ALIGN: Alignment =3D Alignment::new::(); + const BOOTLOADER_DOWN_ALIGN: Alignment =3D Alignment::SZ_4K; let bootloader_size =3D u64::from_safe_cast(gsp_fw.bootloader.= ucode.size()); let bootloader_base =3D (frts.start - bootloader_size).align_d= own(BOOTLOADER_DOWN_ALIGN); =20 @@ -235,7 +235,7 @@ pub(crate) fn new( }; =20 let elf =3D { - const ELF_DOWN_ALIGN: Alignment =3D Alignment::new::(); + const ELF_DOWN_ALIGN: Alignment =3D Alignment::SZ_64K; let elf_size =3D u64::from_safe_cast(gsp_fw.size); let elf_addr =3D (boot.start - elf_size).align_down(ELF_DOWN_A= LIGN); =20 @@ -245,7 +245,7 @@ pub(crate) fn new( let (vf_partition_count, wpr2_heap_size) =3D wpr2_heap_params(chip= set, vgpu_state, fb.end)?; =20 let wpr2_heap =3D { - const WPR2_HEAP_DOWN_ALIGN: Alignment =3D Alignment::new::(); + const WPR2_HEAP_DOWN_ALIGN: Alignment =3D Alignment::SZ_1M; let wpr2_heap_addr =3D elf .start .checked_sub(wpr2_heap_size) @@ -256,7 +256,7 @@ pub(crate) fn new( }; =20 let wpr2 =3D { - const WPR2_DOWN_ALIGN: Alignment =3D Alignment::new::(); + const WPR2_DOWN_ALIGN: Alignment =3D Alignment::SZ_1M; let wpr2_addr =3D (wpr2_heap.start - u64::from_safe_cast(size_= of::())) .align_down(WPR2_DOWN_ALIGN); =20 diff --git a/drivers/gpu/nova-core/fb/hal/gb100.rs b/drivers/gpu/nova-core/= fb/hal/gb100.rs index d9e4d62ae632..b37f11c9a891 100644 --- a/drivers/gpu/nova-core/fb/hal/gb100.rs +++ b/drivers/gpu/nova-core/fb/hal/gb100.rs @@ -82,8 +82,7 @@ fn write_sysmem_flush_page_gb100(bar: Bar0<'_>, addr: Bou= nded) { =20 // This PMU reservation size is r570-specific. pub(super) const fn pmu_reserved_size_gb100() -> u32 { - usize_into_u32::<{ const_align_up(SZ_8M + SZ_16M + SZ_4K, Alignment::n= ew::()).unwrap() }>( - ) + usize_into_u32::<{ const_align_up(SZ_8M + SZ_16M + SZ_4K, Alignment::S= Z_128K).unwrap() }>() } =20 impl FbHal for Gb100 { diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs index ab685fb4168f..6bac5206a836 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -17,7 +17,7 @@ Alignable, Alignment, // }, - sizes::SZ_2M, + sizes::SizeConstants, time::Delta, transmute::{ AsBytes, @@ -257,7 +257,7 @@ fn frts_vidmem_offset(hal: &dyn hal::FspHal, fb_info: &= FbSizes) -> Result { if fb_info.pmu_reserved_size !=3D 0 { offset =3D (offset + u64::from(fb_info.pmu_reserved_size)) // The 2 MiB alignment is r570-specific. - .align_up(Alignment::new::()) + .align_up(Alignment::SZ_2M) .ok_or(EINVAL)?; } =20 diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index 05f54fee6186..6b92e0e0a2a9 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -25,10 +25,7 @@ Alignment, KnownSize, // }, - sizes::{ - SizeConstants, - SZ_128K, // - }, + sizes::SizeConstants, transmute::{ AsBytes, FromBytes, // @@ -63,7 +60,7 @@ enum GspFwHeapParams {} =20 /// Minimum required alignment for the GSP heap. -const GSP_HEAP_ALIGNMENT: Alignment =3D Alignment::new::<{ 1 << 20 }>(); +const GSP_HEAP_ALIGNMENT: Alignment =3D Alignment::SZ_1M; =20 impl GspFwHeapParams { /// Returns the amount of GSP-RM heap memory used during GSP-RM boot a= nd initialization (up to @@ -209,10 +206,7 @@ pub(crate) fn from_ranges<'a>( bootBinOffset: ranges.boot.start, frtsOffset: ranges.frts.start, frtsSize: ranges.frts.len(), - gspFwWprEnd: ranges - .vga_workspace - .start - .align_down(Alignment::new::()), + gspFwWprEnd: ranges.vga_workspace.start.align_down(Alignment::= SZ_128K), gspFwHeapVfPartitionCount: ranges.vf_partition_count, fbSize: ranges.fb.len(), vgaWorkspaceOffset: ranges.vga_workspace.start, diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index c03650ee5226..de46e3399ff8 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -11,7 +11,10 @@ Alignment, // }, register, - sizes::SZ_4K, + sizes::{ + SizeConstants, + SZ_4K, // + }, sync::aref::ARef, }; =20 @@ -282,7 +285,7 @@ fn next(&mut self) -> Option { =20 // Advance to next image (aligned to 512 bytes). self.current_offset +=3D image_size; - self.current_offset =3D self.current_offset.align_up(Alignment::ne= w::<512>())?; + self.current_offset =3D self.current_offset.align_up(Alignment::SZ= _512)?; =20 Some(Ok(full_image)) } diff --git a/rust/kernel/gpu/buddy.rs b/rust/kernel/gpu/buddy.rs index d502ada6ebbd..691bb40629d4 100644 --- a/rust/kernel/gpu/buddy.rs +++ b/rust/kernel/gpu/buddy.rs @@ -31,11 +31,11 @@ //! let buddy =3D GpuBuddy::new(GpuBuddyParams { //! base_offset: 0, //! size: SZ_1G as u64, -//! chunk_size: Alignment::new::(), +//! chunk_size: Alignment::SZ_4K, //! })?; //! //! assert_eq!(buddy.size(), SZ_1G as u64); -//! assert_eq!(buddy.chunk_size(), Alignment::new::()); +//! assert_eq!(buddy.chunk_size(), Alignment::SZ_4K); //! let initial_free =3D buddy.avail(); //! //! // Allocate 16MB. Block lands at the top of the address range. @@ -43,7 +43,7 @@ //! buddy.alloc_blocks( //! GpuBuddyAllocMode::Simple, //! SZ_16M as u64, -//! Alignment::new::(), +//! Alignment::SZ_16M, //! GpuBuddyAllocFlags::default(), //! ), //! GFP_KERNEL, @@ -74,14 +74,14 @@ //! # let buddy =3D GpuBuddy::new(GpuBuddyParams { //! # base_offset: 0, //! # size: SZ_1G as u64, -//! # chunk_size: Alignment::new::(), +//! # chunk_size: Alignment::SZ_4K, //! # })?; //! # let initial_free =3D buddy.avail(); //! let topdown =3D KBox::pin_init( //! buddy.alloc_blocks( //! GpuBuddyAllocMode::TopDown, //! SZ_16M as u64, -//! Alignment::new::(), +//! Alignment::SZ_16M, //! GpuBuddyAllocFlags::default(), //! ), //! GFP_KERNEL, @@ -114,7 +114,7 @@ //! # let buddy =3D GpuBuddy::new(GpuBuddyParams { //! # base_offset: 0, //! # size: SZ_1G as u64, -//! # chunk_size: Alignment::new::(), +//! # chunk_size: Alignment::SZ_4K, //! # })?; //! # let initial_free =3D buddy.avail(); //! // Create fragmentation by allocating 4MB blocks at [0,4M) and [8M,12M= ). @@ -122,7 +122,7 @@ //! buddy.alloc_blocks( //! GpuBuddyAllocMode::Range(0..SZ_4M as u64), //! SZ_4M as u64, -//! Alignment::new::(), +//! Alignment::SZ_4M, //! GpuBuddyAllocFlags::default(), //! ), //! GFP_KERNEL, @@ -133,7 +133,7 @@ //! buddy.alloc_blocks( //! GpuBuddyAllocMode::Range(SZ_8M as u64..(SZ_8M + SZ_4M) as u64), //! SZ_4M as u64, -//! Alignment::new::(), +//! Alignment::SZ_4M, //! GpuBuddyAllocFlags::default(), //! ), //! GFP_KERNEL, @@ -145,7 +145,7 @@ //! buddy.alloc_blocks( //! GpuBuddyAllocMode::Range(0..SZ_16M as u64), //! SZ_8M as u64, -//! Alignment::new::(), +//! Alignment::SZ_4M, //! GpuBuddyAllocFlags::default(), //! ), //! GFP_KERNEL, @@ -178,14 +178,14 @@ //! let small =3D GpuBuddy::new(GpuBuddyParams { //! base_offset: 0, //! size: SZ_16M as u64, -//! chunk_size: Alignment::new::(), +//! chunk_size: Alignment::SZ_4K, //! })?; //! //! let _hole1 =3D KBox::pin_init( //! small.alloc_blocks( //! GpuBuddyAllocMode::Range(0..SZ_4M as u64), //! SZ_4M as u64, -//! Alignment::new::(), +//! Alignment::SZ_4M, //! GpuBuddyAllocFlags::default(), //! ), //! GFP_KERNEL, @@ -195,7 +195,7 @@ //! small.alloc_blocks( //! GpuBuddyAllocMode::Range(SZ_8M as u64..(SZ_8M + SZ_4M) as u64), //! SZ_4M as u64, -//! Alignment::new::(), +//! Alignment::SZ_4M, //! GpuBuddyAllocFlags::default(), //! ), //! GFP_KERNEL, @@ -206,7 +206,7 @@ //! small.alloc_blocks( //! GpuBuddyAllocMode::Simple, //! SZ_8M as u64, -//! Alignment::new::(), +//! Alignment::SZ_4M, //! GpuBuddyAllocFlag::Contiguous, //! ), //! GFP_KERNEL, diff --git a/rust/kernel/io.rs b/rust/kernel/io.rs index 95f46bb75f9e..10fbb27a1998 100644 --- a/rust/kernel/io.rs +++ b/rust/kernel/io.rs @@ -15,7 +15,8 @@ ptr::{ Alignment, KnownSize, // - }, // + }, + sizes::SizeConstants, // }; =20 pub mod mem; @@ -85,7 +86,7 @@ pub fn ptr_try_from_raw_parts_mut(base: *mut u8, size: us= ize) -> Result<*mut Sel impl KnownSize for Region { const MIN_SIZE: usize =3D SIZE; // Alignment of 4 is the most common; different base types can be adde= d once required. - const MIN_ALIGN: Alignment =3D Alignment::new::<4>(); + const MIN_ALIGN: Alignment =3D Alignment::SZ_4; =20 #[inline(always)] fn size(p: *const Self) -> usize { --=20 2.55.0 From nobody Mon Sep 28 03:41:50 2026 Received: from SJ2PR03CU001.outbound.protection.outlook.com (mail-westusazon11012065.outbound.protection.outlook.com [52.101.43.65]) (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 6965F368D5F; Thu, 27 Aug 2026 07:30:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.43.65 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815860; cv=fail; b=tmihqp4ZxDtytuG4DiyCzBbw2lL01Z95q8qzBFBi96DX05FQCB+AW6F5Pn0hDaDg9BaWSD43Mf1/szDIB/gjAuDkwnjTb2rbs9Sy3sfDHFw90BKu2LbdzEW+M1HGwtYbdoTW2y4nI0U2QcaagpAJYn11VBi36X+f+kLHxt8tKyQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815860; c=relaxed/simple; bh=ECQzXYm2OdPs0fGV/CnHZklEL//qnkbtkNYuY/Uwvi0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=WlgWtD9KotENlC1WB9M7tTNSKS0ksKjBz7ZuBC/trxBEcCB7DomAJH0X9PrqiPyIAwbOrlsnSsKSog1eG5xtyovAXhHYrukyRhpwiyEMRgzn1Iek8foNYTPAvqSKq1g0M4QyeX9IGeD4HuSl5bLykj1zzShZhxqMKo3QxOF2loE= 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=D8XgOO57; arc=fail smtp.client-ip=52.101.43.65 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="D8XgOO57" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QSMIysy+TTsIDKRwBuEOtiixG2mesVw0xzZh3lvnAclW0OpfjSuTCiUtDFLR7ljrnfGMDdhvCBPf6cIDo1ax+TXmJRzz7qofOa7iV3dbLHkX2jdYMj3HHzojyo0yp9MOOcYv9pCTHhtbF6BT1Ujza5NT0Fjffd0foDBrdIJpuVG8aXGFj+8zw4DP+TS6+Tia5ae8t4MBodVHM96qkQg3x3vi6njQSBRJjhHqllU8BAsXKvpnW1eabEu0ofuTVeUzVXoPgmcLfqbK3rDqZD5gDhM364BBFvJz5TE2vK9xzYWSYAdde28rppdnFRjSz9ZWuUHB7F0IRUrbPKE9VXP78A== 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=0Y9HWLj8CuT0Jqtkjv0uqNaXQWOeFc2SxMxakslgRLk=; b=hEjMx4nz+OJjkY3Is7gVLpOcMdyZ8bLt2y+xycXXy1+Au/2Y6Ds6Jv7CzT+kM/3uD/j2uUVut1xKiq9WDo5+bk3GXJEQbDzYSUc9+ufc1RQ3jfxUuK0T2VCqy7d98SXJytncdWFhO85ooFB011fWEHhndrYabZnTx4M3dpq6ywWVHE3HbDL5Es0greuA40F26YG/ze7ZxQH0sfQVyuqfuP7axO5apbd1BqSkjmpgYuI3ID8hsr99OhxSiDFY2baAIG3+IeXbk4l6jyGxLeF3cFD0hKSpvHxTHoWSehO49JWB/FxPmACrAPMApIE4ZK763yaAYup1fTaloRdRmfOI1g== 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=0Y9HWLj8CuT0Jqtkjv0uqNaXQWOeFc2SxMxakslgRLk=; b=D8XgOO57XapZRMOIOuaJmYKaRu8rankssPsXPRsOSBnUq4oL9mn0UglOrZkU48aEasyiEK5Eq0hHZzZmHDlc8rrtR4G7N5MwTIlBQRjJha1QGwdPEYfsLOgHZB1nHqhYvooQR63oR+m63wNva6zvUYUnDIiYBslqPNSQ9EWZYzOtUYP4Kh7Ym1o8VoCtv6b53ejZYjoVzvkt2MRahp+O05TPU5sW8js0dSLryT/igysZll2CSR72klnWls+/0tALmF8XTB5gSx1IQzbydSqn3jX0zli1h4LMetxnp5nEPufz5OnCDOfbmuEamlTnwce7fON/FyMhbt9mqDHry0dVlQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by DS0PR12MB999081.namprd12.prod.outlook.com (2603:10b6:8:2ff::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.10; Thu, 27 Aug 2026 07:30:52 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Thu, 27 Aug 2026 07:30:52 +0000 From: Eliot Courtney Date: Thu, 27 Aug 2026 16:28:37 +0900 Subject: [PATCH v8 09/12] rust: bitmap: add contiguous area operations Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260827-chid-v8-9-bc74c77d0214@nvidia.com> References: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> In-Reply-To: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> To: Alice Ryhl , Burak Emir , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , Alexandre Courbot , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: Greg Kroah-Hartman , John Hubbard , Alistair Popple , Timur Tabi , Zhi Wang , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP301CA0036.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:380::20) To IA1PR12MB6411.namprd12.prod.outlook.com (2603:10b6:208:388::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: DS0PR12MB6413:EE_|DS0PR12MB999081:EE_ X-MS-Office365-Filtering-Correlation-Id: 0270a2b0-745e-414c-9acc-08df040d1fb2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|23010399003|7416014|366016|1800799024|376014|56012099006|6133799003|10067099003|18002099003|22082099003|11063799006|5023799004|921020; X-Microsoft-Antispam-Message-Info: UQn6wLbPqSNjGjInojsxgytTprYbXqiXx1qg1PuU2D+XBUCGxLXP+g+vfkMPvf5zDow8QTphOZuu4TcBGUa7FjevZ35ud8cBHVYmSZsxvTmDGbVTDNZ6E9IWpL6/welMl5MbCx/6xkhwFsljy6HjmRSLWOLWIRSmjUbsPiotEUjXD4Az10oaD3El3A5EtUxvPk8/rncwXs+0ztY8U+DPz79amK9+aVVP2NXo4w/2U859L0ZYimlgNSBveqfavLuCwK+HR+pdrioAmtQPdiFHJM3Cd5esAZV3uk2TyyCKbmkypRhui+Gxbnf7ZvMcpsK67DDb2XEePSWAEGZZZH3FcWXP0szFluhE7z2CNZYHvQVVymyz8QoqJ9VGFhUq/skbDCSmKrs0Y+3VZnbj4dGFhQT4wBVirAGHmvVZiwMQsqScEEfLE/47dWmVvu+8cTdcFmvUYZJZaGpFVh5jtb1lJvIfajNRzp/y8MeNZVtFhcga5Fq5mw+tJ8Hn8Fh2f4SJY+HeU4ipmaddWaoJChSVqBE+KIMj0yN1yUaxWqK+pgDvx8d9RDyA76sN4BP6SQ7AQ25fhSXr5XCdsJv9G3962UfAVfhBxsdNvXOdYLQwTPW5viAeu+ShcumdyiTwDB12Yf3tSwBa8r6NlkJIkVauwSY3Tw78sWGQ64RAhT5IH1rgZVRf1b9DXfmCOflKluYk+cuMnyHe2Ag7Lrf5K0kUAA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(23010399003)(7416014)(366016)(1800799024)(376014)(56012099006)(6133799003)(10067099003)(18002099003)(22082099003)(11063799006)(5023799004)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?UUhFckI5TjY3SEF6ZWVVNEZJeDczMHB3cmFGMm81emNqaE40MEIwdkFBVzFp?= =?utf-8?B?emNHK1M1UU1ZZHU4VE1jdGNyYTJlL3ZsOTloTTExVkJweVZlYXpidUlxWERh?= =?utf-8?B?b2Nsd2xBRG9Obkd1ekgzTU5uL0tFUmdxNzZoL21Oc1dJc3ZLaTVtZ1h4Zjl3?= =?utf-8?B?VFo0Q2RoZmJTd0RhSU8yd29uUWpaU1cvK25nZG5vVmVPSmEycU9IQis2bm1I?= =?utf-8?B?ZkUzeUxoTElpMVpCN1k5U1R0eEY0TzNWaDhsdm1FWFcwc3prY1lyVEpvbWwx?= =?utf-8?B?cndZelRRZGJpeTB1SmJ4Wm1HL0FSTGt3T2pENEdrejB2UWNPUURHYmd5M2x6?= =?utf-8?B?WWs4UUgramF2SC9pK0dOZklEUi9hK2tYcHZ4V0hONzZsZzVzWDRKQU9JZlZk?= =?utf-8?B?alA3TzRVVXdhY0tsdE50b0RsSWZ5S3FuTmdzMkYxdDhNNXpybjlMdllkZnR0?= =?utf-8?B?cjczRFJCbDhTSEpycjh5MFB0eVlsdFN4Rjd5Z2hmdTAvVkJrT0wrOWJLZ2Jm?= =?utf-8?B?UEsvbDVaTmEvTlpDVjF5bC9xbzlwYzNZZUpkVDc4RE9RanYyQnFDclk1dTlp?= =?utf-8?B?bUo2Y3YvbnVVU0Z4dHV2dmd6VDBTVUFROFd2dmVpUHpwRW8rZkRvUHBGeUpt?= =?utf-8?B?ZUpnZmppMVZmVUUrM0o5TnppeTBOT0ZyRUhaZi9mb3J1akxTeWEzV1d0T3dt?= =?utf-8?B?OFlBcEJpMDUzMnpwano3Tlc3ajlGT2JGWVljUnFFT28wc2lkV2VSd00wT2Vl?= =?utf-8?B?RGU0Znp1VENFZzRONllIbUpTcHdaUmFmTlNhOTNBUk5uTlBlRU1DRWk1bm9R?= =?utf-8?B?YVhXeElWNjhteGtFWDUyVUJ3QUY1TVlWbmxtRnJWeHhhekVwcVovQUxhSHUv?= =?utf-8?B?aHRpRjFIQmExZEZFWGFpcFNnNWJWS0JKY1k4UU4vUlJlQTJpNFpoUnM5VUg5?= =?utf-8?B?Nzg4c0IrU0RUOUprNlJ6cEZJdmpuNGxLZ3hnbHhzV3dndHZRKzREZy9DYWZ6?= =?utf-8?B?K0xRUERkcGZaZzlHK3Nzc0dCZzdjbGFLamdVd29LcVB4bUs3MUUyUTJKZlFm?= =?utf-8?B?WDRSK3RrdlRDZi90cjR3QVB2MUdtQ3RvWHBOaGpxblZCRmF1UjU0Yi8vOWRR?= =?utf-8?B?QUVFQWQyYVhFYjZqcFFEZHhGNktWQWFhMkc1WVpRR0NuaG04dFRWM0hKTmZ5?= =?utf-8?B?aGZONXNRZ3IxS0lPTThucjNhRGtlL3pDamtYSmZ1TG5uaGpnQjF3cTVLemJ3?= =?utf-8?B?bVBRNHk4MVE0SU1TR1hMTUFkTDZaN1grNmt1eEpwUU9YNFV4UERDUTU5Yks0?= =?utf-8?B?cmFacTJGMEpWczNaL3k4eDgzaXE1NHA5MmFKM0dZNGVWTWFkaGtUeTNyaHpk?= =?utf-8?B?clZROWNQRklvUGFweExsTC9mUWVsUDFiMXNESHk0N2U1eFB1dWk5elZqbGNS?= =?utf-8?B?N0g0Q0owMWFQTm0zYzVFZlBJakdmOFpXN3JKMis0bzR6Rk04VTVoL2xkUHJO?= =?utf-8?B?SjdmM2s1R3BhN1d0NUwwVnNZem44Ukl6SGd0MC9xb1RQZHBGaVRsSkhGSXVX?= =?utf-8?B?QXU0UzlOdEorUGFwaTlpcHg3c2hYTGxuUi9jTWQrZ3VkeTZ2UDlMVWpmSlNE?= =?utf-8?B?QzBjb3d1b1Arbmx6WmdCNFJIeUpFRG1uUzVFZEZ2dlU4L2IySmY1bjFFVDFM?= =?utf-8?B?UUF6RjBqcXQ4ZmxUU1V2MlBtRXFwNnFPeFpsQ0pGcGtGRS9MVm1QVVM3VjM4?= =?utf-8?B?K3BQeDhVUjhMNmxsdU5nSVVkejR1dUFzSXhESEJuWHZndTRrdUhtZjlOcHgr?= =?utf-8?B?Qjlzc2ZsdW5tcWxVT0dUV0dsZVlxVzZ1TGp5MktRZXdQNENYWEtkWDZLeWNZ?= =?utf-8?B?TEl0V0h4bVdvekZzR3ZlN0ErT1hTRE8zRTdCZGErbi9XOG4xKzl3Sm5WSXF3?= =?utf-8?B?VzBVV1pERlVxdm4yMzBhQndxLzNLMDRVQzFZdWdzMks5Q0NXTXZaTlNwc1VW?= =?utf-8?B?Z1dseHliUm5ESnBXcW00L09NWDJkNXVLb0poeTdlb0dBWitYQ3BtQWtPZWYz?= =?utf-8?B?akY4anEzZXFJQzhMcEFpZnpmWmZWUTRUbWs5ZFNxeEhhNytNbjNkejRzK09r?= =?utf-8?B?ZWhUS2FzaG53TWxDNlFPWURQS0d5SFljZy9uejNjSnlIMGo5UzAwOWlYeWw4?= =?utf-8?B?SnVYeE1pTGovTU5wNjRPNzgxeGViTTl1UWVWVE9CYmtIVWNqd3NGWVBLTDJX?= =?utf-8?B?eHNXd2lZcU1Pd0lQNjAzaElITVRCdkZScVVNUGhhUVN6VGZXMHRTaTFKSUZm?= =?utf-8?B?SXN1dzlGeXBxY0dXeCtxMm5SN21YKzdzQVhDcGVkR2liNWRNWHUrVXJGV0Rt?= =?utf-8?Q?PcNDw5WRQr3JNuGzeH3hIKkOlMcowASf0eREnDd/EfX5d?= X-MS-Exchange-AntiSpam-MessageData-1: VOfRQzJGYqZGAg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0270a2b0-745e-414c-9acc-08df040d1fb2 X-MS-Exchange-CrossTenant-AuthSource: IA1PR12MB6411.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2026 07:30:52.7688 (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: pI2MaVYiBaHN5I3HMhi1GDnpSHFxNTqCinBYWK4mpNGB1A21oGV5+Q6vddn7YCtEMAF9jBLPvMvVQdiFX3+9NQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB999081 Add bindings for area operations on bitmaps. Each one is made safe by adding some extra checks compared to the underlying C code (for example, checking bounds) and with additional checks to catch likely erroneous usage if `CONFIG_RUST_BITMAP_HARDENED` is on. Add tests demonstrating the edge cases. Reviewed-by: Burak Emir Signed-off-by: Eliot Courtney --- rust/kernel/bitmap.rs | 241 ++++++++++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 239 insertions(+), 2 deletions(-) diff --git a/rust/kernel/bitmap.rs b/rust/kernel/bitmap.rs index df5505ec7a96..23c2b43a98ac 100644 --- a/rust/kernel/bitmap.rs +++ b/rust/kernel/bitmap.rs @@ -10,7 +10,11 @@ use crate::bindings; #[cfg(not(CONFIG_RUST_BITMAP_HARDENED))] use crate::pr_err; -use core::ptr::NonNull; +use crate::ptr::Alignment; +use core::{ + num::NonZero, + ptr::NonNull, // +}; =20 /// Represents a C bitmap. Wraps underlying C bitmap API. /// @@ -525,13 +529,159 @@ pub fn next_zero_bit(&self, start: usize) -> Option<= usize> { Some(index) } } + + /// Finds a contiguous area of `nbits` zero bits at or after `start`, = where the area plus + /// `align_offset` is aligned to `align`. + /// + /// Returns the bit index of the start of the area, or [`None`] if no = such area fitting in + /// the bitmap exists. + /// + /// The returned index plus `align_offset` is a multiple of `align`. + /// + /// # Panics + /// + /// Panics if CONFIG_RUST_BITMAP_HARDENED is enabled and `start` is ou= t of bounds. + #[inline] + pub fn next_zero_area_off( + &self, + start: usize, + nbits: NonZero, + align: Alignment, + align_offset: usize, + ) -> Option { + bitmap_assert!( + start < self.len(), + "`start` must be < {}, was {}", + self.len(), + start + ); + + let nr =3D u32::try_from(nbits.get()).ok()?; + let align_mask =3D align.as_usize() - 1; + + // The C alignment and end arithmetic must not overflow, or it can= read out of bounds. + // Overflow is only possible on 32-bit. + #[cfg(not(CONFIG_64BIT))] + align_mask + .checked_add(self.len())? + .checked_add(nbits.get())?; + + // SAFETY: `bitmap_find_next_zero_area_off` is safe to use with an= out of bounds `start` + // value and, given the overflow check above, never reads beyond `= self.len()` bits. + let index =3D unsafe { + bindings::bitmap_find_next_zero_area_off( + self.as_ptr().cast_mut(), + self.len(), + start, + nr, + align_mask, + align_offset, + ) + }; + + (index < self.len()).then_some(index) + } + + /// Finds a contiguous area of `nbits` zero bits at or after `start`, = aligned to `align`. + /// + /// Returns the bit index of the start of the area, or [`None`] if no = such area fitting in + /// the bitmap exists. + /// + /// The returned index is a multiple of `align`. + /// + /// # Panics + /// + /// Panics if CONFIG_RUST_BITMAP_HARDENED is enabled and `start` is ou= t of bounds. + /// + /// # Examples + /// + /// ``` + /// use kernel::{ + /// alloc::{AllocError, flags::GFP_KERNEL}, + /// bitmap::BitmapVec, + /// ptr::Alignment, + /// sizes::SizeConstants, // + /// }; + /// + /// let mut b =3D BitmapVec::new(64, GFP_KERNEL)?; + /// + /// assert_eq!(Some(0), b.next_zero_area(0, cv!(8), Alignment::SZ_1)); + /// b.set(0, cv!(5)); + /// assert_eq!(Some(5), b.next_zero_area(0, cv!(8), Alignment::SZ_1)); + /// assert_eq!(Some(8), b.next_zero_area(0, cv!(8), Alignment::SZ_8)); + /// assert_eq!(None, b.next_zero_area(0, cv!(65), Alignment::SZ_1)); + /// # Ok::<(), AllocError>(()) + /// ``` + #[inline] + pub fn next_zero_area( + &self, + start: usize, + nbits: NonZero, + align: Alignment, + ) -> Option { + self.next_zero_area_off(start, nbits, align, 0) + } + + /// Sets a contiguous area of `nbits` bits starting at `start`. + /// + /// If CONFIG_RUST_BITMAP_HARDENED is not enabled and the area `start.= .start + nbits` is out of + /// bounds, does nothing. + /// + /// # Panics + /// + /// Panics if CONFIG_RUST_BITMAP_HARDENED is enabled and the area `sta= rt..start + nbits` is out + /// of bounds. + #[inline] + pub fn set(&mut self, start: usize, nbits: NonZero) { + bitmap_assert_return!( + start + .checked_add(nbits.get()) + .is_some_and(|end| end <=3D self.len()), + "Area `start..start + nbits` ({}..{}) must be within bounds {}= ", + start, + start.saturating_add(nbits.get()), + self.len() + ); + // SAFETY: The area `start..start + nbits` is within bounds and a = `Bitmap` is at most + // `i32::MAX` bits, so the casts are lossless. + unsafe { bindings::__bitmap_set(self.as_mut_ptr(), start as u32, n= bits.get() as i32) }; + } + + /// Clears a contiguous area of `nbits` bits starting at `start`. + /// + /// If CONFIG_RUST_BITMAP_HARDENED is not enabled and the area `start.= .start + nbits` is out of + /// bounds, does nothing. + /// + /// # Panics + /// + /// Panics if CONFIG_RUST_BITMAP_HARDENED is enabled and the area `sta= rt..start + nbits` is out + /// of bounds. + #[inline] + pub fn clear(&mut self, start: usize, nbits: NonZero) { + bitmap_assert_return!( + start + .checked_add(nbits.get()) + .is_some_and(|end| end <=3D self.len()), + "Area `start..start + nbits` ({}..{}) must be within bounds {}= ", + start, + start.saturating_add(nbits.get()), + self.len() + ); + // SAFETY: The area `start..start + nbits` is within bounds and a = `Bitmap` is at most + // `i32::MAX` bits, so the casts are lossless. + unsafe { bindings::__bitmap_clear(self.as_mut_ptr(), start as u32,= nbits.get() as i32) }; + } } =20 #[cfg(CONFIG_RUST_BITMAP_KUNIT_TEST)] #[macros::kunit_tests(rust_kernel_bitmap)] mod tests { use super::*; - use kernel::alloc::flags::GFP_KERNEL; + use kernel::{ + alloc::flags::GFP_KERNEL, + num::cv, + sizes::SizeConstants, // + }; =20 #[test] fn bitmap_borrow() { @@ -642,4 +792,91 @@ fn bitmap_copy_and_extend() -> Result<(), AllocError> { assert_eq!(Some(17), long_bitmap.last_bit()); Ok(()) } + + #[test] + fn bitmap_area_set_clear_find() -> Result<(), AllocError> { + let mut b =3D BitmapVec::new(128, GFP_KERNEL)?; + + assert_eq!(Some(0), b.next_zero_area(0, cv!(5), Alignment::SZ_1)); + b.set(0, cv!(5)); // Now contains {[0, 5)}. + + assert_eq!(Some(0), b.next_bit(0)); + assert_eq!(Some(4), b.next_bit(4)); + assert_eq!(Some(5), b.next_zero_bit(0)); + assert_eq!(Some(5), b.next_zero_area(0, cv!(5), Alignment::SZ_1)); + assert_eq!(Some(8), b.next_zero_area(0, cv!(5), Alignment::SZ_8)); + + b.set(8, cv!(8)); // Now contains {[0, 5), [8, 16)}. + assert_eq!(Some(16), b.next_zero_area(0, cv!(4), Alignment::SZ_16)= ); + assert_eq!(Some(16), b.next_zero_area(0, cv!(4), Alignment::SZ_1)); + + b.clear(0, cv!(5)); // Now contains {[8, 16)}. + assert_eq!(Some(0), b.next_zero_area(0, cv!(5), Alignment::SZ_1)); + assert_eq!(Some(8), b.next_bit(0)); + assert_eq!(Some(15), b.last_bit()); + + b.set(60, cv!(10)); // Now contains {[8, 16), [60, 70)}. + assert_eq!(Some(60), b.next_bit(16)); + assert_eq!(Some(69), b.last_bit()); + assert_eq!(Some(16), b.next_zero_area(9, cv!(40), Alignment::SZ_1)= ); + assert_eq!(Some(70), b.next_zero_area(0, cv!(45), Alignment::SZ_1)= ); + + b.clear(62, cv!(6)); // Now contains {[8, 16), [60, 62), [68, 70)}. + assert_eq!(Some(62), b.next_zero_area(60, cv!(6), Alignment::SZ_1)= ); + assert_eq!(Some(61), b.next_bit(61)); + assert_eq!(Some(69), b.last_bit()); + Ok(()) + } + + #[test] + fn bitmap_area_exhaustion() -> Result<(), AllocError> { + let mut b =3D BitmapVec::new(64, GFP_KERNEL)?; + + assert_eq!(None, b.next_zero_area(0, cv!(65), Alignment::SZ_1)); + assert_eq!(None, b.next_zero_area(0, cv!(usize::MAX), Alignment::S= Z_1)); + assert_eq!(None, b.next_zero_area(1, cv!(usize::MAX), Alignment::S= Z_1)); + + b.set_bit(0); // Now contains {[0, 1)}. + assert_eq!(None, b.next_zero_area(0, cv!(usize::MAX), Alignment::S= Z_1)); + + b.set(0, cv!(61)); // Now contains {[0, 61)}. + assert_eq!(None, b.next_zero_area(0, cv!(4), Alignment::SZ_1)); + assert_eq!(Some(61), b.next_zero_area(0, cv!(3), Alignment::SZ_1)); + assert_eq!(None, b.next_zero_area(0, cv!(1), Alignment::SZ_64)); + Ok(()) + } + + #[test] + fn bitmap_area_off() -> Result<(), AllocError> { + let mut b =3D BitmapVec::new(64, GFP_KERNEL)?; + + b.set(0, cv!(5)); // Now contains {[0, 5)}. + + // The area plus align_offset starts at a multiple of the alignmen= t. + assert_eq!(Some(7), b.next_zero_area_off(0, cv!(8), Alignment::SZ_= 8, 1)); + assert_eq!(Some(5), b.next_zero_area_off(0, cv!(8), Alignment::SZ_= 8, 3)); + + // A zero offset behaves like next_zero_area(). + assert_eq!( + b.next_zero_area(0, cv!(8), Alignment::SZ_8), + b.next_zero_area_off(0, cv!(8), Alignment::SZ_8, 0) + ); + Ok(()) + } + + #[test] + #[cfg(not(CONFIG_RUST_BITMAP_HARDENED))] + fn owned_bitmap_area_out_of_bounds() -> Result<(), AllocError> { + let mut b =3D BitmapVec::new(64, GFP_KERNEL)?; + + // Should be ignored since out of bounds. + b.set(64, cv!(4)); + b.set(62, cv!(8)); + b.set(usize::MAX, cv!(1)); + b.clear(usize::MAX, cv!(1)); + b.clear(2048, cv!(8)); + assert_eq!(None, b.next_bit(0)); + assert_eq!(None, b.next_zero_area(64, cv!(1), Alignment::SZ_1)); + Ok(()) + } } --=20 2.55.0 From nobody Mon Sep 28 03:41:50 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012029.outbound.protection.outlook.com [52.101.53.29]) (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 740A4365A03; Thu, 27 Aug 2026 07:31:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.29 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815863; cv=fail; b=LD3Dsux5Pu5zbSpFP/CNOLv5DvnuCsAzXxbAaVfRbniICefQMaPuQ6drP64zCovix/WLACDoS428an5QqseLqJg5WSfqIb6lpozJV4HqxWGlEzxqQjjIX+ElzeKBrubJOHRxpiVt+D7gHbockxJvCe/Gx1rHGkVp4w5Jz9SQmgs= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815863; c=relaxed/simple; bh=cUCr4l9xWhu9MDMPI8V6D8oRbLLJtbKqZad/kXMkW1g=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=RtQxD8v2MzPzzfsNmyQnhGzOhE10BlrHUm38R67p7yBF5DvPIcO5RuT8cPvtV5Ik+aOk6PsnDbYuA1Vc3btOlzi7iP3AEHNZ5pb1zIO0+EoQxBkZfPX4kKIbutW162QLZAQg30IUl6tOJ5/IwV9btVr1csuroWk/KBepqCmrs3M= 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=TJGaM5ds; arc=fail smtp.client-ip=52.101.53.29 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="TJGaM5ds" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sMRcme4ShwSDS74qckcbVeWoLY/+tQ9KGPWhhoD8J/XiTze+33ybUko3yb6NiYYFm0a9/ytXptHk40ozDHwkQBRCj5jFMZguKC8fNZLOvUOMoo+UslPjU1a68XkVZNmmbVbZF9QomxdxzfbMYmbC0aspdMh9GQuf5ES1U+9zvggWpaMp+p4XE0O79iq7a2KVFOv0zeMhs1QsJTIFB8eFUgEc1bz+h08oeZYAlz5hvg/mXgl8HYJSYXSUJoUugCf4fLDIeoUz6646cbv3QSL2GqFIAZ/JMBxKy5yCXyF3fnsLmJZqKxXy4ZgwfLbE13vtd9/95PazHxx9TmUAhn1MGA== 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=9YtbUKc377qG17bT8z4QPM/Yq7iyKZdime++Sy7FNDk=; b=rjPyZJ85GmfkcJ2uc2ZgQVZmxRuGeL7dff4GjZ8DEjaGx9ER5zJYaGsNlPWQe/CG3rSIuto0qmULnVexlzx+0ZT7YeP8OWSCI10ZZUlAZ2Yv4rJ67/qbgbkFN39TIlzPOGWm7b8ww6FcpXXzR23A2TclFtZ48dchvQqDdutay25eYbjG/pdeXEcLK+5+7VDvpNliYZypZtE9VShmHvebVfprJQdBIFnC+qNWsLU+B4pNn0lf7rEApRW89fdeJ8PS/AWiYpcIQZJ33qpVtk7kniZijs1jKHaFI4penz9fCZbizOXmRF2qtYHCBxpEaSoZkxV53S1xZGUKwQGZ06LsNg== 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=9YtbUKc377qG17bT8z4QPM/Yq7iyKZdime++Sy7FNDk=; b=TJGaM5dsimXm6V0b5Sg+gLwIkK8vLnuD3e/5Z2uCoV2J1WZSnbby3+3d51kUNUFsAdTwCfSHcF7Mloo8amrW+coHE40zNphNTMOtpwgps3XhZjiT/C0/jK0Lbz82kZIFh8k/XuQYY6lvwe5sEwcd8lGA8DqYwnYAq32F6b1BesPYSzgCHHiqFwqa4sZg9iWtO7lnGlYdwfE1sSsWXoBDh4p27Dc37YahHPdwWpxcku+8ErB2r/qo9cAJNFwuKinJDDcp8ACfrIBLV5BHkYoVK5fl9ZhHXixVU/r6e6i2H/x9CER9dlvt6ZkncueEL4BdRo/h3f2szierIogS7/7+Bw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by DS0PR12MB999081.namprd12.prod.outlook.com (2603:10b6:8:2ff::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.10; Thu, 27 Aug 2026 07:30:57 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Thu, 27 Aug 2026 07:30:57 +0000 From: Eliot Courtney Date: Thu, 27 Aug 2026 16:28:38 +0900 Subject: [PATCH v8 10/12] rust: id_pool: add contiguous ID reservation Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260827-chid-v8-10-bc74c77d0214@nvidia.com> References: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> In-Reply-To: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> To: Alice Ryhl , Burak Emir , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , Alexandre Courbot , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: Greg Kroah-Hartman , John Hubbard , Alistair Popple , Timur Tabi , Zhi Wang , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP301CA0032.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:380::15) To IA1PR12MB6411.namprd12.prod.outlook.com (2603:10b6:208:388::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: DS0PR12MB6413:EE_|DS0PR12MB999081:EE_ X-MS-Office365-Filtering-Correlation-Id: 9971b4d9-e63b-4d1a-bb63-08df040d224d X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|23010399003|7416014|366016|1800799024|376014|56012099006|10067099003|18002099003|22082099003|11063799006|921020; X-Microsoft-Antispam-Message-Info: zKjzlknimXNUcRo/cQqfySNPEOQnLhkBUKxDpZ8l9DHiwAake3bye+VtE8XvnqubuNQSKsQ/JeUPiKHEXrqShuxzZlO/s+/g3+FmDxdu5orzuTTDg/OXdsnT/5JZ/2G1PKe211yGk2dyobD/y5L0P+BAKarO7S1pQcxJo2yzA/dxtZcp85CI0aX+V+ING92/BW0H8t5Ko3PNpNp/TpPlLKRt9ja14ufF9WHc15/5tbzsSfhQw4fsAxygGcSKclRduKHJKSQdCo4XhFmsDl6fGW5hXrwP+BbfvGwCVJQKl2SUZkhG2NA/lfPC0nBay5Q+FD4NLLxAje1KdCfoJTK5DrgDZ00LAZrClo31ch5KypikdHnrOR0qtNBvrjvpiSamqSzYmLv+XzUKVM10Rc11/2VPpJRCQK2rbra40HT4P+3YfSvy6PKy7JU1sqvNcTnLR3dto7tH2Uq/DEzoVWlc26Klu0xLbtvAZwJPMOoe/MG9ilz4wQwGbI48EgVaS4wHDqJa+gKYR4LAjbr7IJsOMNwqIPEK6qKlsG6O9X0lu5Y9ExBkLdQPfajWK2KPDSs9b8SuY/vW48OHuBG+ZM4kKjYeQtD3rby/EJ/WprUz8b6edLIiwmtzy8r2jKYwUvtpWWLt9mO30qQmTmssL8JJTzYcv5Lnv2nsinL1KYhp/9Ee0X0pJfUt9U6GmAfaINLSxZv+16KffuJhdXXTmwqkCg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(23010399003)(7416014)(366016)(1800799024)(376014)(56012099006)(10067099003)(18002099003)(22082099003)(11063799006)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZkhwaGNGS0VYcXF5RG5tVHFOT3Y2UG1YTVk0UEU5d1pIeWNLL3ppUCtwNXRx?= =?utf-8?B?enduUGJLSWdRYlJ1SkwyczVRSUNLRVFydVpQSCtzWHVLUzNiUmY4SU84NmRK?= =?utf-8?B?SDNxRWVRUS9DNW9rSTR0cG1OUW5PMktucE0va3lWbWZMME1MamtTeXlTSjlU?= =?utf-8?B?Z09XRnQ3SWVPRzdvZzAwdDEwMnFlcGh4VWZKRUZiVmw4VXFuUFdEMFRjNC9E?= =?utf-8?B?Nysvd1pLZ0dna1dXWGF3ZWtpY05IeDltN1BTYmIrblhIejhxbGdtNW9sWnhD?= =?utf-8?B?UThjTUE5QnhOejVBRE1sOUpXTHIvRms2YXIyRm40dGtTUnU0Y0tXdWNhN3Z5?= =?utf-8?B?bnB1SDFqTkROVXJFQ3NlY2p6WURlT2xZMjY4SUVlcVJneVI3ZVlIZkIxT2Ju?= =?utf-8?B?RkpQaUQzTFVoT2VOaEdzQ1FoUUNNZFhKTGFLcUdiZjZQVi94dnFXT0JKUkpS?= =?utf-8?B?dDJuaWxEZDFhTk5oQjEyQ2hPclBuY0tPZkt5emI4RkFOY1RFeUErMTZWTkJt?= =?utf-8?B?eDBrTldCbGxWUjVzSGx0Ym03b2lMbjhoeDBWYk8ydk1pMXhqN2dHY3NFaE5h?= =?utf-8?B?aDEzaHVhQ2d4N0QvTVVQT29YVTJndWlEZ0tFUyt4Y3pXQzFlbDhWNTg5UXhq?= =?utf-8?B?TnRKREJrUWpxY0lLSFBuRjQwU1Jac3Znc2JoTTNnbEpKZzIzcEpaUDU4ZE1i?= =?utf-8?B?MllTazB2R0lCZ1Rvcy9mM2F3RkNVRlB0NU1ucUJkZFRrOTFjZHhsOTlOV1Jn?= =?utf-8?B?VnRrZ00vRVBVaDN2eFlIQUVGWHh4Wi9BclRQQTJhejBQdW1UWGhCRjlSQUNK?= =?utf-8?B?T3FveDNQYS9CRDVuc0ZmanRlQ2lOamdWZjAzdHNHY0Y2a01ZRXlGWWZUZnpq?= =?utf-8?B?YUdsdnQramlyMWZLeGZSNEIzQ1BKNU4xV2pUZzQyV2NQZ2ZJREN3TEM1UjlV?= =?utf-8?B?aUkrWCtCZkpFbE5OLzVPQWxBWUlwYjk2bmVKalNDWFFoSWZPY0J2ZWZuNjB3?= =?utf-8?B?VFdBQ2h1UnZnWlJGSUhFMEFINUhQZjVOODYrQXEyMVdCcXRZdmhmZUp3Rm9i?= =?utf-8?B?aVVMcklOK2Zkck5mNnRtei9QeFZwQWYxeHJWUWhPUDVZZHBaS3BQVUx4dWZw?= =?utf-8?B?bVEydlgzWlliSmJwQ2lDYnhYK2s1NkhMRHN0Ry9OT2M3Nk50M01Wb0pBaDkv?= =?utf-8?B?UjYrVW1Eak1PdzU4OHpIYTZPSEhrMDR1VHdBTzgzNS9tR1NWOHZEWjJkZjYv?= =?utf-8?B?ZU9PWkNQWHh1aTFMRXV3NmNueTNxSzRKNmVrNXNXa2lyQXQ2ZGJUWksrY3lM?= =?utf-8?B?UHVOTHNZY2lCczVvWmowODhlQW5pdE15Y2FMRVRzL2d0Q2VqSGpBOWlWMk9K?= =?utf-8?B?VW9kOTdJNG1RQnE1UFlJVitvbzBzdVFQQktXN0ZGbElHQWpYOWZpUFpDRWl1?= =?utf-8?B?WDdyWHYyVmQ0bU5Pb2dqdG1XOVRsRWtHVS9MVmQyakJ5K2Y5Nmh6alFQRmxz?= =?utf-8?B?VWZmdjBJUm9DdDNpNlZMMXVNR1VMcHFyMnhIc2hWN3dkUTFwUEFRU3NMbHRt?= =?utf-8?B?RHdkY1RjK0V0YTFkamZuQ0Nqd1lHdjFmaVlneEIrbGtnM2ZETm5PaE85SDhp?= =?utf-8?B?aVNXM1BCTDgvOVZqUy95STgxMmxJYkhZd1MweTBPTGhBQmVmRmc5MlIrRHc1?= =?utf-8?B?SWQ5cXQxSzhPcFVNZzVrTEJHL2x3NWtqWlpyMUUyczFzUzN2Z1ZSdEJxMnlT?= =?utf-8?B?OW5lRllZVVpLaStBWStOVHNxbjBqenB4dTFWOUdqRmluS2RZem1YN3paRWtz?= =?utf-8?B?dHVNY1NOMDYxMm1KbDVHNlYvTmxnR2tweGtNb3NPenlzd281RCtyRkhZU2RE?= =?utf-8?B?bDZGMGRJTXJEOHpYV2JXY1VDWURkODB3QnE5c1RQMG03T0MrY3dPSzhNMGds?= =?utf-8?B?YTBXUjA3bUxlYklvSWhva3RYVkN2V1h6Y0NZc1FGOFRzc05QN1hTUldqZ0dD?= =?utf-8?B?dCt1b1gycDRJUjl2eVFJdHFTWGQ0d1hiZmFkallLMEx2MkRZdXNROG1vTUxC?= =?utf-8?B?QmRubE9aWkMxQytsNlpaME9aVU55Z0V4MFdsbXVnYUVvNXBpZzhCdEdEd0Ny?= =?utf-8?B?MFk3WmxXbjBuQkZMY2lvUVlqT3dGcDFKalNzT3RmL1o3TjV5cVp3NThVS0Rt?= =?utf-8?B?MHNlT1duczQ1K0xyWENBNDNLWUJlY2wrRktsZDc0b0FDanM4M2JJcjN5cUQ5?= =?utf-8?B?bERLNDgvK2p2cEhPWEk2QTdtb1Q1ckdoaWhGZDk4bXZmMDEyWTc0T0dMUldO?= =?utf-8?B?UC9JV2RkdW5pakRWSTlhK2V3SC9jOTZvUi90MzUvNFkxV3oreGpTd0YzeFVY?= =?utf-8?Q?XCueVtD6bTBNcfhDz1pdCNtafRoHGKwmYC/u4GGZVoOma?= X-MS-Exchange-AntiSpam-MessageData-1: z3Zpr4eKLIXK1A== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9971b4d9-e63b-4d1a-bb63-08df040d224d X-MS-Exchange-CrossTenant-AuthSource: IA1PR12MB6411.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2026 07:30:57.1515 (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: o+lQ3U5glP04+qIIpL5NiLGYUfI1mUG6r3mfC5tOUU2I5MbOyFiKXOmv/a+5Rko19rcFAHqOWkLad17ydllGHA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB999081 Add `IdPool::reserve_ids` which allocates a contiguous range with the given offset, count, and alignment. Reviewed-by: Burak Emir Reviewed-by: Alexandre Courbot Signed-off-by: Eliot Courtney --- rust/kernel/id_pool.rs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/rust/kernel/id_pool.rs b/rust/kernel/id_pool.rs index 384753fe0e44..06a4c71c4c6c 100644 --- a/rust/kernel/id_pool.rs +++ b/rust/kernel/id_pool.rs @@ -4,8 +4,14 @@ =20 //! Rust API for an ID pool backed by a [`BitmapVec`]. =20 +use core::{ + num::NonZero, + ops::Range, // +}; + use crate::alloc::{AllocError, Flags}; use crate::bitmap::BitmapVec; +use crate::ptr::Alignment; =20 /// Represents a dynamic ID pool backed by a [`BitmapVec`]. /// @@ -240,6 +246,32 @@ pub fn find_unused_id(&mut self, offset: usize) -> Opt= ion> { pub fn release_id(&mut self, id: usize) { self.map.clear_bit(id); } + + /// Reserves a contiguous area of `count` IDs at or after `offset`. + /// + /// The start of the returned area is a multiple of `align`. + /// + /// Returns the reserved range upon success, or [`None`] if no such ar= ea could be found. + #[inline] + #[must_use] + pub fn reserve_ids( + &mut self, + offset: usize, + count: NonZero, + align: Alignment, + ) -> Option> { + let start =3D self.map.next_zero_area(offset, count, align)?; + self.map.set(start, count); + Some(start..start + count.get()) + } + + /// Releases a contiguous area of IDs. + #[inline] + pub fn release_ids(&mut self, range: &Range) { + if let Some(nbits) =3D NonZero::new(range.len()) { + self.map.clear(range.start, nbits); + } + } } =20 /// Represents an unused id in an [`IdPool`]. --=20 2.55.0 From nobody Mon Sep 28 03:41:50 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010013.outbound.protection.outlook.com [40.93.198.13]) (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 A9CD1368D5F; Thu, 27 Aug 2026 07:31:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.13 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815868; cv=fail; b=lG436PpJNYt+Dvo8q5/vMDKxoR2U72ycupFTpIpy/CCIF9g6s1s93ITZ4EckgSvP41YFqr/8wvyEqvVDBDtCyZ260FMjyhx66qIZzkfN2YTWJVK0xZiNWFsPY0LP3AQ88Ct32/8SHP8/IHMWVjX5tKhPeKsEzC0ctAyXu16IveE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815868; c=relaxed/simple; bh=nl7mCwOBmICBoFZtcP3vmqhL+uCXh5YjbqjBhPFRvbA=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=gW89GtaXfdxKLV+75zz4wAPf+bDwsVBx0JFz1BFhstzGTRsjzAIB86QsN1DTBmCpOsxa2CCxoXVmysqACj8lYOX4x2K8xUCrO+KZ9NSfsK+yrrGXPe6DKVLvoSL5FeRtGzdJKeDyThr1i3r3z65ruiLuNyuycJwmHx+VhBkT28s= 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=r2TEX6h5; arc=fail smtp.client-ip=40.93.198.13 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="r2TEX6h5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=FbsQyRZpOzXZgAtkAGzXYbZYnA+vCa8/f+b+Y79PyV2KkUVEURVnDpcPdc95SJ+vRE0i+dx77nNfhpBNAGy9w8Y0Qi8KKd8Pktah37pxyllgCoN/5cKR7cMV05ja4TyKzp2qFcobxTZ8dJLk/LMQI5NBAeK/RJtbdaxKsZzL6u9xib/oSyK/Md0gZWVO6BwOoBMU475UEkSCP19AaAzNRE2hvWC4NEsQ7PWreuW5A6FNPvVc3a+f1boFWY9/T921jrtEylq/tarH4fbI49IVS2r7O6G50L5GNM0ejAJymGgtkhHxvq77IA6wsxAAc8jXCj0XbPPU+f24e1Ryaidq8Q== 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=GShghB4oH4kGkFqqHFxF8ES1DBSXWhRVIa008filZOQ=; b=h+6nBVBgf6kiR79KEY7oOUXK/zDbFZqHUfJg2/Wbs/hyiQRi9rZHkXmqgC2tHFIu1Gezlatdz9s7Fg6ivwnEvHndae9FLnct4tK1aJJq7BVQIWYIzadzy7BopQVRBzDWmFoEyvMY4svbOTaqR32Xp8hPgGIPXb3xN+Spt7vzAvO7/CyZWXA4tB61s/n+hYRieNKQxl/hUA7qEl8dwn/nWDU75Jqd/KiB0eJkTlBer+ZNDJ2qW3ATcljLE5XbZqKwnXAlXG7qb2J/KjTGZJDe52x2EAfL2xscSyGe1et90eVlXZfpU+0aVk78Zwl8K9zYnfWtGiES1SEfwz1PF5sqzA== 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=GShghB4oH4kGkFqqHFxF8ES1DBSXWhRVIa008filZOQ=; b=r2TEX6h5vlAtv/YEgXDqGfovNpN1K0Sgu1BwUvvatnMXbzEaEo0rfOsdp9fwChoiiZAqbH8USWGohPKKxRD+D0g/K+GSzGhGPi+RwNddq3rX/HT/lR6Sa3DA/ISPN4dUEOZWLGIjlGg1MeeLn9GrH3sVXIv+YX9Hb1SYW47eb7YwGjBlDYGESFG1Dx/kDDRmN9cjAg16r/2B7VU6QM1cMFHHnP3RISAneTSkHVSu0E4DHJzlGkCkX4kbsmheZT6pOjbvSRBxNdtV+NwaImYEqY7VhIviALhsDxPB+UpTfDAahSy0UsKz0DyNHUylaeOVCKxwBA60IVmdBJBIqZNWDA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by DS0PR12MB999081.namprd12.prod.outlook.com (2603:10b6:8:2ff::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.10; Thu, 27 Aug 2026 07:31:01 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Thu, 27 Aug 2026 07:31:01 +0000 From: Eliot Courtney Date: Thu, 27 Aug 2026 16:28:39 +0900 Subject: [PATCH v8 11/12] rust: id_pool: do not round capacity up to BitmapVec::MAX_INLINE_LEN Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260827-chid-v8-11-bc74c77d0214@nvidia.com> References: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> In-Reply-To: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> To: Alice Ryhl , Burak Emir , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , Alexandre Courbot , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: Greg Kroah-Hartman , John Hubbard , Alistair Popple , Timur Tabi , Zhi Wang , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP301CA0020.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:381::13) To DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) 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: DS0PR12MB6413:EE_|DS0PR12MB999081:EE_ X-MS-Office365-Filtering-Correlation-Id: f47c4f33-0fd0-42da-700e-08df040d24f2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|23010399003|7416014|366016|1800799024|376014|56012099006|10067099003|18002099003|22082099003|11063799006|921020; X-Microsoft-Antispam-Message-Info: Nz1KUwXXkBGidn0v8w/8tFaJfn67YTamoi7FbmnMm5C4qjMZUqxifG3vuuQFaQL1eStKiT+XaNW0OeIKJZVipj5blaUbvBsu5D8yFPeinaFLNUDV7drpQW/EP6PtU82/g92ajWq9/LjnKZ9fZRgf/7fzwaLNW7XAs1McmHNKXGGG55b/eYIVzxqF/nl6asDdxHrrdinVrlbErSJINwEw0/XlfHAa11boC+CoUk2tYmeUXXLYv3H53B1c62xVxyLM3akNIRPQ0iIBX+6E9rxSV8X/RsiyQfwbFrdkM3QGPQsbjamhHX7QveiAk/7uTvHBMEwzD0dnLIFaZsGYNRJN1/YtAGPfcbAqdrN3ZhfVHpfLq1Ar3eg81vk9CWZode3vR2RFkUB3cuuGSMKuD9lAmw02lhI4L7RG8eGmAIUAez5d3RceMVAdwDSo4s/2Rgw8E+vChh69IPgOxsjnbvWLi8j5HYLIQfTcpDVkeXQHgO4/B23cYbe/VVOtpltOecfuAPXklAhLk3P/zgEFExiSOa/iJG3MHhf0DA4hBD7Qji/6SXhyHvLfZmJCMGPs6ieaiL0BuRrp9vS7/ptlgZ7vNCKPmZhFijYtLFy78O1mS8FLzyXjoryGtD3ZQZd7hq3Z1iwPwXxA81WE7712ee/InXivfB0YfQjKRoHUv35skUrsFgtysnVBYAFzwxzhaQhzTGv3WrrUDCDIZfb7tItoBw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(23010399003)(7416014)(366016)(1800799024)(376014)(56012099006)(10067099003)(18002099003)(22082099003)(11063799006)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VXRKeFV5NnhOVjlYT3pCZ2J1eXdrZW0wRzI4dGx6QUpHL2xQUzBXM1M1aC8y?= =?utf-8?B?TTJVbHN3emc4YVg0SzROWWRaMFdxS1FjVGhVVXQyWW9OM1dGR2ZnZnE1OW5Y?= =?utf-8?B?akRwaEVhQkFMUW9rNE9tbExBclgwdDFQZ1pMZ1c4VkhTV213MzNIbTdHNDBs?= =?utf-8?B?SnlQTzdYNWJNZ213UXdPVUoyTDg2bVJRNEZUV0gxekV4TDVEb1gzaityc2NE?= =?utf-8?B?T3J5S1g5d3dNUFRwa3NQTE95djQwVUwrVUQyMzIxeVVXbHR5SS80VzY1WU85?= =?utf-8?B?ZFhPdnJPbDJVTFErNEMrdFF6dTBFaXNHcnRYY2dta0J1UkFQVUxmK3lQbjYw?= =?utf-8?B?c1JXcGgxcGlmaVVGdFFOK1RSQm5URTlJNUx2VVpjOFZCb3VYdi9VdXhBUHVv?= =?utf-8?B?ZDJCYkhHS3B0eVdWVkZ5ZHJZU0M2YXYxNjFFK3U5N25Xdi9GOEQ4TUVDRXBR?= =?utf-8?B?K2ZwNXh4T01NeHhjNG9SenBNL2hqZWxBVmVsTkJ0VkV5VGJ5OXZGdWJMT1hF?= =?utf-8?B?ckVqVFlPam5na05FWnEzZ2plR1BtRXFsLzZxNkNpaks4NWh1WmYraDFEdm9X?= =?utf-8?B?ckdaUXFmK2plcEtySXBmcFExZ1hCbXdSMks1R1p3aFY3YStLK3ZYZ3FZSDZz?= =?utf-8?B?Q2tqbTJTY0MxN2RhTVgrcjR5VkIvckJVNEp4dmRHRmVTcTk2aTlpRS9VK1pY?= =?utf-8?B?a1d1QjlRVzVFaDRTczlzNThCdkJ2ek1QZkpISGQ3djhRejluQUZjK28rVkpr?= =?utf-8?B?dnZ1dG1BRUk4NFJUU3BzTnRuY2t2dTJKb2xsNXppZ1JBV244MWZJZ0t4YVcz?= =?utf-8?B?Sk54cnNiS1NBMFJpS2Yrc1dqcTgxalFFUkxTRE5FczJYVUVYdzhWUEtHNVVM?= =?utf-8?B?MHcwVTFGemlZbHoxVTBKUVBaSWFmckdTWGxGN0dCZ09ocllOSVI0QnRGaC9Q?= =?utf-8?B?MGpFYStrbFU3aU1sV3krR0Zxdkw3RHc4Y1BRR2phU0dMY1MvSE5ydzFiNGhG?= =?utf-8?B?VVFsSzV2QXowUzJuNlNiU2R5YW90ZW1rRjRLenMxcWxyT1h0YXFpZnp3SGw5?= =?utf-8?B?WDlDUDhsUlpFNnBrUlp4S3RqYmM4dEpBMTBRdEZ0bEpqZCtNdmVpdm1NNmJn?= =?utf-8?B?NkxDbW1KZFcraFFVWXJ1aE9Ha3R5RXM3Wkk3TGRkbjQ2bnlyRWRtZW1aa3Iv?= =?utf-8?B?ejdpc01kQ0tHZ2FsUGFXT2t4Q0lSZmtnejdGcktIbTNUcnNmY0gwZTE2ZGhG?= =?utf-8?B?K29qVFU2SFJVNEhITzRLL1lqSjlKUks2Z3JjN1FvN0crMkd1cDNQYnV4c0l0?= =?utf-8?B?bXBEOUJjc0VWbjU5eXAydzdmZDlOTGgxekdEcDg5S0VRK1ZqbGF2VVZWdUJ4?= =?utf-8?B?VlhWRjlFbzR5UDQ0U3dCZmFZV01qcmlWOGgxbVNsVVFLT05oYi9zNmNTTWNM?= =?utf-8?B?VDIxbHlnSENSRlFCaUJZalpWUy9ld21iOEdUQlFPMngzejRHRUNkbmZGZHNZ?= =?utf-8?B?NnQ3NzJiUkY5QkxFWWpucjA2Vmx0UmJ3RUpJdVVuNDBkK09mS1ZBck5GSFhS?= =?utf-8?B?L1RRZW42ekhUa0UrSndIYmk5QkZaa0tCVFdtcHJRTjhtaGcwbEpjRlhLcDdu?= =?utf-8?B?WlA3bE53NTdHTWY2NXk3WEZNaHBjWXhJRGZxQzFrOEg2Zm1MSjNHWHhBeTd2?= =?utf-8?B?RmpqYUlqQ2VlVkF1WUthc3p5SFhRTnQ3bU0xMHo4MGt6azlOdzd4N2plSFNn?= =?utf-8?B?Q09HaFV5M3hReHRGdlhReVJPbWNQR3VycmRnemllbi9rNmtUeXd6R1JqVnM5?= =?utf-8?B?VWFaN3JlTXp3VXFMSklIV0puOUV0MVNMOVZJR0Y2dm5sWXBMSjIrMng0L0R2?= =?utf-8?B?c1JkSVJ0VVlLY1ZHU0JCYjhmbWtLZDg5MnFOYzM2aGUyUm1Yd2drK1I4Q2R4?= =?utf-8?B?WHZpbXdMNzQvTUM1WDV3dTVEQW1TNUROUy9EbUdiVUtRY08vZHpjbUdUWGR4?= =?utf-8?B?V3AyRy9ZTWhWNGkrMTRUZG1WYkxobVl2MmJlTHBZOGN5NUtYcDMzU1JkTXZj?= =?utf-8?B?SFFVMFp3YUNSTHEyWEVUYUx5aHRxbkpHUG4rZ3pXaWdJTldWTGk5eXBOUE1V?= =?utf-8?B?bHhxakg1eGlrWVlLbGY2OVBwV2EvS29XYzNUeE8zcDN3RzYzcklCZ3F3VExV?= =?utf-8?B?YUsyay9uWUdQd2kwMk1kMVZXSU9oWkxUdTVVZFRMNCtINElaU05vSDg1L0Ez?= =?utf-8?B?R0RRNWRhekJ4ci9OcEhEYWFDN0ZjSmFPaXZFRkpneUQzMXRIdTJPRVgvVzhq?= =?utf-8?B?Z3BiRmNPUGZZZDFzSDFhb3pLemIyZzZmVzg4OFFRaDRVV3FUd1RVRlN4aCtk?= =?utf-8?Q?XdWE9wHiXWuhfMS5PYWIVdGiPCcYBCUCMORZSoVu3A67T?= X-MS-Exchange-AntiSpam-MessageData-1: xwOAYFXHWQZCGw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f47c4f33-0fd0-42da-700e-08df040d24f2 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6413.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2026 07:31:01.1993 (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: uVmAdNW5+yc1XJTBH4kU8HKngkxa+dmxQsCiIkhmVUKLjtSpuY7IHTjRqHjtiSETtyLT+WeSt0BO3WxHnkPblQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB999081 Current code in IdPool::with_capacity rounds the capacity up to BitmapVec::MAX_INLINE_LEN, but BitmapVec::new works fine with values smaller than this and still uses an inline representation. Remove this behaviour. This allows specifying a real capacity of 0, which was not previously possible. This breaks `grow_request` in this case, so change it to grow to at least `BitmapVec::MAX_INLINE_LEN`, mirroring the capacity floor in `shrink_request`. Signed-off-by: Eliot Courtney --- rust/kernel/id_pool.rs | 38 ++++++++++++++++++++++++++++++++------ 1 file changed, 32 insertions(+), 6 deletions(-) diff --git a/rust/kernel/id_pool.rs b/rust/kernel/id_pool.rs index 06a4c71c4c6c..4f329249df9d 100644 --- a/rust/kernel/id_pool.rs +++ b/rust/kernel/id_pool.rs @@ -112,13 +112,8 @@ pub fn new() -> Self { } =20 /// Constructs a new [`IdPool`] with space for a specific number of bi= ts. - /// - /// A capacity below [`MAX_INLINE_LEN`] is adjusted to [`MAX_INLINE_LE= N`]. - /// - /// [`MAX_INLINE_LEN`]: BitmapVec::MAX_INLINE_LEN #[inline] pub fn with_capacity(num_ids: usize, flags: Flags) -> Result { - let num_ids =3D usize::max(num_ids, BitmapVec::MAX_INLINE_LEN); let map =3D BitmapVec::new(num_ids, flags)?; Ok(Self { map }) } @@ -152,6 +147,13 @@ pub fn capacity(&self) -> usize { /// let resizer =3D alloc_request.realloc(GFP_KERNEL)?; /// pool.shrink(resizer); /// assert_eq!(pool.capacity(), BitmapVec::MAX_INLINE_LEN); + /// + /// // A pool at the `MAX_INLINE_LEN` floor cannot shrink further. + /// assert!(pool.shrink_request().is_none()); + /// + /// // Neither can a pool with a capacity below `MAX_INLINE_LEN`. + /// let small =3D IdPool::with_capacity(8, GFP_KERNEL)?; + /// assert!(small.shrink_request().is_none()); /// # Ok::<(), AllocError>(()) /// ``` #[inline] @@ -198,12 +200,36 @@ pub fn shrink(&mut self, mut resizer: PoolResizer) { =20 /// Returns a [`ReallocRequest`] for growing this [`IdPool`], if possi= ble. /// + /// Grows to at least [`MAX_INLINE_LEN`]. /// The capacity of an [`IdPool`] cannot be grown above [`MAX_LEN`]. /// + /// [`MAX_INLINE_LEN`]: BitmapVec::MAX_INLINE_LEN /// [`MAX_LEN`]: BitmapVec::MAX_LEN + /// + /// # Examples + /// + /// ``` + /// use kernel::{ + /// alloc::AllocError, + /// bitmap::BitmapVec, + /// id_pool::IdPool, // + /// }; + /// + /// // Grow goes to at least BitmapVec::MAX_INLINE_LEN. + /// let mut pool =3D IdPool::with_capacity(0, GFP_KERNEL)?; + /// let resizer =3D pool.grow_request().ok_or(AllocError)?.realloc(GFP= _KERNEL)?; + /// pool.grow(resizer); + /// assert_eq!(pool.capacity(), BitmapVec::MAX_INLINE_LEN); + /// + /// // Grow doubles if at least BitmapVec::MAX_INLINE_LEN. + /// let resizer =3D pool.grow_request().ok_or(AllocError)?.realloc(GFP= _KERNEL)?; + /// pool.grow(resizer); + /// assert_eq!(pool.capacity(), 2 * BitmapVec::MAX_INLINE_LEN); + /// # Ok::<(), AllocError>(()) + /// ``` #[inline] pub fn grow_request(&self) -> Option { - let num_ids =3D self.capacity() * 2; + let num_ids =3D usize::max(BitmapVec::MAX_INLINE_LEN, self.capacit= y() * 2); if num_ids > BitmapVec::MAX_LEN { return None; } --=20 2.55.0 From nobody Mon Sep 28 03:41:50 2026 Received: from MW6PR02CU001.outbound.protection.outlook.com (mail-westus2azon11012018.outbound.protection.outlook.com [52.101.48.18]) (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 40FCF36923F; Thu, 27 Aug 2026 07:31:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.48.18 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815874; cv=fail; b=c2TVPIjbVbmqmbb2/F4iDNUPYFUToyRY5z5uk1DKOm/n/vONdGlIpp3UgMJZ0mw1WlOfTnlQ5v/RqvfqIqGFcBGeiG686h9nFtOnC5TZ92OHjMFYBcuvXL6mZqViJFZ7tzyr3uBzC+qRnFDfy6jzo6DFJz5WamsRVKG4pIg49iE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787815874; c=relaxed/simple; bh=Bp5mwHDnn+WV6nQRHsp4K1fCYmAedud2MnDmHMjZ1SQ=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=uFi3KF2kAW525kF6YD83JZDFeqXOaBU5oSoWf1OfnM3J2RIDaFDvUdhDxHyz7pmknQ9f4pFaTWt9GnVZY5tKedFLT56q7AB1PDVBhkG0niEwgPIQZoj32ZZ27YOKXyYNQTlwuJemQnPgkGUAODk5ABHzvrVPI+QTwTFVVnF4Iso= 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=N7E69igB; arc=fail smtp.client-ip=52.101.48.18 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="N7E69igB" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tQg9FsxuehNkC3uWKAUYgnFl+7DbPQ0lTgv6KVSc/qC7ftaTDLSWcA8XcCsCpQC8mIbEClYh91MX5cjAbOOk2URBD8alPbnK/97mkWabjdUbqd3DzepVbD3/7/aPBcTmFaRXWCx43ZAaiEZuwwLFpQO4vzlqyqGUMPYoVt1pYbO1MjMO1ZHHpHN+5H8OPiH9ZjxFIx08pE71+6uzzK8WGtdkdGAHQ2VQo66xm8rhSgZT88WEbphqY0287oi6sFerxr8aWG1iPUfTDwL3fzF0U2AOaK5Dzz6FelFe8sdhShWOLSjaEu/0bZ9F301OK37gXxu46U5su3C77R3cdw0jdQ== 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=mOL9E1SWgCT5IO15duXo33pD+7Q1p3nml0jkmG8nymM=; b=KL1jwgoN0Awm0k9WK2jRiwDWsCGP2X2bNTzx/Ec2HqMOfhQTN/W7bS+AD/xbDNLStbz2HbhkRfWsxHPjPg8+5XcBNLWTCiE1XIOsPDDYStqAzpVDWlfE55KmtLICO4A4ODqyxLiwjgbujwnea4bHuE/xwa3LIpoRMGc2S9Gh3dV4CkZmlu0JyPIbyOjbrQeJ5aYyh11bEiS/cEANoeve3Arp4g46R18cr4ATDa7QgGTHCk8KNNeaS7t24n4NQ5cHozM0UazYGbqUkLsdLtlXQ30LA001niAlVUmKj+y8dbX44XARpP7kncj62dJamYYHSNM6QeinxHOKE7aS8d9Pig== 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=mOL9E1SWgCT5IO15duXo33pD+7Q1p3nml0jkmG8nymM=; b=N7E69igBd6E9hnv9aT6d6aTgSQJeADPz35yAiw23XoK6Fsy0y9TMcY0g+MpA46RNdJleevxMDW7nzuSBAL10gok4D+Q9tZiTXgqNNt/2ZYg/DANeMb+EicI7qBeh4IQlF0awPdrflEpXUHVY7q9sFd6mhkD0SFRkw/akcRryQdQN61NwH6VYt7U/548aYyrhW0LRpyjUr4ye0HCK5rPPxDEAA7OItClTW8TeDE0vRX09VW1cnA8gKed8xGXr+3ah0ma604woOwUWsj4FKGwm5HFHaeIIvOPHgaq1prbrvKHKvYKewPvrd8vucODy21xe196YNs+GBN2EhEth799Pdg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by CH3PR12MB9342.namprd12.prod.outlook.com (2603:10b6:610:1cb::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.7; Thu, 27 Aug 2026 07:31:05 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Thu, 27 Aug 2026 07:31:05 +0000 From: Eliot Courtney Date: Thu, 27 Aug 2026 16:28:40 +0900 Subject: [PATCH v8 12/12] gpu: nova-core: add ChannelIdPool Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260827-chid-v8-12-bc74c77d0214@nvidia.com> References: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> In-Reply-To: <20260827-chid-v8-0-bc74c77d0214@nvidia.com> To: Alice Ryhl , Burak Emir , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , Alexandre Courbot , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: Greg Kroah-Hartman , John Hubbard , Alistair Popple , Timur Tabi , Zhi Wang , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TYCP286CA0357.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:7c::15) To DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) 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: DS0PR12MB6413:EE_|CH3PR12MB9342:EE_ X-MS-Office365-Filtering-Correlation-Id: 3a99f2a5-ea69-433d-208a-08df040d2735 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|376014|7416014|1800799024|10070799003|23010399003|921020|56012099006|10067099003|11063799006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: iz2g8aEgNzT+AAU0xH4wKybug45UosGlz0XeO/0Kg0HKroX1FuDJ2WVSCvYc4lzBDhpdMtXIYbsUb4CS+dEoWSy5DSrwp2GwY297zpWTNkbIIeu5dCuVdkIToj5W9vD+lyVvS8eMHKl6cz6US1P7Wjp1Lr9dhMSfvFMjX4nkRSdXKXDpZZH2nGma+fTOD1LUfZWNSUqDz149rjW3om1GKV3oGYTAlvpD5BU+5vKvSfOlCRkDQRaCI0OopeMVJPEaX7p7M4G6u1DB92S+JttDnuESZ9quSI2I0nSD11/hXPkFWJUsJylrB1hRYzk3kyhveCb+owPeynsmOXZWHtxFVCtCRTkncTyryDJS+h8NYLSvQaUt5dpg762BeLKAZ9OaExoXXxkeFvg88sdqykIXgc7E2/yA3GP93dBZLCtOrRjOsllUYCs9kYKW+BciDX4yhunwwC1DtKMM0PwfX7posusjmZ9kHwjki5hZFOZN5GrX4EqukvL26B8WcSbYXwSW1K+SCoBXvhpJ9vBODon0LCjDdhVObDDhyuUiTsiVcMto19klYM05XR48hOl9SoGjLuT76mtxLkknIWh/n7ycyOuTlAb3TapbnMHvBw4K1LaupVIvhpKQbF0Ftc70VWyNYIE0Ot57Me/G+dnphzrGLCnJ0fT7uIb5kUM2YdRhZL3ZkG3mh6B1Wa9IY6V8rQhU69H+34yCXkREJgyVX3sNsg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(366016)(376014)(7416014)(1800799024)(10070799003)(23010399003)(921020)(56012099006)(10067099003)(11063799006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SnBGK1hsY1ZNd0JaTi9HSy9xV0NnNXVmT1FCbWkra2p6UVR6MjZ2a2tzWEVC?= =?utf-8?B?eURPenhlcS9TMGQwVFlsNWgzRTByMmFqckg2LzZtY1dwMVZoeisxa0VlM2xt?= =?utf-8?B?eXNNOU1vT0NMTE53YWhSRitWeTZ0d2N2MUN1SXJ0WVZzcDBXOURyd0VBdjRX?= =?utf-8?B?TUVMTkNadWMwZEVON3pwcEI2SDJ3SkJWTDZkQWhIMEpiYW9qV1BOSllEZWN1?= =?utf-8?B?UCt6Y3h5VGNxN1FkTGxLN1RybEFjWWwvOVJRTnJKQzB3U29vOXczWDJuSUNW?= =?utf-8?B?bWtnTVU5VzF2NlNmWkllM0dPZnRtQndtaUIycjE2VkZZNWhJYjBhL0E2dFVX?= =?utf-8?B?VE5LeXduOXl2SFRQcXBHeHZSRVNtU1dpTy81eldWVzIyNmxmTUJWbURoOGJZ?= =?utf-8?B?TXgzem1tN29aenhmeVRYOXFCOWVaLy82VDdvZmpqZmJjYU1hOUFLOG1Vc1dQ?= =?utf-8?B?OTluNENtKzY3cHBSZGJuekJWTE5XdFkzbjM1RGt1UWZadG1VYjRLYXNnYjY2?= =?utf-8?B?Z2RJRnhkQXlmRFNneXh5N0VXSmwvTFdQSXVVMWd4b1NTNTZzZW1OMlEvZmdD?= =?utf-8?B?dWxaL091NTF1UHZvN0FmM2l2bmVHcFQ4UUxIYm1TSVlUTWdMTk04MkRoOWh4?= =?utf-8?B?V1QxUVRHN2Y3MmNLOCt5bW13UE9rM3N4dkIyME0xNkNTY2xCZWxxRUVnbURP?= =?utf-8?B?WWpGaVl5U01lNy95Mi9SV3k5Zi9ETG5LZXN5RGFNZDlSdnB0b0JPaEwyd1Nu?= =?utf-8?B?d3RRSHJrbnhtVDl1eXB3T3RoOC9sQWVyalBMaDRCWHZiSFIxMit2a0JLM1hm?= =?utf-8?B?LzJ2c1ljVnlKMFppYm1mamNobkxXU1VYRjRwbWJEYVNLanE5RkhpV3oyUVZB?= =?utf-8?B?aVIxUWU3NWhYYldkZ2NKaGpnU2NPU2FxREJ2eThZbGYwVWwyazhPOXB0TEFW?= =?utf-8?B?Nkd3TDdJdHdERitzc2dYUTFVdEdUeThpWnRpeVQ2WU92K3FkR3ExRittSldv?= =?utf-8?B?S2hkWXo4eHFkelFuVEluZS82VVRoZmptdW9YNzQ1MUlDb3A2NG1hbFBETklt?= =?utf-8?B?a2hBeFpXQXpOeUZlaC8zc2ZaWmFyYjlrQlBEMktnbjVCbkg1RmhGNVNMQ1NB?= =?utf-8?B?T3ljdWs5MWkxcmR3Ty80L0hUalc0djQrMHJkeEpDQU5iUWJaeXVJODJEczVM?= =?utf-8?B?TWRXL0VlaGk5aWVERGxhZ05vWEZvRVd5d09VVXE5a3pISTY5MjZuZEs4S3E1?= =?utf-8?B?blZ4Z1pIR2NlN1JUd285Q0gvYTFuSEpCRE4yUitUT1o4NDNQRXBGanlrMzJI?= =?utf-8?B?OTZza0puZDJNclhxYUZWM2k2WTcrdDlqMG9LTnJoNXUvT0g3YmlyV0oxdGdC?= =?utf-8?B?Z2FwQ2VQSWEzbjdBRkZLajR4RnBiM0N6Z1lDQnV4Wm5rYWhZY051Q0NWcnRG?= =?utf-8?B?dWt6bG4yY0lHdHM2bGpRWitnS0ZydFEvSzlrVUROQStHVVpKYmtmTkVRdmRQ?= =?utf-8?B?bHR3VU4yS3RTWmFHb1B3VHh5bHI1dXZudUd1eGpZaWd6d0VrM1JPWmFOckZv?= =?utf-8?B?ZnRpMjZKa2QxZDJLT3JvUFUxM1NYQ1RYVTBQTDU2MjNqeWFTM3IwK3l3VjE3?= =?utf-8?B?NE5rMTBpQ0w3dTlJTHVGbGM3TlY4Q3AveEl1VDcwdDl3Z3VybTlrV2V6dTVh?= =?utf-8?B?aW1lUVRocmI0YVZTODlPWUw3eXJETzdIV3duVzdFR05NdEluU0NXRmM2RGVL?= =?utf-8?B?MzREL2w5d21sTmI3V2wxTVVLR3hhTTZyVnpHQzJySE80ZHByMkdGemNWcnJG?= =?utf-8?B?SEJ3dG9DeHYrTThUSDBnT3FuYXhNMWhJVmlqN0ROeWMyWWFsWitDN0hVS1lU?= =?utf-8?B?MktGUm9RYlkwY2JwSEM5dCsvS1BNVkNaSUw0Y3NudFRaeE1BK1kvdU1UNXR5?= =?utf-8?B?UHA4SHFiYUdnOWcvRHRubjZSdDF1TWRaSWRxZTdvVlZLc1JKWnlKVFRZNHp2?= =?utf-8?B?OVNmYXl2L2RPaWJvTGJwcVNRZTM5MkNydlBjclF2a1RLRDVuZTM2V3hXblln?= =?utf-8?B?SW5ZQUlYYXo0ZkhNV1p0RFRxVjVrSENSZHoreGtHTGdLdEZpY2cyRkpRR0tx?= =?utf-8?B?dUt4VTVITEQ3UzRnWHRxSjBhZTh1bzl4STRPNU1vR1Noa2RMSUlRazBUNDdK?= =?utf-8?B?dXprc0VsS05HM015Z1J1NW9XVjlOd1c1RnFwOVloaUkyQzdaMTB1eW1CalY2?= =?utf-8?B?QkFmKzN2dE9WSEZqc3JKdTFFS2U5aUtGeVpXUU10L0pnWTJXRTE1WU9mZ3RL?= =?utf-8?B?NUdUakRNVXo4dEg0Uzd2cGdWRTA2T0RrODZ2REx5ZWpBMUdNWWNOWGpwbnJG?= =?utf-8?Q?bJisJ/MaNMYrQYSPrME4ZHNS/j5vCwU1eeg6uXxzwq0rs?= X-MS-Exchange-AntiSpam-MessageData-1: PAMNC3piAteBwg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3a99f2a5-ea69-433d-208a-08df040d2735 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6413.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2026 07:31:05.0245 (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: i54WwGmfm+bW8hk7Re046983AnCQHIjtGPldHlQ57tN+yOqP/MtFVvxCuu8BupULblK9BH23R4KPdaVF1SlZ/A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH3PR12MB9342 Add `ChannelIdPool` which adds automatic tracking and releasing of channel IDs on top of `IdPool`. This is necessary for apportioning ranges of channel IDs to be used in e.g. vGPU. Channel IDs are allocated as a contiguous sequence with a specific length and sometimes a specific alignment [1] for vGPU. The ID space is small (limited to 2048) and allocation is not on a hot path, so a bitmap-backed `IdPool` is a better fit than IDA/xarray (which allocate a single ID within a range, not a contiguous sequence) or a maple tree (where aligned allocation needs an alloc_range()+erase() retry loop that essentially reimplements bitmap_find_next_zero_area()) [2]. It is also faster than maple tree [3]. Link: https://lore.kernel.org/all/84bc8bd2-e292-4b84-9580-a1b5df4c5bdc@nvid= ia.com/ # [1] Link: https://lore.kernel.org/all/20260710-chid-maple-v1-1-4ee869055268@nvi= dia.com/ # [2] Link: https://lore.kernel.org/all/20260717053241.916441-1-ynorov@nvidia.com= / # [3] Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/gpu.rs | 2 + drivers/gpu/nova-core/gpu/channel.rs | 198 +++++++++++++++++++++++++++++++= ++++ 2 files changed, 200 insertions(+) diff --git a/drivers/gpu/nova-core/gpu.rs b/drivers/gpu/nova-core/gpu.rs index 42a4cd7971fa..66ea697a89f8 100644 --- a/drivers/gpu/nova-core/gpu.rs +++ b/drivers/gpu/nova-core/gpu.rs @@ -33,6 +33,8 @@ vgpu::VgpuManager, // }; =20 +#[cfg_attr(not(CONFIG_KUNIT =3D "y"), expect(dead_code))] +mod channel; mod hal; =20 macro_rules! define_chipset { diff --git a/drivers/gpu/nova-core/gpu/channel.rs b/drivers/gpu/nova-core/g= pu/channel.rs new file mode 100644 index 000000000000..485efaba059d --- /dev/null +++ b/drivers/gpu/nova-core/gpu/channel.rs @@ -0,0 +1,198 @@ +// SPDX-License-Identifier: GPL-2.0 +// SPDX-FileCopyrightText: Copyright (c) 2026 NVIDIA CORPORATION & AFFILIA= TES. All rights reserved. + +//! Channel ID allocation. + +use core::{ + num::NonZero, + ops::{ + Deref, + Range, // + }, // +}; + +use kernel::{ + id_pool::IdPool, + prelude::*, + ptr::Alignment, + sync::{ + new_mutex, + Mutex, // + }, // +}; + +/// Pool for tracking reservations of channel IDs. +#[pin_data] +pub(crate) struct ChannelIdPool { + #[pin] + inner: Mutex, +} + +impl ChannelIdPool { + /// Creates a pool managing `num_chids` channel IDs. + pub(crate) fn new(num_chids: NonZero) -> impl PinInit { + try_pin_init!(Self { + inner <- new_mutex!(IdPool::with_capacity(num_chids.get(), GFP= _KERNEL)?), + }) + } + + /// Reserves a contiguous area of `count` channel IDs starting at a mu= ltiple of `align`, + /// returning a guard that releases the area on drop. + pub(crate) fn reserve_ids( + &self, + count: NonZero, + align: Alignment, + ) -> Result> { + let mut ids =3D self.inner.lock(); + let range =3D ids.reserve_ids(0, count, align).ok_or(ENOSPC)?; + Ok(ChannelIdReservation { pool: self, range }) + } +} + +/// A reserved contiguous area of channel IDs. +/// +/// Releases the whole area back to its [`ChannelIdPool`] when dropped. Re= leasing locks a +/// sleeping [`Mutex`], so the area must be dropped in a context that is a= llowed to sleep. +#[must_use =3D "the channel ID reservation is released immediately when un= used"] +pub(crate) struct ChannelIdReservation<'a> { + pool: &'a ChannelIdPool, + range: Range, +} + +impl Drop for ChannelIdReservation<'_> { + fn drop(&mut self) { + self.pool.inner.lock().release_ids(&self.range); + } +} + +impl Deref for ChannelIdReservation<'_> { + type Target =3D Range; + + fn deref(&self) -> &Self::Target { + &self.range + } +} + +#[kunit_tests(nova_core_channel)] +mod tests { + use super::*; + use kernel::sizes::SizeConstants; + + #[test] + fn chid_reservation() -> Result { + let pool =3D KBox::pin_init(ChannelIdPool::new(cv!(2048)), GFP_KER= NEL)?; + + let first =3D pool.reserve_ids(cv!(48), Alignment::SZ_1)?; + assert_eq!(0, first.start); + assert_eq!(48, first.len()); + assert_eq!(48, first.end); + + let second =3D pool.reserve_ids(cv!(48), Alignment::SZ_1)?; + assert!(first.end <=3D second.start || second.end <=3D first.start= ); + + let first_start =3D first.start; + drop(first); + assert_eq!( + first_start, + pool.reserve_ids(cv!(48), Alignment::SZ_1)?.start + ); + Ok(()) + } + + #[test] + fn chid_reservation_drop() -> Result { + let pool =3D KBox::pin_init(ChannelIdPool::new(cv!(8)), GFP_KERNEL= )?; + + let a =3D pool.reserve_ids(cv!(3), Alignment::SZ_1)?; + let b =3D pool.reserve_ids(cv!(3), Alignment::SZ_1)?; + let c =3D pool.reserve_ids(cv!(2), Alignment::SZ_1)?; + assert_eq!(0, a.start); + assert_eq!(3, b.start); + assert_eq!(6, c.start); + + drop(b); + + // Only have space for 3 IDs right now. + assert_eq!( + Err(ENOSPC), + pool.reserve_ids(cv!(4), Alignment::SZ_1).map(|_| ()) + ); + let b =3D pool.reserve_ids(cv!(3), Alignment::SZ_1)?; + assert_eq!(3, b.start); + + drop(a); + drop(c); + drop(b); + + // Everything was dropped so the pool should be empty. + assert_eq!(0, pool.reserve_ids(cv!(8), Alignment::SZ_1)?.start); + Ok(()) + } + + #[test] + fn chid_bounded_by_num_chids() -> Result { + let pool =3D KBox::pin_init(ChannelIdPool::new(cv!(4)), GFP_KERNEL= )?; + + { + let a =3D pool.reserve_ids(cv!(1), Alignment::SZ_1)?; + let b =3D pool.reserve_ids(cv!(1), Alignment::SZ_1)?; + let c =3D pool.reserve_ids(cv!(1), Alignment::SZ_1)?; + let d =3D pool.reserve_ids(cv!(1), Alignment::SZ_1)?; + assert_eq!(0, a.start); + assert_eq!(1, b.start); + assert_eq!(2, c.start); + assert_eq!(3, d.start); + assert_eq!( + Err(ENOSPC), + pool.reserve_ids(cv!(1), Alignment::SZ_1).map(|_| ()) + ); + } + + assert_eq!(0, pool.reserve_ids(cv!(4), Alignment::SZ_1)?.start); + assert_eq!( + Err(ENOSPC), + pool.reserve_ids(cv!(5), Alignment::SZ_1).map(|_| ()) + ); + + let head =3D pool.reserve_ids(cv!(3), Alignment::SZ_1)?; + assert_eq!(0, head.start); + assert_eq!( + Err(ENOSPC), + pool.reserve_ids(cv!(2), Alignment::SZ_1).map(|_| ()) + ); + assert_eq!(3, pool.reserve_ids(cv!(1), Alignment::SZ_1)?.start); + Ok(()) + } + + #[test] + fn chid_reservation_aligned() -> Result { + let pool =3D KBox::pin_init(ChannelIdPool::new(cv!(16)), GFP_KERNE= L)?; + + // Alloc 0 so the first fit for the next area is unaligned. + let pad =3D pool.reserve_ids(cv!(1), Alignment::SZ_1)?; + assert_eq!(0, pad.start); + + let a =3D pool.reserve_ids(cv!(4), Alignment::SZ_4)?; + assert_eq!(4, a.start); + + // The area skipped over by the aligned allocation should still be= available. + let b =3D pool.reserve_ids(cv!(1), Alignment::SZ_1)?; + assert_eq!(1, b.start); + + let c =3D pool.reserve_ids(cv!(8), Alignment::SZ_8)?; + assert_eq!(8, c.start); + + // Only 2 IDs left. + assert_eq!( + Err(ENOSPC), + pool.reserve_ids(cv!(4), Alignment::SZ_4).map(|_| ()) + ); + assert_eq!( + Err(ENOSPC), + pool.reserve_ids(cv!(1), Alignment::SZ_32).map(|_| ()) + ); + + assert_eq!(2, pool.reserve_ids(cv!(2), Alignment::SZ_1)?.start); + Ok(()) + } +} --=20 2.55.0