From nobody Mon Sep 28 21:52:48 2026 Received: from PH8PR06CU001.outbound.protection.outlook.com (mail-westus3azon11012003.outbound.protection.outlook.com [40.107.209.3]) (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 B3C483B05BC; Mon, 17 Aug 2026 07:04:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.209.3 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950270; cv=fail; b=bMqduT/BzVtpjveKAqiLzyVyNiBeJbtqa31lbqu8WukrZkIYQEdohPq5Wc69pGFW97fnJD4SZDVfobBRqEDMANhdv+wzShOZfi8NuBCh/ejU9/6VKE7n7MtMWd8Li9PPE509uCVx4vv6y5XxJ0rpx6VS0d2UL93paGI+5lkX1iU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950270; c=relaxed/simple; bh=gNAmAE+SynQxJw9X2Wf2ekJbOL11jq3XOBZXdq4DF1I=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=U2vyHD6KtPh7jXNTbyWEmCSIrvEeXwr8vGE6LM07oNhgNOZy/XEwe8hS5mz7JiCobjpgJjdxDJOK4QHHWC9xujLAikONwr+VQODsX1LXOP1YTAfPtTBzQVD/VypCwcMtn6q7azlz6kH/oFW1o2WoJQkSWIy7yDWfHiCOCIFGoKA= 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=VF/nY8K/; arc=fail smtp.client-ip=40.107.209.3 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="VF/nY8K/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lMofENZdsbxx3dox5i+m/IwYlexSSrM9JjWyXIYPaIunIQQqfJwu+lzlCHaT+wnZz+bFejcvGBamlO14RHFRsKNjmlBKnam1UOSP2jG6ZoimR3sxInC6BtyTYRTpJyK6AQIfU7vdds6TWjd6AvPuJhvUW08NLGlKN2BdvfRHv2lkc9VPLX06kJ8yE5xAgFYCXYcOgZgVqVZl2Q9Q1GGM+l0cqupSyC6qObeKzXSp5z69FPOmppshRkQ0lAwoB1loDkxgoo/4t8+Jw/2sXtM7kfFSjIGFxvuTRqMkPAKXVMjbzpfr5iuK0iDAoFOZ5ttDmAjV1VRZip+OQvT4lImuPg== 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=a4CEEOyYYQXTbzEpKw2zMZEOe8DY1XbC0D12CuV6rbs=; b=nsVMysEdLjRjo5r0pSqX8Pvxn6fZlaiqyL2n334LeiSKLBHKbKtQ9VLQ5c3636GTuMdTIa8bKrn5jJEI1bomEc48GgAj0WK3RniSRvh4b/uzru3mPjBoWgsftHtyYR8zwwNSM7XehrtgL2nC2vybwqWBczCSMA+/NlABiUyXReIs5WsvYto8j0TDN8DLtenW40udVsn8oU+96r3dP69aiHRL1tb6/vJIsnm2WFhP5pLY+CCbMfm0RA657pC+Ro6SK6h3jKTNj4RGTFF40GbHO3zfLmW/hLQwk+1AQ9vbbm6wjZag0ie1G0ILsbG/06f4ej+3vOBXBy7rN8rGOaFtZA== 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=a4CEEOyYYQXTbzEpKw2zMZEOe8DY1XbC0D12CuV6rbs=; b=VF/nY8K/WfA4suDb6CEZlrvk3felDSfr1LvuGr/EPbutfTy8qtIFwwFiVfr4A5DDk68RZh6vdyDX4WhgEPANNHDVMwwJBANntDuSg+EtOEbmuI2Hj5Bil6cLy96o+ViRmtQtJGdBAR/dk7kofOp3s0jNcnh2rVW1r4nFijaNOWsiHCgrcMw1iSMn7Jic8C+SZaTsMzt8ofzDBvkMfq+hT+h+KHVVIVXp7dZbhLf8NATpxpyQY9npnLr9QmVpv2o/bmkCv52mbItBJZdDf4pwLESJpTxvT6TVbUStLASyz1XN1SfZi8Of6W+bVDICA8vUbdYkFQ2D48vtZBJH0A0i1Q== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by MW4PR12MB6732.namprd12.prod.outlook.com (2603:10b6:303:1ea::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.11; Mon, 17 Aug 2026 07:04:26 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 07:04:25 +0000 From: Eliot Courtney Date: Mon, 17 Aug 2026 16:04:15 +0900 Subject: [PATCH v7 01/10] rust: bitmap: use function-level cfg on kunit test Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260817-chid-v7-1-a5872e64d8f4@nvidia.com> References: <20260817-chid-v7-0-a5872e64d8f4@nvidia.com> In-Reply-To: <20260817-chid-v7-0-a5872e64d8f4@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: TY4P286CA0078.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:36d::19) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|MW4PR12MB6732:EE_ X-MS-Office365-Filtering-Correlation-Id: 4b32c9c6-5e8a-4bf9-cfa4-08defc2dc5d9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|1800799024|366016|10070799003|376014|921020|10067099003|11063799006|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: H3yO5vbBpIHlAn4PYICmyWDA0MamkudLJtx26iKBEm96lNM4XsmDyS8tA+zPDP3b0p8F+gDSK4x2A6YFK9xv7V/uPNMU1p0PhImxRcojpWgCgAtBmrUpK+z1abmniI/k4lxrF3InM5UjQl0lMcDqXFwS2w+HjmA6bcXCaAokEswiMAbPk9pQcy7Wz5ZiXrv33At0b1zZLh2gidcMDvJVoO/HexZwxqCoAQ0uQ5A0msICjiVEZ38aLyiuIz2bT6q2XuEYPV3wzdE9uDQkX25DNYqR+vSuP8M/AQ7FMgDd1OPn4IC9apJ2eqXE0fRH79A95VPErwCYTzH8Kbnfdhh9fSb/t273v5p+cQsuwbwh5sGQStGIgUcq3Xw7sGHj15E1bPOLKBuesht9z31brofBEIgYfJMjeCBcQNhygIXPu5AB/Z7wxGOIz90geo3q/+w0rRx22+hgxD/2U0VRhZS9mlpmo8+6hkF6POYO5s93LjJUohj9s8/BcsjzWnQJcEfcrFXPn0u9et+q0jspLqJ3OiVhNjBZYv30Gg26x6L8j8RDdXX+TiY+4/Uoe4YHynvD5ImaivtdQw6Ag2VL4snf9SfAZJ7ks5KPLXJUdtwaZFR1iHhv8HY5M7VgPRMuZ1PQ7yCvIygVFIx1YVOExxFVSq54dRlvGuxOBDQPbhjCv0r5OvGKzI4xelgV6ykET7pDsRUtgJDXz7HTn03H/2CREw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(1800799024)(366016)(10070799003)(376014)(921020)(10067099003)(11063799006)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?d2VzbVIwR3VkOGJ3dUNNbVRLYXdDam9Yb211YktpSURaMmFDN3pIQmVwTXE1?= =?utf-8?B?dlFiWmxsOWhlMW9jUHdQdU1BU05zcmlhS2F4d1puMVIvV09DcVIzaE1zd2Vj?= =?utf-8?B?THUxY3FPN1liWUFlbEIwdlQzOG5Ba2ZSaUVCQ3A5QzZkUi9QMkR3U0pRUVJQ?= =?utf-8?B?ZytvTGZ0SE5xUkFGTGhMbSs4VURncHdSeElodUR6SXgxaFI2TGFiZVdzWklt?= =?utf-8?B?RWRyb3hOZlo4YmlCcE5LRXdqYk1aVWdMczd6dCtPS04rNWl2VXNqb252NW1Y?= =?utf-8?B?d0YyWm94VjlndCthMGN2bC9JTFRid1l0YzI0eGtPRHNaQ1ovb3pHTWl0dmZJ?= =?utf-8?B?WHBNVXB4TlhSd1J5cWtuQkwvVnB2bllncEpERG9TQU5sZEVVVytDZnhqaTNR?= =?utf-8?B?WUc3bmhNdWQ5aXNSN3ZlSG5SdHN0d2x3QjVBM0YvZnBzOUZwbDlFeGEwSDI3?= =?utf-8?B?VEJ3TXV0R2JnSDM3VmhhMC93SHphNXFtSmx4UFV4MVBGb3BsalE5TUVLVUM5?= =?utf-8?B?TU5rZEYyR0NsUXhQcmdUT3F6UTJiS1JwTlFvMmtEUVFqcGRiYVhlWGhOVjU4?= =?utf-8?B?UnVMNmxBYld0bEtYckJPekdzNnhPQlN0TkZBbG12KzBZZmxUa1dQSE9ma2VJ?= =?utf-8?B?QjU4a2NaODNzMis5NGRMQTVKR3grY3ZtOTFkd1VyNUFWcHBmc1lXOVZhUk9N?= =?utf-8?B?RHhRNXFSa1BGMlFlMGMyVjdGbCtjWk5DYkRSZldxc2N5RTc4NkJTZTd6dVQ0?= =?utf-8?B?b0tkQ3p1RWlZaTA5a3dnSk9JeW9MYVhvaHBHNDBwTExMY1hJSEc3VnhYTTlj?= =?utf-8?B?a0g4Q3NBVFlwd2h0TUJHbmNDRTVVNlJmWFp0L05aQzdrR1hDOXVYaFpRY2o4?= =?utf-8?B?TTVBUmc5RW9IVitGUXVFcHYycmxuOWRDaHNCRm9UbWJaa2hyOTUrNU5RK0pr?= =?utf-8?B?di9LYlZJd0JSdFFmUEhjSlpicUlaZDNMczR3cloyZ2RobUcrRjVRQjVjYldy?= =?utf-8?B?UXJCbXBVZXAwYVpUMnVUeG94OG1zNnpSM1A3NU5QZzJlK0FOODJnL21tSStD?= =?utf-8?B?azdNd3c5LzR0Q3hEZHd6V0I4b3hVNUxKeFlneFdTY0FiNHJVZjAyOHZmVXBq?= =?utf-8?B?NjczR0xpRjcxTGkwV3hZc0tCRDR0VW4yTEdVQndEaXJmNFlENW9uMURRTk05?= =?utf-8?B?bllJTzFrV1FrNHd0TXppWnE0amNvQWpXMEZqNk0yNDdVcHdLZFRoWjBwOXRJ?= =?utf-8?B?TTc2TTc1QVp2eGFZd2k5TC9Xc1M3TnpEcXFDUnJ0bnZiL2NGcUJIdk00QWEw?= =?utf-8?B?TFB1ejZNNlpRTUhXRzIzTTdPUkZJWjFmQll6K2VWK2g5eVlCdzhLWCt5L2x6?= =?utf-8?B?OGFHMVVpN1pVRGhrUFI4VU9TTjlEelVBQ2FWKzJlemQ3MlF4Uk9RMVU5bDM5?= =?utf-8?B?OXBxa0dndTBFdmJBRjRnNlQ5ckc3VW14bW8wNEZibVI4SC9uLzR4bEpHWnUz?= =?utf-8?B?MTRnUUU3YU1jdVlub29CSG1NVmJFNHBCRk1qWm1lbXowZ2lNUzlxc3F5aEE4?= =?utf-8?B?ZzNNQkJYMVkrbjhrMmd0VHZ3RkhiTHNnRktpdUVCdUxvVnhxcjRCMTFjb0k2?= =?utf-8?B?cUVKajFvZmlwZ28zNml6MFNYOHRRZVhqSDhHV0lGOWJheU1OY08rd1dzRGk5?= =?utf-8?B?Yks4azlPNC8rRmJBUjRxdWRnZlJ0WWVSUDhEbGRmV0tObFZ5NHBvRnc1R2JY?= =?utf-8?B?WkNVRm1tS3hkaktpNzRBeHBCdFdHaFFNVVN0Y0xPR1RtVGlYN0NhSk52SE5B?= =?utf-8?B?RDZFT24wZnVzMVlSZ0NWTWNxMjRtVm43dStOMm56S0dsWUtyNWdlTDQ3b0t0?= =?utf-8?B?TUhmTzNIL2JSNlBJbWpDSFE3c2wrOW8vbjJhZUY2WjgxbXIvZWovb2wzZTlo?= =?utf-8?B?SmVIOEZBWGZXWU5HRittbFNuZ01QT1hpR1ZYRjlwR21xZS9QaWE4Tm5PTEdY?= =?utf-8?B?bUVzR3o1MlE3d2x6eW50T1Y1SlEzcWxjTjRZd3BtaXROYVJxUnUzQ1E4WmpL?= =?utf-8?B?MGtiYXl1Y2R1bzJXcktjM3Y0UmtZUG1CU3FvTzJUd2cyOFpEblkrRjVxQkJh?= =?utf-8?B?NG9NTitQOTJZeUdaU2d4NHZta0xpZHU1WmlKdmw2ZGpHNy81S2U2ZldHVEZm?= =?utf-8?B?cVV6TFEydTFtNmNnaTdiUXdhUVBhQU9TR09pUSt6SGJUdjBIVWYySi9QU0hK?= =?utf-8?B?Q2wwV0JqcjUxdi9jZThCRlpTelNpcXpicWVNaW4xblM0K2pOc0ZjbzJpK1U2?= =?utf-8?B?eFlKQ2hjODhqb3Bjdmk0YUJKeS9iem1yVUdyR2ppZGMxcVhlTVRMd0p2MHpx?= =?utf-8?Q?eq2S5orffmCAz4EVnl5LNvW8ViZFglWtdzRsduIwbedLe?= X-MS-Exchange-AntiSpam-MessageData-1: iCeBv6ndfUMmjg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 4b32c9c6-5e8a-4bf9-cfa4-08defc2dc5d9 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 07:04:25.9088 (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: BDcWYyKJ2/78aiWPW0SaMWu2wU1vY/zBo8BgbbTDRZUbHiTfGPt9x1ILVSh2WnSi7XcGSqatb4aKHzneLw4cqw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6732 Since commit c652dc44192d ("rust: kunit: allow `cfg` on `test`s"), we no longer need this workaround. Reviewed-by: Alice Ryhl Reviewed-by: Yury Norov Signed-off-by: Eliot Courtney Reviewed-by: Burak Emir Reviewed-by: Gary Guo --- 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 21:52:48 2026 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010066.outbound.protection.outlook.com [52.101.201.66]) (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 5E95B3B52E7; Mon, 17 Aug 2026 07:04:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.66 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950275; cv=fail; b=cAk3XyBQMB+93G77J1ietB14knuHyKQ37X0WiVTv7eOZcsoGUW5Yg6aN9Ls2pCdp8ZdWVnu4EKsIPrZ/J2TXuzkYDQ4So3sVqx3qlmRw+WlN02MPJn4APlMTwX8SAVzAOVcjpywpB6LrqMPjO2iDmAUWIQK2/Ekxv0trfd35BW4= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950275; c=relaxed/simple; bh=iHRpSb0aI4niGrQwx4wJEsw9BzxhvQCENGFnHKXtJJg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=P1zQevFzLrqfWFAB+qo70Sp/6PAkDfnfoqBzIiV1MHjUseMYIVbD/FPUUdTsmnskpW91KtTXffUnwTkRDjKeHL1FZsbFuLIpS6hzEhC/8+PSY46ox/Gfza70wdhR0KHMjSg83AVliwlvgdK2HaQtfgCRDx3ybwFvC0jyIiy42wo= 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=Z4ZJeJfG; arc=fail smtp.client-ip=52.101.201.66 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="Z4ZJeJfG" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=cFPObseoqZzj/4s9m7C/yjtKZsSIrcI6chubBBixRBIYCE7vSuc0NVzhJRNQUzXurVfDwL3cJZ3bOH8ONLha8OOzAWsQyeG8NLeUvaWWcnKJlEunV3bCqtUDVZKo/flPShwhsrVhAQHm4TwA2yHO0p94K9aDjhT8K2V5wGahlTiGcOr3EuffNLOu6fOPg25Eh/yiLtf62NSdP77FYSei4dASUtnk19ZJ7gufvDagWWaEBUOljm1ClDNeU5fFxnmQH9BrA6E8OawC5NRkpqmmFMQwx8ChjTc3pvYT94vc9iAzW7d1jQ67AnTMsX2ZiEEj2RuXJbYNqaZzum87Z64nVA== 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=T/hbGluvA6FIbbZhR3ITHLLK4f2I/yjNyv3zyhb11S4=; b=otHcrNb9Tc/DqllQ6oHAaSg5dFSGloAF2cwahA1YtfKTkQNxXHY/4WsI+c1PM46LJEjdQ+FlCR4l99KdEGSVk40N3dxLYFZI0f1307w4WAoyqZjEqKABlCjaIFt1eqnAGLLk84BhOqb4RixbC68FEcs2JQ5huxiuzlY8bw9mXKcwSUrZsK3WVp3N6dt6UffiPSi4AILrPfkiMDqNQGm/V9podAp48IYiAA7s5kwUHwzDZON0/wrdS+StryoyOpYF9kSk+0jD8udPh5UyAy6kk1n61efvZAApnl3ByT01pBbupU2wsH4U1pXauHp2nwwtwjDjdWP1BGFy59/AZ5PzIQ== 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=T/hbGluvA6FIbbZhR3ITHLLK4f2I/yjNyv3zyhb11S4=; b=Z4ZJeJfGN7A7f7uDeH/CNThZ9FsswOY701xKKYR9RBPlf8fxYCskLzotE8oeU266q//S+3t8T6tUzKTY4sV6q6QPC7Y9lNXEjIba7gNXrC8UFFrwQYHPO8+9WpwIWRwdt7pcq417h6ypep5rqGGCSy93L6ojd37rD+zJKnfplP0muRQpa7mS9fw/n/jByPOMCMN+KSGW4KXTea+qva2wyoHQ5znlhNSr+ne0T2jdKZO3Hv9foVrvSXeHJVpUskNvMQRcs4sC53b/eX5SBahqg8SQ/4Lr//CI31TqX91J2uroCP9PUZKixJoUtIlRGEkqwk31ZrBBiQFJElw+EDzQPQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by MW4PR12MB6732.namprd12.prod.outlook.com (2603:10b6:303:1ea::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.11; Mon, 17 Aug 2026 07:04:29 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 07:04:29 +0000 From: Eliot Courtney Date: Mon, 17 Aug 2026 16:04:16 +0900 Subject: [PATCH v7 02/10] rust: bitmap: restrict bitmap length to at most i32::MAX Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260817-chid-v7-2-a5872e64d8f4@nvidia.com> References: <20260817-chid-v7-0-a5872e64d8f4@nvidia.com> In-Reply-To: <20260817-chid-v7-0-a5872e64d8f4@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: TY4P286CA0077.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:36d::6) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|MW4PR12MB6732:EE_ X-MS-Office365-Filtering-Correlation-Id: 83ddcd23-409f-45a6-6567-08defc2dc811 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|1800799024|366016|10070799003|376014|921020|6133799003|10067099003|11063799006|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: iZRi52uE1OzppmsU48kjTVrLMTE2S4ynpPHYhCjJj0D2inbb/EPVwkYTYijwz/ICrpHdtl0tpZbwrvt2Tpyf8nyUP30rmCvfiGJRJHu5PS/s5vB8DEFjpQAC5qcwSLSsLKboa04WAMLJjitIAMvbGpflRaZiGNoABSG8Vzc9YNKDgRTaRRmpDj7WwFrrR+cPAUZXm02it2rV8FKjCzF0BD43/f1UPjSieak4bIWetYf/+zm0Ho271DzQ8i7qhXAiTW6/JurHtip1IAN/CmZeoDgDC2oIE4VQa4ySrU6sMAbaKV1/z0LG3g8Y/9dlC+5QwxFLQ5gWq3FU3AKvrYQj0PpKdjgvsUYl20G5LgsEpn1GRpG3mdjNbiNsArULKmd9LyQsUKLzZr2Z0HEQQiRQd6RC4njsEacGggfa8oXpZijzDuax+kVzBS2aOcvap2Pd83iLjRbtMw6Xdx9AWQ7XS5yOP+v/vGEWaR8pVQP7BSJlQIxuKVZiSf/vPPOX0x1i6dytVaAtpWTXX2VdrnvR1PEts74HIozuXJLGSVRmP6LKNCTyrEppX9v7V0+65FN+AlhvCFGZh+vfZ0Y79Ws6x2LirGwdG4LXzu604DWid5ugN38HzwckKYCIGROKWP/1U9XjXqetSeVIAYYRECb/4RNv2dtOPEvH97SVihc8kfzzQvV+6v/p4A2k2RjQWJC6/UwIdkOGbRpUpFsm8AJ5Rg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(1800799024)(366016)(10070799003)(376014)(921020)(6133799003)(10067099003)(11063799006)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a0tqUzNkR1RBYXppd24xM2hhak1SZVZXNjhtK1lqQ0xSaEVlSE84Z0J0cFkz?= =?utf-8?B?cXFXRmc0TytiV2hVVmhURkhxbjhwWlJZNjhnQXdvaHBDLytKeXRyc09FOUZB?= =?utf-8?B?WjZONlF0M29pM2ExMU4zWXhNZENNZFFmZmcyWEdpN0xMb1RhSHJGTUxqdXBN?= =?utf-8?B?TFVTLzdJcVlXcWlJbzNiTGhoaDkyT1c1NjFjODQ3Y3BOTitFengwTlhjbWIw?= =?utf-8?B?enlUKy9RZjZJaFBpS1FuWXZCMWVheUtnOFlMRzFMZmg2UVdYKzhXR3Uwdzdj?= =?utf-8?B?ckovdDRlTWNVVElPUWN4RUdVNXI5NzZxN0dNTys4R2FLWjZ3OTRVbDdJd0FQ?= =?utf-8?B?S2ZZTkN4bDA2YUdSYkFSK1lnSnhGbmdRZ3psa3hpdGNBN29xT2t3TkRpK0NG?= =?utf-8?B?ZzZnS2RNOG9Xc2ZaRFBqYnBjbmtoeVVOUzBJSm9HK0gybFllZVo1d1JZK1U4?= =?utf-8?B?Skd0eHAvbEdBLzIwOEUrY0xVdEx3TlJhN21XQmhsaWZMQmhVakZTWVk1eXRq?= =?utf-8?B?WFh3dmsyQkc2WjhEY3RBMXhRMW52YWJaWDdWOEhGWlhGQzQvZnJqWitmWTZs?= =?utf-8?B?cWZCZ1pCR2FsalcvdTh4R1QzellMeHZvOXFRZ1dwNzI1cVdGdlA2ZlhEcE1v?= =?utf-8?B?VWloeHNzSDh4Tkc4cFZRL2t6ZnhZV3I4UFdyRVpNZ3hoYTdsUFc2Q0tTSTZw?= =?utf-8?B?RU9aYVM2blJJOXRSd2txamIrOG1uV1pjUjd5U0lkQisvTjlFbVVaMWZvWS8v?= =?utf-8?B?bnNUbnpuZkg3b1hiMUxhNEU4Mjlsblh1WW92WVlNS1laM2g5OFk4SlIySDIv?= =?utf-8?B?eUNTVTNNeGQ3RCtmY2JPUExYVC84Uk9XWXB0UUZFK0d4RlNzbUpHelVqOW9R?= =?utf-8?B?eGwyaTQwZ2U2ak9FNVpTN09jTkJzRnBkNnk3Q2ZkS0V5amxESUJGaEdIdjJr?= =?utf-8?B?RnlUNVUzSzV0emphSitFRENyYTNBVE5iVUI1WUVWUHBrcTdWQ3poWTNBYmJp?= =?utf-8?B?SS9kaTNLdWwyVWpSWXhINHBHZHlMMEhaM0l6MzBESEZ4dGFnaHJ1b0JYZ2xr?= =?utf-8?B?bFkxak95MStPVllneGJNRSt4b0xwZU9oWlBkUDA2bWt2eVlTQmtleDRIUmZW?= =?utf-8?B?ZzltazNEK3l0ZGhXbXFDNlNlcXFmTEEyTHRXL2JkU1ZEcHkwNmo3TVNSbkR4?= =?utf-8?B?OUVWUGtSaUgwbDB4ajFLdHlsZ0RMT0JvUTNZcHdSNkJUdXZBWS9pcHdzSmUw?= =?utf-8?B?aGlIY1ZEUTJ2bEJkZ1RnN0VlWTN5WFR5VzRHcEhiSENXc3IyUUNQQVpYeXVx?= =?utf-8?B?azVWQU9KTnNVWVE0MzdqM21sU3hsWnVJY0NoUzg0NDdodi9OQUcyVE4zQUpF?= =?utf-8?B?VThNUEFsczM4OW5WZEJtaC92dGs1cU5nV0h0WGRhUFVlcmw4MTJ5TzNlK0JS?= =?utf-8?B?cmZhLzlFbHgwMFk1THVNbEcvVVdpN053UFhEYUI1NmliSDUrUVljSktmNzlH?= =?utf-8?B?QnBvSWY3T0NRNml4SkJHR0FFekMwV3ZMbXM4SDc1UmV5YS9mTmNxbmRRZzBC?= =?utf-8?B?dkRsTXl6ZzgvbkR2cTAxYTA3ZzBtNStIWDI0T3MvREtpcE1Eb0s2cmx3dHdV?= =?utf-8?B?RHlpYlB6UThSaUZHd1RpNDIyZVdDNGJicFg5V0Z5R25kcGtETDF0ZjNnbmxt?= =?utf-8?B?aFZhZWU0amdIWFErcHVlL2R6b3dtdEZVdXAxQzQzZXlyc205WDV1R2pIR0p4?= =?utf-8?B?dThGUVBkZzhnTUNUVGRlcnNZTTNhci8rODlhRi9ISW9UdXdvQ29vRUVVOEZw?= =?utf-8?B?bDBzNXlFMHZjYldaUUoxay9qOUNFdjBzYW1kd1hXL0VFSDVjT2hqVUNGTW5N?= =?utf-8?B?b1cwTXFaK1QxeXZmd1VzQldNL1VscE0wYWpmYUVuR1M3dkR0anNQOGJUNUVu?= =?utf-8?B?WmM2aGFsWmFCdzJScUpWcytkVEF0WWkvQ283aktjT2NUU1Buak5kMmh3c1pj?= =?utf-8?B?ZFQzMGw3V1k4M011VjNFYXZORDE3U1dPYzVMRk1tSlVyRkNHcUlGVUIyTjhM?= =?utf-8?B?bHQwRzVVY24xSkRqL2k2S2pxQjNNNmxUa2Ewdkk5a253SHl3bE5jVlNGb2lZ?= =?utf-8?B?dlU0QmJiQ25iU0ZNTkZUeFFQUDZHcjd0RVh4ZGs5bW9XSGwrQTluSU9GR0JG?= =?utf-8?B?Z0xIeWIvUnF0ejhHVHNKQ25WSThiQmVrVWY1NWg3b0hhbEgxbXlnMTlCQUM1?= =?utf-8?B?Wkx0T2ZEakRqRWtoT2p1K3RhTXczeG41Wmd5S2RPVUhIcFFWMjRmbllzRi9Z?= =?utf-8?B?UFVYS1dsR3JKSHhSNE1UekpjT0xNenVhWDR0bTd4b1NUc2pqMFZwNDg4Sm5V?= =?utf-8?Q?Yr/r2j3RmEVHW65PNT70Amh2qMmO0OVmwlX5kdJ9I7cQ9?= X-MS-Exchange-AntiSpam-MessageData-1: o496V0oMOwWCnw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 83ddcd23-409f-45a6-6567-08defc2dc811 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 07:04:29.4624 (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: mcKDufNJQ15nTR0JHd0La731vbh6eHaE+Byj/0IhYqvFueTqRTdZRsTLYrA9Y24dgSuH7Si3GB4rBfjjyXXBNA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6732 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`. 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 Signed-off-by: Eliot Courtney Reviewed-by: Burak Emir --- rust/kernel/bitmap.rs | 68 +++++++++++++++++++++++++++++++++++------------= ---- 1 file changed, 47 insertions(+), 21 deletions(-) diff --git a/rust/kernel/bitmap.rs b/rust/kernel/bitmap.rs index a43bfe0ec3dc..fdcfc0409773 100644 --- a/rust/kernel/bitmap.rs +++ b/rust/kernel/bitmap.rs @@ -17,24 +17,57 @@ /// # Invariants /// /// Must reference a `[c_ulong]` long enough to fit `data.len()` bits. +/// Must not be longer than `i32::MAX` bits. #[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 +84,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 +141,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 +440,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 21:52:48 2026 Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011049.outbound.protection.outlook.com [40.93.194.49]) (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 7F6923B42E8; Mon, 17 Aug 2026 07:04:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.194.49 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950279; cv=fail; b=tqxz0LXu9Ev77K42jbarONu9/nesYTIudEQgTWDJQP5je4me4barWPMtR1h8JESBfC93L5VaDoWRhZvWfvbVSruEDLew4s/U3Ktx47MOlOZtuLjeOvexrGIwe9x/kyWrttfBKqFbJsaC5d7MY3SadyK+6m5f169uSJEEo6WnZ6g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950279; c=relaxed/simple; bh=vZqrhQI2AUUeTR8lGPLZXIGp33coE4MsCMkSBLDQ14Q=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=pV2LNqwpF4/waWscqA0Uz372wWLLPTQz5gllgOZ+N5LbSMjXAGWPSvE5CgBFyhG7/+Djl5YNMq4v6N6DsHEg48V6X0nsGVaeEcuxGGl7fgQv73YPNBgPt1WMTCUdmb7Kk+OXYM5iaZ1D/abvNXBGoeomjw0Cslpg2bh8uMppfbU= 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=lI2SqdVf; arc=fail smtp.client-ip=40.93.194.49 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="lI2SqdVf" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lZleLdHw/PM9f4KUNFRK8pwhTMvl4vXiW6g671MJTrTXEuC0Wt2dAUidQ/7Clx0Z3ogi/hW567TAeM/YW1L81pcjLewg0330xbxPbTC3bI0dn/HkAGHJTP6+8MM4ooP9Db6sCCY/QPmFS09KTQ/v/CnIqY8lU+3g4ONqTlnxLXx22iM9GlYbVhO+YlejEBDBf+Hl/oOieT+FQRtMZ/OAbUR69/tCTK0xZaDNf7H2n/fEYX2xpMyyckUSEWRR/LX7ye1Ji8hDuHtbpEo0A8CD+nauTvk5ypVyY1V1LAyOL0p6HKd1ozo80QhEa2I1I4GdwzgD5QEUACQ+/wAw5grJVQ== 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=o9lL4P0+kPlectpChZgVcvyHpgOWc/edGfJoeTv7RIY=; b=qm6oVRqxi/S9swAVOqQaNShZVI5tXZqDvzJdOWitrPaNT8UUPsPhfsNF2gpExxe7AeK/FB9GS8/QRDO3cOpgkQOKz+lJ0TXG4YXlpGm8AOMC+6Ct4iih4gCZvcetusNhdVBKrLa3iwdfCu88vMPVklKMa6QC1ZnQSmuxX92h8OMkoqc/YzgBBmBxMfLaxnHzYELRWRbljKxgsjpIynfPMCC6Q9cilRoJ78B76VYVG0EQJM1+9J/sq12K2RvchNcQlHVUF97FaxBN+4/lxyDOjBIi1qtQonp056V1RUwsd9Ywm9TyQmDI+8D5VnkOLp1+H4G/bPru1qb6kR0CpfMgsg== 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=o9lL4P0+kPlectpChZgVcvyHpgOWc/edGfJoeTv7RIY=; b=lI2SqdVfOt5ARAVrBT34NBuEYUqgHrLht5RTaETTKTcPL8oKyMSozFV4jFkvhvPjxOPovVBXdLVxpLvrz1K+e5/lBgqTBVEXgC5hZNUYk6AXLHroKCq6V2zBTS9X2qqCFjE2rZM/d0g4NiCRKHHJHvUjh1eAlFfFu2wA+8aygsiyvZzK9pvKwP/XJjkzSybu84Bw+Y29/UUjXTWC4QUQoB/W/jWAd7H8xX61rSqXmd1TIFc6sM1UUTCBlsbKHx5k+FJMZfadv9rgTYZljP77NqdqEK8NpY9fDaO4ug3r1h4xlkhRrLL1bGfqjKYNV5+BY4CULGdpsRxu4EDXaU0CoA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by MW4PR12MB6732.namprd12.prod.outlook.com (2603:10b6:303:1ea::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.11; Mon, 17 Aug 2026 07:04:33 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 07:04:33 +0000 From: Eliot Courtney Date: Mon, 17 Aug 2026 16:04:17 +0900 Subject: [PATCH v7 03/10] rust: num: add nz! macro for compile time NonZero values Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260817-chid-v7-3-a5872e64d8f4@nvidia.com> References: <20260817-chid-v7-0-a5872e64d8f4@nvidia.com> In-Reply-To: <20260817-chid-v7-0-a5872e64d8f4@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: TYCP286CA0034.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:29d::11) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|MW4PR12MB6732:EE_ X-MS-Office365-Filtering-Correlation-Id: 6e2e3e28-8c4e-4435-b37d-08defc2dca42 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|1800799024|366016|10070799003|376014|921020|10067099003|11063799006|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: RBmpQFXKOVpH2twPRPw3xljNDkWAh6c7EKEP3mR2ea0vHILlHGSMfIBmubifKz1Y9RbNSuZGoIxL4bvRIRoo0RoVD/31wHQOjsOwUa7PHLaIWJV4+Vmy8kK1j7mI3zh4ROldVTuLgCn94oUNqf0OqISJHbsBY1AO/3pSB2/Xabph47pjYuLgL/jgP689tedeIaPGPsOEFfGOkhaZBsZGHaiaG1esxauO9uK3ij4G9PRmHH5P3M4EB6PpDeajU14AdxpHRgVvjTEXNQZX0yWjGZhwGvKfUfeEUXeWz7nEDsIEz9M0sSsxA4jYorVYWBs2ozCEaT3xAvRRVbpiHgUxh4IMypgv+yr9LexqodnaqyNe8sw/M4oU22ahm7nqQd5M7LpXWHk9HLs5jF2B4G4dPsXOn5blXxoEP4c+CCNbusDc1ndYCK07C38H6Y/8Xw4KKFx2wx3vD7M4sIYoS5nPSievveI7z6AdI6DzDqN3PjFSf9WPimbTalNcxlA+XWexrAQE8nrfyVWGBakFtS4NeLJKXwhbZqqg/wzX5Nher6WpIvuR0oG64teGGyOAYmv2/wrrO367Ltgr8wcYlvRdoKqA3FytCOWPGvz4Y5++Q4QVeVnEbBm2cTKQmhjl2SFRasZUZT9LSouRit87IwCwZ0uN9poTZ++MCdGGIaWUmFHsxKd3V/YnBvPne2W8KNC0YgsZZIPLa4R+pofm9HlWVQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(1800799024)(366016)(10070799003)(376014)(921020)(10067099003)(11063799006)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QlVYbi9aYTZIS0VFeHRBYWx2MThQZ0VXbWx2Ri9QeHVnWUdBaDRxR1REc2hV?= =?utf-8?B?OWNuM0pVYWlEUnRZTURFd2lNRGFERE91VEhJZVVvL1JOY2VDN0ZvaXpUOXZa?= =?utf-8?B?dEpCUTRoN0JKSURaV1k1NW9sVmVlakxtZXJCRjhRWklwQnNlOXo2ZWNIMkFE?= =?utf-8?B?WlhMbHJLN2drMFVxQlhJMEtnbDlpNmdaY0N2ejBsMUw2VklTYUoxbEJuckps?= =?utf-8?B?WDR2YnFQSVA1TnNFU2NpcDBrbW5WOXdnK0FkemRFcDhHcjJYbGhzTWN3YlR5?= =?utf-8?B?dklvV2t1TFZZS1hQd3NjcmFtVFFSdldOSnY2TzlTZEpjK2pYK0M3MmpLNHEr?= =?utf-8?B?VGlOMVVPVFJTMHBpUEpRSjBkZ1RVMDBiLzNVZWJ0Qmo5YlJoRHI2eFVMSG5t?= =?utf-8?B?amNyZjFQK0NieDF0UUJnYUtMMG5mYnpCSjhlVEZGbDExWWJmY0VBVGE5T2U3?= =?utf-8?B?eVZNbGNJZGZKQVVEbjhDeEdpaDYyNUg3YUg5L0JWRFpZc25UNVdhUHpWbzdn?= =?utf-8?B?Qy8zcGpCOUYrQXN5eitYZ1JNbzRKUWM4OGRlNkNqVTBSNjNqdlg3OUFRTzdI?= =?utf-8?B?M1pqUU5VNElmODI2RjlDRUYyNkI3YytWSW1yRVM3eUFrSXhZS0FJQldhMDc5?= =?utf-8?B?a29ORi9mUjl4TW81NnNPTldMcGsvZlQrcklsM0hJNngzTWJxMXB3N1VxZVQr?= =?utf-8?B?bk5RSHo4R21NbFR3UkordU9uTU0wMEYrZDlpcDB0OVBnMG0xemFZUzQxTTVT?= =?utf-8?B?K1ZxN1NFUzZrWmQ1YmZqL29WNFFhUVR3ZnNRUlVlSE4xdWNBemM5YkdrVEM5?= =?utf-8?B?MjhXRjZWS2Nyb3Y1OGU5R0pxZ0JXdnZBZ0lFdmV3MDVvNWp0Z3o2eW80MytZ?= =?utf-8?B?YkxsN0pnMkRZSnU5YVR3Zlhoc29ZZEptTjVsMm9QbUQ2cForSTNBQ08yaXg4?= =?utf-8?B?eUJpdXBlRXVWMXRnK2dGNGJRbElVa0w2cHVIbnIwempXNkF5OVI0MXRNampT?= =?utf-8?B?TjBTczFxeG55R2k2L0plRzVnZGZQWWtpbkpmWWhVSFc1QUJ3cytoTnZyVmxS?= =?utf-8?B?aStaeVlvWGduQ3g0LzdQVWpvL2NhbjVKUjRlc05NRkMyVUw4UHd6Y0lLOVVO?= =?utf-8?B?cFlyY0lKU0tDcEp0U2dZR1A4VHdkeEFCc2UxbjFaZnVzb2RvMTAxMG1DbUdq?= =?utf-8?B?bkJzL2tWR1BvRUZTeFQ4b3VyUUROaTBRQ3JqTWFEUzEzd1JlQVdrclpZUWkz?= =?utf-8?B?WmFXMDgvMEtNYTU4a2ZxVXpCV2RsNC82ZXhBWTNyZVVOeFNGU01SSm5LbllS?= =?utf-8?B?T2Z2RjJybTBlcjZYVWozRndFbmVycitJREpEMlJIQnJaWkl4dWZhVHVQcmEz?= =?utf-8?B?ZzdQS0N3K25SbU81allYanlLcTJUZGtGNDBMT3pDK2l0Y1hyWDgwcklFMDdk?= =?utf-8?B?N2RmdlJxYkJDa1ptMlZmWW51OUN3elZGVElSUWVkQjVuSWZ2d2ZRbTAwTHdW?= =?utf-8?B?TTJDa1ZOa3ZaWkJBZ0RuUUx5RW5XZi9UWFNLUHMzdld4NWNqZitkc0VEckFv?= =?utf-8?B?eVBRMFYycC9XdnhDR1RoNVgxK0tpRCtxUGY1SEdFVVBTKzNEMEM0N0sydXJw?= =?utf-8?B?d2VIMWJNRE5pUUlYWlVXZmhscjhWZlJPdXhDT0NUMGVyd2o2dk4yNkp3Rkxz?= =?utf-8?B?SmNseldMbzVtR0E0OWZnYlNDWS9udytXY2Z5UUNmSHh4bmJrdHhnUGExOEFy?= =?utf-8?B?cTIvN1FqWGZzMmNPWCtjcTJ6R0J2TmJ3citOQXc4SEI5VTFEeXdUMDE1UGUv?= =?utf-8?B?LzB5QkFRSU9uMXhQbDNaWFRzOUdhRkNRSDAvSm4rSTZ1QWpGZzRnSzhzTVln?= =?utf-8?B?alZhZitEaDBvRXo3RytXRDVPa0w3b2VzdCszUUN0RitwUGtqcjAzMWcrazVl?= =?utf-8?B?T2lQc0Iya3IwUHA5M0h0bkxsZFFTNW1ldDhzNlA5RUsrNzZISlVUU1JmdlM2?= =?utf-8?B?ZzZRYWhUWGRFZTRReU5ybXY0VFpySlVsMU9QeSt2cU9GTHJhVjFBa094R2dP?= =?utf-8?B?L1lleUlTR1Q0ZHl0d3M1UEV1U1FLV3FqL1lkWEFpNUFRRXdjWGlPMUdBVWhy?= =?utf-8?B?ODZTUUoyUnp3cFhOd0R6VmluY1MzTmVaQ1RmQU9CMVB4di9jT0Nib3ZSQis4?= =?utf-8?B?dVdITWVLOFlTUE0yZmJNWDJLQTZ5bEI2djVyUkU5NVZ6RGQ2TlJYVXd6RURL?= =?utf-8?B?a05ZYjdsZk1yc1BFS0YzNkJLSkhQTW80TXY1cnRVZS9USzdZSmo1RU5sVFlE?= =?utf-8?B?ZEtmQ2VLbGZsZEtjT0szQXlsZFl4RmRlbHA5Z3VNR0N6T1lFNnhiOHB2Ti92?= =?utf-8?Q?wPz4E1kAIx+MvSXgALKHuZnW6bXJIFfBd0ZFlF5A13J7H?= X-MS-Exchange-AntiSpam-MessageData-1: be7hgYbYIce1og== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6e2e3e28-8c4e-4435-b37d-08defc2dca42 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 07:04:33.1213 (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: NLodgFTOxu/t0sFaZVjqYIqyPrCatxhzceykskKDRIO0Hl2SqMEmhZnOfZuPdRV1qZhNDIgXZ0JKMndeUoTnXw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6732 Currently, using NonZero constants is quite verbose. It's unfortunate because it disincentivizes using it in interface boundaries. Introduce a macro to make it nicer to use. Link: https://lore.kernel.org/DKO414SNC0B2.248FUBGJGSPLU@kernel.org Signed-off-by: Eliot Courtney Reviewed-by: Alexandre Courbot --- rust/kernel/num.rs | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/rust/kernel/num.rs b/rust/kernel/num.rs index 8532b511384c..055d23ca7fd1 100644 --- a/rust/kernel/num.rs +++ b/rust/kernel/num.rs @@ -7,6 +7,29 @@ pub mod bounded; pub use bounded::*; =20 +/// Infallibly creates a [`NonZero`] value from a constant expression. +/// +/// [`NonZero`]: core::num::NonZero +/// +/// # Examples +/// +/// ``` +/// use core::num::NonZero; +/// use kernel::nz; +/// +/// let v: NonZero =3D nz!(8); +/// assert_eq!(v.get(), 8); +/// +/// const N: NonZero =3D nz!(0x10); +/// assert_eq!(N.get(), 0x10); +/// ``` +#[macro_export] +macro_rules! nz { + ($v:expr) =3D> { + const { ::core::num::NonZero::new($v).unwrap() } + }; +} + /// Designates unsigned primitive types. pub enum Unsigned {} =20 --=20 2.55.0 From nobody Mon Sep 28 21:52:48 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012063.outbound.protection.outlook.com [40.93.195.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 1DE793B6BF0; Mon, 17 Aug 2026 07:04:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.63 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950284; cv=fail; b=tkTsECKvuIC8fA+ZfCYPOO3oPVEQJlw675QoCyDvUmGc+Kz8umdntdhX1QXUcpSa4rxInrY3nWCxjpNAAEwJXL8HwLDx5TrWaTHbYiYyovF2kqiKtwSJWu55GrhlgNMC+HhGfc/6IxdjcsU5hTO+8IpZGz2ywtE/qtBi1FXweVo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950284; c=relaxed/simple; bh=q7qwZWJmOQsrzXkwZ751FMVB7VFA7sItB+ee9uT2QyM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=KU75SZY4iscgzKSuSOhOAPXC2jEzaiAlrERYsP38bN808cN2KQofbU/8EUWllisKI1uFt7LcoQEArndeE/NqeheiSE3diBBFy2kiSFl0XhR8mRZd+AJetz8AKRtCyKk0IBdQsrHOmFk7DxHmUQZ9PSswjF/JamrAyKFWgeqdFYo= 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=MUiuJMqq; arc=fail smtp.client-ip=40.93.195.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="MUiuJMqq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=zMe3db2omz/d/7pNXApIPVAHId4RuVzcbNu1NUcPJSQM6VeBzuaS17h8NsODvh3UZOOL83I2PNv/2nGBjiIOc2lvNDa5t5b5CS15LF0IQ2SZXyhTM6twHtYrQaGxPtRcZa+erbLrPVqGovms+ud0rAPkfEk+W5faLVAplrfirD+vY9l38wXi/Xn1hLxvlbp9vgzakgorzQFer3BlyrFcHf//V9R0ILiZ+4x7cZJy18SjDxQH3Nr4Hc1LZEXpLU5EEzmBaeahIvOzACeB7Au+o2nVYm+wKKnryhj2xr4nrhde2M3qm2SdPpBn1cCd3uJcPBYZMJ442DBxnAeTi1XmuQ== 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=Fh763tDgoew41ixQGEFs4xuHSIMXExrr7ffNCYFxu68=; b=HYzhl/a4TfCuciEMdOsxB/Q1BMoe5x02seOpPtE9lxnohoDjSMztibVQGfH3s7AxmD72EYZxtEBaT64iDdqbzVfnXGJBuNZonn5LoTWmS/y1tVoZGqsTN/r7EOppqGlJVpNG+MLydQr/In4uBCzLXVyyVKJzVxpICHsORGy8YPF/lxXLKivqy36H1hQjb4GflaU9PofZDcTqcev5+qlu0o6dBbfmt05pr0z4iFjGVsCO3AM9AUwcfRYhiUnxbvWfzWbA6ucCiYTAC0wF2F/UWE31XNl+Xoxu6ti/lvJqMbK3FbGaa9y+7WXqPxhsrHu47nRBztLJZqi2w2jMWiNWXg== 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=Fh763tDgoew41ixQGEFs4xuHSIMXExrr7ffNCYFxu68=; b=MUiuJMqqotmoA13IdfBLc4z57f+/SKb+YF6yT5gt2KCbfZFD6EJ7uXEVLQWl/4eeYv0wmZf7q+MiS2PBCj1ZylBYlS0af7oOEKdMX5YWKpyYKLE0TDZg4E4mYLjbZL3QzkqRzvfBr8HlBduz9w9WGmDHCjgIj9gKUnK+dZW9ovwwsi3axda+uiMGdTYraYX+2cFE7Jd8AyvrDFVnGj5KsN1LIbSf2T0rFhdCzCOy6VaXak2nt/wn5YjQrmRl4mQ000tU4ZfqREoqXO9IznjK8H9uI+xzB1h7tcp7OpM5PsVBVP4aWs1hI8kNJ5E7nyJmg/ukOZ9jbnXe6yLTZBLWVA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by MW4PR12MB6732.namprd12.prod.outlook.com (2603:10b6:303:1ea::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.11; Mon, 17 Aug 2026 07:04:39 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 07:04:39 +0000 From: Eliot Courtney Date: Mon, 17 Aug 2026 16:04:18 +0900 Subject: [PATCH v7 04/10] rust: sizes: implement SizeConstants for Alignment Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260817-chid-v7-4-a5872e64d8f4@nvidia.com> References: <20260817-chid-v7-0-a5872e64d8f4@nvidia.com> In-Reply-To: <20260817-chid-v7-0-a5872e64d8f4@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: DB9PR06CA0009.eurprd06.prod.outlook.com (2603:10a6:10:1db::14) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|MW4PR12MB6732:EE_ X-MS-Office365-Filtering-Correlation-Id: 3a2a033a-82dd-48d5-a050-08defc2dcdea X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|1800799024|366016|10070799003|376014|921020|10067099003|11063799006|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: ebt9z2cyFpd8cE1DAGbse/XKh1y8tHtitlqRffebnSnwRpBxtpMX7dWUs2DtHBClvDRzWQ8NxuxJpm1jOQh0wbFIvo+fxmhWFxLuu4FvAHOzcOPLynJop+XJLZUaRY7wNbskiK3+J/ZJR+AyLBcOIvXWUbS5qQDAORq1Ly/c0pDSR3BZWYa+SL0iEoVUwQyc7L9dTjnqDcj/nLiYjWv6aFRT10/C2RQG1ZbADVYhXVRmkPPp8WKLzYWVEZr/SduMbxq46C4/WRx6D8RifoKMffEhsy+mLcgxpZ717Et/ixkkBZlRATk0Ab/Sdn8yAyFpzYK+XC4dKPjb5SAWb+Lc/OGVtiAw2ZCeDcRF+SGlTmwe3KZRns0+mgFj/Yaj+upMnNc9qybi7LALDTJ2gTNnnoSHVLmCfyRhpd54IFjshP/Wg1y8bKAdvA1507/iLcYIerq7FtV/suLY2YZhFZt/ScRVVyK92S8XhG8uQVtXQ/ZNBRAAS7Nntr3F5j9dRjadxC8cnVjVAzLndCmxXLD/KkL5Xti2zQb6PW/rnL+if1QyYUfC+Ad7pleTU/1vnVM5uypbjo1oDYDxlTTJqj7rVr9TdbDgwlNVsXJ6nvqBo9z4u0/9SszyzH4a/guzRdQ1IwPUBa/HNfLbtcXKN60XQrG3qriS3o2NCi0VP5MXQvZw39V7dI0hMleBYSOszAW3yFh6pcyVknMYkVtBmaDi6A== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(1800799024)(366016)(10070799003)(376014)(921020)(10067099003)(11063799006)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZEtrTkgwNHEyNWFxNFBmZ1dIdHROTXRFOER4ZWlZakpBb3UwZkZwb2xmZ1JC?= =?utf-8?B?cmlDMFZRS3hIR20rUEI1UVV5andpQmppVmUyeGZXVzZtSGRxNVdOQ0ZzS2VV?= =?utf-8?B?MVU4VXlDQzQ5RHMxcEt5dzR5ell4cEVvYnRxR3lncEIxMjZCVmxvd2RNV2Jk?= =?utf-8?B?MldEcERRMnF1dzdGb1JhWTNmNGFCMktNV05IOEVMdDk4YStsd3ZvakIrZG1B?= =?utf-8?B?cU5yYlgybzlqb2tjcUVsTGxjNXU0Mlg3aEdLTkViQ2NaallJeEJmRm5WZjNY?= =?utf-8?B?bEw4U081dVpyUlNpMngwWnhzcGQyK2ttVGMzNXJNeHErMnpPb2xqZUhIdFRM?= =?utf-8?B?T1lMZFJXczJ1Y0tPOG1FQldFdkZJNk4ybVZNd1VSOFhXWlhva1RoWnZIMDZX?= =?utf-8?B?cWM5d2JTeGpxVmU0T2h0dmVlNnJqR0MrZUFPWW5ja3htNDBjamtmL1RPREo3?= =?utf-8?B?VVltR1pjMDRLcGloQVdiVlBNRHNxUjNDRlVqRXYzWDNGOWRVdHVYK0lSK2xE?= =?utf-8?B?amhoN3NqaCtQWkJ3czJ3cmw4cTFiWjFFZUhmOXR1ZkloQ3IvUmpJTXFISXNv?= =?utf-8?B?K2t4eENQZjZ5QUh5NWlDdGM1UVJUNURKazVxQm9RMFlXVFVlN3oyak9QMFJB?= =?utf-8?B?a0FqNHNpekM2NzQ4R1N4S0xDYnkyakZ1WXIrR2FQS1ZTekYxS2IxZkxUbXcv?= =?utf-8?B?V2owa3Jtb25HckpyT1JhRnVubjZJTDR5N2diWjE0cmtyZVJnS0t6a3R2dEx6?= =?utf-8?B?MWJEQjdDWjZ2VStTNHVqL2U2cEgvRmhwclNVeVkvVTRuOWdweDZzRGl2VVo0?= =?utf-8?B?K0Rsam1Ncy9lZ002QnNsNkxlNGNIYnh1eDRFR1QrSjROblNLWjZ1UTNLYTNh?= =?utf-8?B?RklwYkJiVzJ3Z0lPQVJYWElkdUJhVkRNQjdUV2RXMElLQmZzaHhmWEszVXg2?= =?utf-8?B?ZlpQeTE1RHE4SkhTRlQ3WHl2VzNxV3V1V05iWWRpZ29rdVhteStXdlRyVGdE?= =?utf-8?B?MWNLWStNODJIaEp4Ymtsb05wMVBESWU0RDhNbFBkdEdjUXFzaTVXRlFKVTZ2?= =?utf-8?B?MXp4TWgrUUZPdnF6KzRDUVg1c2lndFlGTW5KcWFiT3RlMEluUzZYaU5Rd0Qz?= =?utf-8?B?U0F4V3NjV3Y4aCs3WDIrUmI3RWFxTnVJWThma2RYbHRiM3I5cFBwbkgxczRD?= =?utf-8?B?dXJ1YTkreU9SRS9yUEF2NVdBbG1MUkN1NWRFNmRPcWNwbHIxaTkrcGlML05Z?= =?utf-8?B?RW5VQ294cUUzdDVIMllWVmhWVnp1TGdmQmYzMjFDaTEvSFJkRDR6dHVoRHBR?= =?utf-8?B?R3U3bnBCRkpsMTRzck5IU08weDdabytsS3N2cDBQR3Jyb24rTjhmY2RJUlhE?= =?utf-8?B?Y21iQ0JuRng3NGhUK3BlQnVIRU9sUW1qclRtM0k0eGVRalJNQTNVUU1xMG44?= =?utf-8?B?S1BhM1Q0VTlESyt3cGJ6blZpS0svQWwxNlBIUGJVWHZnTU1CS0pkSjRHUlRR?= =?utf-8?B?OFBWUldSTTMzUnFSbE1lZ2RSQmNLRGNIczYweWRnM1AyMDBDNXlVcHEyZjE1?= =?utf-8?B?SmxaemEyanM5K3EreFVidThNTTA4cDYvckhTRjdXTjY2dW9VNm9POVpVREFt?= =?utf-8?B?N2ZtZTJPQUZDTTkvVXluTytISElLMkdmL3lqSFo4NlRabVVPaDM3cmRxVzkr?= =?utf-8?B?Mk9OWTRXTmFJSWhYcHlRU2tXSUdrVDdWa0gvUWEraFlOU1l4bThkUEhuQ3A4?= =?utf-8?B?VklmYmVBem5JUTBKcGkxbGRKcGoxRmxwQlVjSGtDN3E2NUhPU29HM1RzUmRW?= =?utf-8?B?RmRvMnFWMmdzdnk2RW9aVXhGNUxnclRrK3FsajhIc2RuV0NNa2RQVmF3RDN3?= =?utf-8?B?aCtXL29rL3BFaHJaTlVqS1NWZ2dPdVVLRkNqblhkZjdwaC9vUkhYTm1MRDlo?= =?utf-8?B?TDZHU3BpQ2RRcE53L0xxUjVkY1lMblEyT2tSWGZHd1g1SXB0S3JyeXM0a1NG?= =?utf-8?B?eHJDbjBjRWFHWjhUc25TbG91ZHlSbUtWWmtIZW9wSjF4am5PMEtRVHNlUG8v?= =?utf-8?B?dHo2Wm1pSlBEd2IwdWRuUHE2SUJCaDdHY2lWK2tFZ0JwMC9WZ2MxYm4yZ2E0?= =?utf-8?B?a1I3L1d2eXlSV3lLMnAva1YwZUlvWEhpUElmbFlUSkFxaG14NXVXR0dzTWVn?= =?utf-8?B?QjVCTnh1cUlxcFJ2MFBISk1KaGU3S0hiVm1kT3lLNVBMYitlQzZUYWl0d0tJ?= =?utf-8?B?M0JQejBZa2E2RTNCSzhDYXZDa2lhLzFkYzNORlVHVTRFZjNObk9pUmJGWjlD?= =?utf-8?B?a1pGbGloQ2FqbWV1ajJ4aWJRMit1N0pSbVdZLzd4WkhJWGJtZjRQOHV0ZWYv?= =?utf-8?Q?QRRrTgQUQVcbXZfpB9HwdR9MxnZI0Q3JNCvuOnoG46Stz?= X-MS-Exchange-AntiSpam-MessageData-1: jvPr+pxAq0BnNA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3a2a033a-82dd-48d5-a050-08defc2dcdea X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 07:04:39.2772 (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: aDf/gfnicau2AirYn+bRRFKNLUu4lwrTPTH0JCGabUucFDn154KQ/I04Dt5Tl0hi8EwF2B2kpHF/0VvS2VDT3w== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6732 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` and add some more size constants (mirroring include/linux/sizes.h) so we can write e.g. `Alignment::SZ_8` instead. Link: https://lore.kernel.org/an4xDp29VX8Am0uR@yury Signed-off-by: Eliot Courtney --- rust/kernel/sizes.rs | 47 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/rust/kernel/sizes.rs b/rust/kernel/sizes.rs index 521b2b38bfe7..825d6b566952 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 //! //! ``` @@ -35,6 +40,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`. @@ -85,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> { @@ -99,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 { $( @@ -117,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_checked(s= elf::$name).unwrap(); + )* + } + }; + (@impls [$first:ty $(, $rest:ty)*] $($(#[$meta:meta])* $name:ident,)*)= =3D> { impl SizeConstants for $first { $( --=20 2.55.0 From nobody Mon Sep 28 21:52:48 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012009.outbound.protection.outlook.com [40.93.195.9]) (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 A45883B637F; Mon, 17 Aug 2026 07:04:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.9 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950289; cv=fail; b=jumbz25MGc8bjN3l9RzVA6uA+gP5LTgnUclQsH6UAeTD2ZMLZ7Voj8B6sIR9s0l4FbaLXWW+KHNM50vb3mJHO1yNLLoykBXgys/iiwNl4jKHU+j5bmsCAr3SMx+E9YJIc4j6hgk/AleQa1gsyrvh4ZUqwIjwtRFTpwyoJc4lFeU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950289; c=relaxed/simple; bh=2j7eK9CYFIdE7cYEReZXiSGEW0or3ztfNzxflCuTeGA=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=TgQR9xp6xmjqJ7oowFkAsHi8ZkulJqmWC9UInOK6oh7V9R08oKNqeMZmd6DIMPKhh35tjru0Oko5aOuXoIQReHhBJUW8PfJyWRc1CBSpiBGfTxEQRKsxwbQAPNcmsLZiRlGsdXfGWTdiBW0u4UuJvubJzWCKCSVU2kvlyA/zXFk= 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=C2xHQuxm; arc=fail smtp.client-ip=40.93.195.9 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="C2xHQuxm" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=o3Gyglz6YtE1J4CVs4Ok+o7ocyE6H0LhWiSZ5UZU9RitVz9HUy5bfo9yQ5l0pI4PA7ImWngyQnTEr54SyE+sz7abqp7FjY3AVth+jdeenzW0pBL0JAeFF5oAJ9gokpPzaPR08z8VZG6LD/xIJXn2O4ktlQiWAu+Kxp5YMSfetH38kqKG0gAMbQezdM/7EU9D9cBeloVlwehUfmLGiW2CfuzXGITmhHXRXbLDr23UERm9Us6ftVNfQkndT+aeFMKnSGeAyYru3JZtcXb7OxMuuxB+HvS8ENPxDx/HPMPcumSQKY6z31UmvF1LG5KkBV/MoJugDnlm2LFJK894M7Of8Q== 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=2t2rB8RaypvDvjtkn730BLj+dIrVOAUvW+9i5po3Iyc=; b=GiK1p98+Js1+qQNF+ZPQsB7B/W2ojCIkWCRUSuaoDVcADooDWmcg3wiLkIKWPMowndB2FXt8Ga4JrwCDCHUfHZfD0aVu6Kpz2ac+WEGQDdLFG3vY+7SZkz8Aa3w/4ZaAO+fyiPWXUyLST4sHJC5i6SoDnTT0gHQVBPbM8BZeUSOKoUrddCVCeTQbinAy1kauCkrq0q0VFekL/2W6Aa+rTKgL9Ei0zwEirTbLAoukZGZU06BgmFY/bEz3Tw49rfA+OiqtCLEpIFgVCSeh3jVAydhwV5RL7fYvd/MGm0arnvGJ+xDHY9e2Q8TouxGJwYwMXRy/To2pmzG/+P+oGnggLQ== 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=2t2rB8RaypvDvjtkn730BLj+dIrVOAUvW+9i5po3Iyc=; b=C2xHQuxm4SB4jXa560NkzQ03Wog53wJaa4R5pK2xrakptGdGW86Ty0DRCGfV3fdoW1M02qbbxc2ka/dWR3xzJ9oZL2CpaLdwYo8fOdQBJLkfs/RQuP6R3VO5yys/uCZ8Ja+AvXpyU9vmF8DMr9v3MMRjx88FkJt1v4esmulL5lG5VsO1k3VuHjw+EKIuUFr6eZqAzXhO8sSEh+irhwV/ImXpvaLvnUDc1FBiuh3rbthOHt6xJV6vyqEE2knzKIJr+hpDurFtkw0EmxSKCZPdzNyAWii6KEJruCg0Au60HmUbc8mIZdDcln5sasmZ5V7DCFssx3lLGQyEpwE6q4FrOg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by MW4PR12MB6732.namprd12.prod.outlook.com (2603:10b6:303:1ea::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.11; Mon, 17 Aug 2026 07:04:43 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 07:04:43 +0000 From: Eliot Courtney Date: Mon, 17 Aug 2026 16:04:19 +0900 Subject: [PATCH v7 05/10] rust: bitmap: add contiguous area operations Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260817-chid-v7-5-a5872e64d8f4@nvidia.com> References: <20260817-chid-v7-0-a5872e64d8f4@nvidia.com> In-Reply-To: <20260817-chid-v7-0-a5872e64d8f4@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: TY6P286CA0017.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:3b9::15) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|MW4PR12MB6732:EE_ X-MS-Office365-Filtering-Correlation-Id: 260577da-05dd-48b8-3aa1-08defc2dd038 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|1800799024|366016|10070799003|376014|921020|6133799003|10067099003|5023799004|11063799006|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: Koya7WmKvgjWWGAYQkOzocRaZu+yLup4RLrRHP4bw7HBtDrQ/w9X4ignk96Ai5yUsa8qJ6+PrCpC9ODVHbbQwaApTN2DVR8uEc5SSerDjmyt44jrqWnnLoIIqfqAmCCAVm8PfZnZaZyPe26DZ0u+43EYbBLHRtsLdYSniLzsIDnfVKPjFD06fV+uQsy/RW2vDvq53hlq+6QBg96e7P7jBLiW7gFJzLt9Hylbjq2FbBALMzbgym+uIQaIV9lCb7/FbqWkKEIKH3rbwB0rZItTXvc9ATVCvYFTahHiMNpaWXP0HM53novV3fUQe1X/2Ycp2WTJuOS6Ob2l+9rS1G/ScvGAPoEAZ+d0nBZBOa/bpVWVIEiLXUftlki0tTPBv3lzdN5mfsTvIJBgeWvu8c2qe797EC5g3D76ypyPFGjUrrYMR/wFhBxTYRKKdTnJrmQJS3YLkl6Ue8m+7M5UouVfzGrECLVoYwrFwN7/GvlXuh3thDdy4nXXLRpt5cGuDut1m7FhLtZWR9sIq4DxhE6xrPUTbLHhotqFjDpobtZUes5Y/vzCJ61SZLfm8VWylfNlIOhnhREyjzabGUiYEzQrIK8DlIix30t3W/+lCOhxu+13LFk6ZCoeS6fSdUstUozT7uo+Rr9iz5B0rRiKMIrMcuXKYQ8RACCzGW5gwIWVJyIP1j4llUf0bkImK676HSKoKLSRbV2wh4jO9aiJSqA1Og== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(1800799024)(366016)(10070799003)(376014)(921020)(6133799003)(10067099003)(5023799004)(11063799006)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?K2F2YjJ3bjB6Zmc1eFYrbHI4RUpyNi9SQ3hCaHBibmpMa25CcnFXeUp2N01Q?= =?utf-8?B?aFNQNTdzZitESnhEOFpBZGhKWko5TDhaUFJpNlh3dFNENVNUcG1pNmZDejdS?= =?utf-8?B?djIwTmZnY3FZVXRWNmlUMlFRaTdTa1U0NzhjcjhDeG1hNnd0VXZBc1lLa0c2?= =?utf-8?B?dDdnbzdiYmtlOVR1bE0vUFQrUndVTG1LV3JnYWVKQ2dGcGdXaFhnYU1jRUcr?= =?utf-8?B?MFBOaW9ZQUxCaTV5TDNRdVJ2MTB4RDZRSlhWdVUvUXVmVHRaenlNeFRPK090?= =?utf-8?B?d1N3d1l0WVBQL0ZNaVVaVlVneUdIZzNQQy9MMzFobTRUMU9Wb3V5Y3AxaWhI?= =?utf-8?B?U2ErNDFqb0pQcHhZT3B5SE4wdklNZGJIV0tCMkIwMGpDSVRlZ3cxY25HY3Zo?= =?utf-8?B?N3E3THNnQ3dnSklIQ2R6K1JzU3oyTTJrd1MvL3BxMXpFaHpYN1pic1BZNzhx?= =?utf-8?B?cDl5MVM4M0hvODlMZHFhUUh2UjkweU0xM0tyYmltcXoyODJnanFQWldOKzBv?= =?utf-8?B?TTFiRXhvcGxSSGJ4Mis4TEJockRqQnlKYmJOaERpZGlIUjJRaytTb3ViQ2lB?= =?utf-8?B?em9VY0c4dmpxYnRHM2VKeTdSUmNWa0lMWFFtb3h4S2FnVkN4QXRkOGE4cG9o?= =?utf-8?B?NXpTU0F6Q1R0OG9pTEpQV1pVdU5JeEJRbVJacEVpUUg2eTMxV0pUTFY5bDlJ?= =?utf-8?B?d0xMVWU0dEFIeTFNZ0Y4dTgzUG43ai90WjFocy9XNWM4ayt5ejVZdWN0bVRS?= =?utf-8?B?RTVsUSszdEMrOERQbmdMTG9FSDZiSkhWeGxqMVRWTTNIOHVQSDA4UVRlQlhT?= =?utf-8?B?UmtJc1d1SWZiUFVjaFN3dVpkdkd2bklOOXlINzY5REdxQTZsMlJWOFpTRnY4?= =?utf-8?B?REc3WkVSaVZ6dndkY3k3TnhyYVNtZThQQnVhNlBsV0N2YlVReGtHMGJsZHgr?= =?utf-8?B?TGNNZmY4QVB1eXBYeGUwajhnSFBzTUZsb0ZRRXlVSXhJKzExUGhaOEE0NGJU?= =?utf-8?B?a1BqTkZFV2lscWRBTTJrdUZYdnkyVjA3R1VVTlc4TnpwQ1cvV0YxS3JiaU5r?= =?utf-8?B?S3orREMwMlBSY292dWtCMkx4Tk5LQWlmdGZLUHBtTWFoeVc1ZlFrUkltVVI0?= =?utf-8?B?dzJLamtRNkwvNGVRd2xhQnE4UWJkL3pqU0tWMVlnamRiZWFsVmp4OW80SDRr?= =?utf-8?B?YWNNUzlZNHRRZ3lyOWg2WW93ZWRSelVOa2pRSExFd0FHZkRxbTRzTG9NRVdo?= =?utf-8?B?eUJTUHpvT1FWeU1zNWc0T3UzQ2RzZ0tkUHUyYk9EdjZ5MitNWXo2dEl3RDR3?= =?utf-8?B?VFg0MUZzQTNKNFRMYU9yVFFudWovOXdoVCtlRkMrVHdSeDVaQ01MMTgvc2Va?= =?utf-8?B?V1BPUHJETFZGRFB1M0llYUFUOWUycVpYVkFPRUdNRnlNanlhc0ptYUFIS3ZM?= =?utf-8?B?b1hLSVJhWEtZelJmTmx5VUpOZ1lraXZOVjR1YXJsZmlKLzVBNlNJUFVocWhW?= =?utf-8?B?T05PcDJHSmQ0UDI4OE80ZThMcWoyQnlDb0JCcGVtUmlFV0I0b29RV3JKUVZE?= =?utf-8?B?U2lTVmNrV1Noc2xVWndRa3N1ZldJN3RIYTdDcW1YeUdqSGVIb3lZZmIyNzM1?= =?utf-8?B?UldBQnE4OHVFNVVodDd1eHN2QmUrRmw3UExMKzNOSnRXQktTQ01jQWNsaThJ?= =?utf-8?B?TzE2RHdodUh1cTIzb2NDNTRCeXUrcEdValMxTmFuT2p5ejI3RWZDN0VXUDlv?= =?utf-8?B?bElnQjQ1WG5OOGZIZVNQZkVTV0pJaTkyU0NuYjlFd1dsWGVaOTdDVkI2OEFs?= =?utf-8?B?SW1HSnJDVGh4NWFBSkVjeDkzTXpncC9hUW0yZVhLQ1N0UDBtMmhOVXk1aHkv?= =?utf-8?B?dFpCOUhlQ1F5cmYzbjUzZGZuUHhIUUh1TFlaRjBRbUpxMnl1SHVyb1NTdi9Z?= =?utf-8?B?U0JrQWlhNFF6Y0ZCdlExZUdxR2lCVk8xbGdEaUt2Y3JZZE5mT1FjTTY4UTBB?= =?utf-8?B?RDlhQ1ZVWENXQ09vRGhUV21TRFhoSmNWQ3BrcDBzdlV5SUZxTUVybEJGU2JL?= =?utf-8?B?TDgrcllicGsrVytrT0QwazhnWWUzZHp6V3ZlbHFXM3BmQnBPaFptaUZUSG00?= =?utf-8?B?K3VoMDl4VlNCTXdFQ3k0UU1hcUJJRE5rMzRacXYxVmlaL1M2QmluL0kyd1lD?= =?utf-8?B?THRkd21sYS83VC9Hc3kzSWpWZmkxMWdYWG5yQ1BGS2RVRG1qQkt5K2dvb3pL?= =?utf-8?B?NWYrbmVkaWJwd3VsNDVLSDhyWGZzVmFxeTRzb3g0eGdlOGZydEZ4QTJjRmRY?= =?utf-8?B?T243dzBKS1k1aFBacXUxN0RhWEJVaW91UGpSbkEwMVRWY3JxWFdDcHl3QlQx?= =?utf-8?Q?kDFqsfkNEilBY7utjUxroRuimwLQMY4+YblcAln8OlqWr?= X-MS-Exchange-AntiSpam-MessageData-1: vbNr//p1ravvZg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 260577da-05dd-48b8-3aa1-08defc2dd038 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 07:04:43.1124 (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: C35mb6COdXqiorxvMUCxILqxT175oxlJqQxO4qxBu3K4/obkyRTbImvHKbQg3NmqNhk3W+M5n5umayR3Ev3Rkg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6732 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. Signed-off-by: Eliot Courtney Reviewed-by: Burak Emir --- rust/kernel/bitmap.rs | 242 ++++++++++++++++++++++++++++++++++++++++++++++= +++- 1 file changed, 240 insertions(+), 2 deletions(-) diff --git a/rust/kernel/bitmap.rs b/rust/kernel/bitmap.rs index fdcfc0409773..a4997022ff0f 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. /// @@ -523,13 +527,160 @@ 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, + /// nz, + /// ptr::Alignment, + /// sizes::SizeConstants, // + /// }; + /// + /// let mut b =3D BitmapVec::new(64, GFP_KERNEL)?; + /// + /// assert_eq!(Some(0), b.next_zero_area(0, nz!(8), Alignment::SZ_1)); + /// b.set(0, nz!(5)); + /// assert_eq!(Some(5), b.next_zero_area(0, nz!(8), Alignment::SZ_1)); + /// assert_eq!(Some(8), b.next_zero_area(0, nz!(8), Alignment::SZ_8)); + /// assert_eq!(None, b.next_zero_area(0, nz!(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, + nz, + sizes::SizeConstants, // + }; =20 #[test] fn bitmap_borrow() { @@ -640,4 +791,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, nz!(5), Alignment::SZ_1)); + b.set(0, nz!(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, nz!(5), Alignment::SZ_1)); + assert_eq!(Some(8), b.next_zero_area(0, nz!(5), Alignment::SZ_8)); + + b.set(8, nz!(8)); // Now contains {[0, 5), [8, 16)}. + assert_eq!(Some(16), b.next_zero_area(0, nz!(4), Alignment::SZ_16)= ); + assert_eq!(Some(16), b.next_zero_area(0, nz!(4), Alignment::SZ_1)); + + b.clear(0, nz!(5)); // Now contains {[8, 16)}. + assert_eq!(Some(0), b.next_zero_area(0, nz!(5), Alignment::SZ_1)); + assert_eq!(Some(8), b.next_bit(0)); + assert_eq!(Some(15), b.last_bit()); + + b.set(60, nz!(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, nz!(40), Alignment::SZ_1)= ); + assert_eq!(Some(70), b.next_zero_area(0, nz!(45), Alignment::SZ_1)= ); + + b.clear(62, nz!(6)); // Now contains {[8, 16), [60, 62), [68, 70)}. + assert_eq!(Some(62), b.next_zero_area(60, nz!(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, nz!(65), Alignment::SZ_1)); + assert_eq!(None, b.next_zero_area(0, nz!(usize::MAX), Alignment::S= Z_1)); + assert_eq!(None, b.next_zero_area(1, nz!(usize::MAX), Alignment::S= Z_1)); + + b.set_bit(0); // Now contains {[0, 1)}. + assert_eq!(None, b.next_zero_area(0, nz!(usize::MAX), Alignment::S= Z_1)); + + b.set(0, nz!(61)); // Now contains {[0, 61)}. + assert_eq!(None, b.next_zero_area(0, nz!(4), Alignment::SZ_1)); + assert_eq!(Some(61), b.next_zero_area(0, nz!(3), Alignment::SZ_1)); + assert_eq!(None, b.next_zero_area(0, nz!(1), Alignment::SZ_64)); + Ok(()) + } + + #[test] + fn bitmap_area_off() -> Result<(), AllocError> { + let mut b =3D BitmapVec::new(64, GFP_KERNEL)?; + + b.set(0, nz!(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, nz!(8), Alignment::SZ_= 8, 1)); + assert_eq!(Some(5), b.next_zero_area_off(0, nz!(8), Alignment::SZ_= 8, 3)); + + // A zero offset behaves like next_zero_area(). + assert_eq!( + b.next_zero_area(0, nz!(8), Alignment::SZ_8), + b.next_zero_area_off(0, nz!(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, nz!(4)); + b.set(62, nz!(8)); + b.set(usize::MAX, nz!(1)); + b.clear(usize::MAX, nz!(1)); + b.clear(2048, nz!(8)); + assert_eq!(None, b.next_bit(0)); + assert_eq!(None, b.next_zero_area(64, nz!(1), Alignment::SZ_1)); + Ok(()) + } } --=20 2.55.0 From nobody Mon Sep 28 21:52:48 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012017.outbound.protection.outlook.com [40.93.195.17]) (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 2D8CC3B6347; Mon, 17 Aug 2026 07:04:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.17 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950292; cv=fail; b=rgNHL4TD58ihmBvAf1WHRYJiuzjSPY9IEcOBpvruktwmYwFqSVDloyh84va4yrmWF981D7jYBdZdl8f/EPxpYnYK5qUJcMIamcHITFlUitdHpYWsnlK+vtwV2l8yJNk+s4AIEUU4d0zl4SB5A/ZtBiUjIm7D33C5lBd8O05ve08= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950292; c=relaxed/simple; bh=a6py8uk7bJDBHimjUbZ5H0bSXzYiNFiUcqYMI/yNsq0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=SM9pxWv/mLD4umhcUSlre7AFKJrwwv64uN0vtCQA4KKWcoV0rbzg56rJMrZel7JqfmGpZ5szt/61P0RMfYDEe6h6aZJGYCKT1qJ6x8rfmWj1HCViZl7cwxTK+Ph7as5A1li9NbtQwY2NcIMzvvJ02v4UpDYLRaH0MBKVvf8Sq/g= 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=TQAKUw53; arc=fail smtp.client-ip=40.93.195.17 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="TQAKUw53" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=L4UXEfiYdtF+rRD+JPslcpmkn/DWOZabuzaM9WT8YaDVGnYdRdgJvpjViyYcYZvhiTlHgGEA3fyiBH2hF1jKrlpsT7TS4PdCovK8Rq3KKFK/U5JsG0P+fJh2XGCVtZ/e56BCfF/rzGH1PWZQZQj1rdkAIjCWXC6wUPfoqA15GKeerBJ6eUrcmJL55cqytp+VlPBCwaDpjDRUaZBwi4Jt0nDwA3OQaAw7eERZ3C+OBo9YbjyqhYctdOsDJ7uN8c6xWCs2xctRHnc/wln7AcxhHDTcDjeWZ9HlVfEx+/1C6x+kE2uEAPAqSMUu/ESceiCWdrzATpwRoqyt2iFfrDwOtw== 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=kfR7BezP17/re4Oxh7ni8OWl9Z7fakpTQqbOTdYH4pM=; b=owgca2ztCT8KWU5U+VJq9nAncgtcfF8Vu1a6jWX5zPHKU1ZMJ9b+ygwjYBGlPU2b3qctK59RwsuFQHqZMNRpyqwWTQm/AWiEASjeVVT5iApPeeSQRNcaSXO1gpTtzrBf5xr/s4iUkF37O3Ue8yE1t6ROWZ3lNQFzWzzPTkrkNG5AAc3zmpiLUg85Qa2iSn6f1/HlqQOKSkuAy5ltiRuHMUD2Tx6/oVm+O7DVm5e6/KvZX3ivwsh0RySGgGcJm8pcQ9Vx27TI37kZe5s4Gv2i/QnktjcOsSWoZtHXwnpGNVRWAes7/7UCl1861+wQ+3OR4QmwFSE6aF4+ywCjEeb00A== 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=kfR7BezP17/re4Oxh7ni8OWl9Z7fakpTQqbOTdYH4pM=; b=TQAKUw53owYYvKxekq5ig1WBVAURsr4bkU/8+kcv+hi51Wm4nPIYWdcYxww0wzhkhzCSGUtgKBheTEsAMVpfUmUROEVGBto8bMmqZMt16ujrenj5qBGwqAHU5/kPI1BPcgBYS9FZ2QIhTp8lfeJT9wf8WXQNJQbpDJfJxg4IWVvVzAKuixrn54DXtOZwXYiLZPRjDAvj/cuJbVFRK7orrPiKcf8PTSKdxtcdKMJJrxBiMJrz/DsXoKJ8yQ52OfXV+PU9XgobnHzAk59mbnGYIJ6l63cNPEnk7/VFNTvrZNe89ibk/Zk5tqUWoRzzWBEoAQIpiWy2qoi7INqdSZDF6w== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by MW4PR12MB6732.namprd12.prod.outlook.com (2603:10b6:303:1ea::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.11; Mon, 17 Aug 2026 07:04:47 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 07:04:47 +0000 From: Eliot Courtney Date: Mon, 17 Aug 2026 16:04:20 +0900 Subject: [PATCH v7 06/10] rust: id_pool: take a NonZero capacity in with_capacity Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260817-chid-v7-6-a5872e64d8f4@nvidia.com> References: <20260817-chid-v7-0-a5872e64d8f4@nvidia.com> In-Reply-To: <20260817-chid-v7-0-a5872e64d8f4@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: TY4P286CA0095.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:369::14) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|MW4PR12MB6732:EE_ X-MS-Office365-Filtering-Correlation-Id: bb7a768d-6c0d-4a0f-2fac-08defc2dd2b2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|1800799024|366016|10070799003|376014|921020|10067099003|11063799006|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: ZK8V101U4Km3M9NQ3dHDONxQTEsSAn3m9s/sa+c6CYgPtaTPyyEp94SjHddN3mcka5J7dMrJOUwjyCrQcUPetJqLcsWLlSkoEhj4xg80Sm63LMO9CdP/X+ebNe1dXdl3EgEGUO0exXZfs6+17PCL5+cAUk+dYtGF391Z4TD4TRJAxazvxAwTvUZHYKF18OUs8xI5lWjmZuNLb+Fd4cqZi6BqZnRSjCpw5OWQ2Qvj3z9vUgnBVpjb/j5+ISXBHH7+fzYWE9aHTV1hwvUh+P2JrKtld8lXOIKJm/+asM34GglQ0BY3PfmrKomWZlKqrOMchj26/sZQENNNFfAC9x/8SxqH33/rkaWMl6QQtXW40PZuYkFKp0Smi0ZGfRKSXAANebehfn7NQ4r3SUcbsHXpZKd+AP3KaYTjT/lDlAV1SwdnHJhIlnVdS3AIXjhGUzFxfCzTgTnV/UV9HkoW2tliPG9PvXL4ySftFT+t3sjGAxsUD4wHsx/PZytXp4qgbIwLByqqzCF6XJWO+DE2vQeHxb/KiXrv3QxqdYLc5rc0OS7DOOfyH7Y/veQsymQZz9B+c7h+xGQ63U33HqkMiYYSe7SvQG1xHNnDZ8O8su46dMF5V7WXh2e7k7+vX1liTWyA7IlzDLuWtn2K+88amZiWAd2iZjH7/yi7lMONzLNDCQwCVCpQ/eaHQGYpAQaPmT0WZAkejMSO8afEDb1vKoddCw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(1800799024)(366016)(10070799003)(376014)(921020)(10067099003)(11063799006)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bStxak81amoxWW9QbXZWUnFEc2IzSllyQ0VmRmdQWkJRUWYvWWtYVWRFaW1w?= =?utf-8?B?Z3pRTW9hRWtaOWZ0WXd6NGRocEUzMzJIZ0J3L1JTczlvclFtcXNSVFA3ZXcr?= =?utf-8?B?eUN0akpsSm01ZHA0VHRRT084NGdvWEdiVGhwazRtUTdaalZKZzlBVzlFSXBO?= =?utf-8?B?U21yYkhwMXNmcDBYM1IyQ2hOTlJPQldwWEVYbVFybVVuT3l0Tm1rNnJ4bXJB?= =?utf-8?B?ZTNnbUY4N3Fpc2FzOVV1V1MzMFRON0NMb2xvb3hYKytIL09FZFluaDROaEJh?= =?utf-8?B?SEQ1ZmdrUWNvMTdHMGlpRFNndjlLTVdkMGNDNHpZWjdqek1zOEU3ZWt4V3Jq?= =?utf-8?B?c0JveW84Sm9yU1BmdFdRQm5ETnh6R1MvbTl4RytpNGl5QlYwWWQ1cVlmNndB?= =?utf-8?B?ZnJkNTBDQ1h6OEZiZVRkSnBQZllsUXN1VnluNXJSNThnbDU1ZEVNMDlJTWFt?= =?utf-8?B?cnZYa2lLQ09QaDRiUVF6UGpsOWdZTy85ZUhmMmd6WEpHTUIvaFVpMnBLYXla?= =?utf-8?B?eG5Fb1Npd1preXgwN21PeUl6dnhDangxVDBqNndEa2hXWDIxUDY2Kzg5aTBX?= =?utf-8?B?dnJMcmltZ1FGVHczS0xtdjdJQVhUZWJEOWdWRElhSktmbE1pOTRFOVJFL0lW?= =?utf-8?B?L2FiME9VVVdYQldaNmRmTkRqUmVLNnZIZk1GVjhuS3NGT3ovNFFWSWo4RDFZ?= =?utf-8?B?ZDNCTDk3MWcvRm45NCtQcEFMZFhscWowOEpMdlptUXRjTWtoeURVK1VJSWtC?= =?utf-8?B?azlvRWZZdExGSzhINlRQbWtUWUthOTZxalp5aUxGTnBZcXRTb2FTZXliVzVk?= =?utf-8?B?ZEFvNkVNVFBUZnRNbE5BSFplYTczeHptVUI3bkJEdFJUR3lKL0FGYU9QR0tF?= =?utf-8?B?dFFnaTllQm54c01OQUdoUHdHL1NFelYvMVd1aUZqREcxRWkxRGZ2am4xczZ6?= =?utf-8?B?bVBmSW1GR2RSUjNNakdvQzRFZzJFSnVwZUZueFFVMkNvdVgya0lVRGRsdnpm?= =?utf-8?B?Sy9LbWJQMGk2Q3dYUFhnUXRDQ2kxSlNWT2tEQXNNREcydHpSMzBTcytKV2Yx?= =?utf-8?B?TDcxVi9HZTE2K3UvNDh4QjFXZVFBRm1nVUc4Z05BVG9yNVl4dUJhNC9wNkYw?= =?utf-8?B?TkNkSi9SQ1JPdTZOTEJhY1ZzbldvcmgzSHI2SDMwNWk4NlV3SThOYktGV0Rq?= =?utf-8?B?Ymo3K1FNWGJUUzkvdTR4bThTN3B2eWRmQ2crM1poVVRXdy9YOVlWNlRlanVy?= =?utf-8?B?NXp0R1duc1NPTGozTXh1eERiOHdjTjArRGkzN2p4dHNrbmZLUEl0UThES2NE?= =?utf-8?B?Y3ZVdXhaOHRTU0M2dzJEVjAwUUhWNkJSRmZSMGE2WDIwYnN6WnlWbThMMU9R?= =?utf-8?B?NjcrOUtSYjFIYmU2N25PUWx1azdFOW96RXhuOEptSklQdGZZWTY4aDg2TUFG?= =?utf-8?B?MVRLOW5RVHhxZDhoZmhuWjU3ZzNSMkUwb1BJaTA4K2dpMW4vU2RWNzNaMjd3?= =?utf-8?B?WDA2V3RKTW1DaHovWVdKRFJYblVYVmUvbHp6TUJnRGNoVm1rbVRUZFlTWlFo?= =?utf-8?B?ZUxFTG1ZLzgzdFJSZ3hZUWp6RURTWWE2Z2RJSmdLWXJ6bDFWa0h6R3RabEJ2?= =?utf-8?B?cmp0MCtqbXRZSVFuK0hua0FJU2xVUHBMRjdwTzdZV1NocUdlcUgwMGgxV3hO?= =?utf-8?B?OUFsTzM4Uy9UcnloWVFsQmxBYjJaSlNUdis2N3Rvd1pWdVphOS9mRzNHcGtI?= =?utf-8?B?WnNiRmg4K3hSQit5VWR1QncrZXdHbDZxNnFDTkF5ME5aa0tlbGxhcXhhRUVG?= =?utf-8?B?YUNGN29tVWhqMjZvOVBZVzlvaytLbklEdUVsUkQ5OW1QRTlNWThKMmc1bzQ4?= =?utf-8?B?ZERMaWN6Vy9WOVRwRTJVNkdYbU9ZTXhFb2dVbHFMUzUvekNIQjR1Qy9hbjBN?= =?utf-8?B?MEFyM1JNU0tZODFsUkdPQ0JxRVRMNHJoekxrVEpybG9OUTNqMmVTZnBiNGxY?= =?utf-8?B?cHVWeVNaaitjcGMvc0FtN20wMm9mT00xNXFPb2l5ZzlaL1N6U0JjQ2M3SGhp?= =?utf-8?B?Wk93eTExRWtLVERwRGhpMW40dU1sRTFETms0SThxdTEvaVBrZUcwK2pjZXBv?= =?utf-8?B?WUxoOGZhejM0czdBa0Q0Y1F4REFGdTBYOFMyVjJwcHNaV3lEb0tUZHVKY1dI?= =?utf-8?B?NDZuc2czWXNDcmU4UHJvZXEzVmxNSmlwWFNpWklHL1ZwOGFMbGIza0grZ3JT?= =?utf-8?B?cktqclVmM3pUdnMxVUpJZW11ckY0dUhUa3o5YlZ6TkdtWStXelQ5TWRrME5t?= =?utf-8?B?c1I0cnpvWTR0Uk1yTzFJdmtpTnFyUkR1V0FVK25pR0g3SGdRVnA5bTNqblov?= =?utf-8?Q?26f+sXfe/l67fsI7d2HAsPfkvQsYchL0d0AkdFdIzZrtj?= X-MS-Exchange-AntiSpam-MessageData-1: 6/xTXrWnW6vyFw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: bb7a768d-6c0d-4a0f-2fac-08defc2dd2b2 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 07:04:47.3000 (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: /6BcTrjevtFgv3BWgBeLZTRWSJ+qya+xsPEOtiROnjBZO6KZS9XHmp8iwmPN5/7FKj/47SYbHYvMrEiwWtWmbg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6732 There is no good reason to allocate an IdPool with zero capacity. Reflect this in IdPool::with_capacity. Signed-off-by: Eliot Courtney Reviewed-by: Burak Emir --- rust/kernel/id_pool.rs | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/rust/kernel/id_pool.rs b/rust/kernel/id_pool.rs index 384753fe0e44..9494fde701ee 100644 --- a/rust/kernel/id_pool.rs +++ b/rust/kernel/id_pool.rs @@ -23,10 +23,13 @@ /// Basic usage /// /// ``` -/// use kernel::alloc::AllocError; -/// use kernel::id_pool::{IdPool, UnusedId}; +/// use kernel::{ +/// alloc::AllocError, +/// id_pool::{IdPool, UnusedId}, +/// nz, // +/// }; /// -/// let mut pool =3D IdPool::with_capacity(64, GFP_KERNEL)?; +/// let mut pool =3D IdPool::with_capacity(nz!(64), GFP_KERNEL)?; /// for i in 0..64 { /// assert_eq!(i, pool.find_unused_id(i).ok_or(ENOSPC)?.acquire()); /// } @@ -111,8 +114,8 @@ pub fn new() -> Self { /// /// [`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); + pub fn with_capacity(num_ids: NonZero, flags: Flags) -> Result<= Self, AllocError> { + let num_ids =3D usize::max(num_ids.get(), BitmapVec::MAX_INLINE_LE= N); let map =3D BitmapVec::new(num_ids, flags)?; Ok(Self { map }) } @@ -139,9 +142,10 @@ pub fn capacity(&self) -> usize { /// IdPool, /// ReallocRequest, /// }, + /// nz, // /// }; /// - /// let mut pool =3D IdPool::with_capacity(1024, GFP_KERNEL)?; + /// let mut pool =3D IdPool::with_capacity(nz!(1024), GFP_KERNEL)?; /// let alloc_request =3D pool.shrink_request().ok_or(AllocError)?; /// let resizer =3D alloc_request.realloc(GFP_KERNEL)?; /// pool.shrink(resizer); --=20 2.55.0 From nobody Mon Sep 28 21:52:48 2026 Received: from SN4PR2101CU001.outbound.protection.outlook.com (mail-southcentralusazon11012036.outbound.protection.outlook.com [40.93.195.36]) (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 10B0C3B7B96; Mon, 17 Aug 2026 07:04:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.195.36 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950296; cv=fail; b=s4cHa3z3EDkMQ2a9G5LqbLOojSu/Nybt3BXZeIeQmL9EJNOZazCrjR0vY1AKnqYIN0JNn8K1jBJSR7yoEZecD2Dg7r41rEI8cBNP1DBkdZMPo42+pAnWNG8cJRFrsOc4xpy2nZzhSouHoMjNTBX15QUKhrcTr4R1LlWY/RevcV8= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950296; c=relaxed/simple; bh=iUl39ZuxQc3hDo9N226MMMhB0xaljTYqlwiiOB0sVW0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=cjf+X3TREMeJkV7kkBv4NGZRSSAhXlXJmsEHbJwADxfW8SuxoXBcxzlcNNdm2Zj+yesrgXiBZUvUWXUm4WwK0xj9LzevvwlT19nWvE6C18NEz/qeI7koB8IjloCFotCk9ga2J5gLBOjV8z1EacKYvXpfPeVZ8TupnhGGCtJCotQ= 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=csHD6pP5; arc=fail smtp.client-ip=40.93.195.36 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="csHD6pP5" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ESIr6s5SrDdeYqkbvnyx6Msw18CWyR4fKKjEaG8H94DFi2zKVI544n4+VFYxEgrNiLwlllSFC0SUWuJzDrV63LjpDF3qqoOSeRrcRDEhyp7iSYphb3BYrzzE7219DAqBNAGH80GIFWDn0+Fi1tyHxMh18lZcv4JZlFR40TWhb8GX0qjIHhCkZDpkiyZgStouU/ZYrkMue5p0R4VPmzGLSnyCMhYEqBsMTKudEZIOVsns2MfQSiZS3mIJQu9KXDVC8zb8Fz6np713oUqyMjyZ48bs5/OUHR1+VmteqxuKt6iMqAVHQbh+23nQNjWsYo9iiL6Ieyg0O8uDvRe87Dfwxw== 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=pf4inSY+RB0lfRXpJU2uJKpcdM/pReKphGzIA5sDc8k=; b=XsuQC7untDLQ5HuVYDxpBGOlVaLNKZ8d9P6FA29q/smjsm1+9taQtRWW29bJW+WWpNhE039UUeGR9yn2ItAUYtn6b2ogrEm/VrlZSYa6+7xkgblNkkudxliQPBgX5L4b5/gtUvwlDF8P+ChBlAGqjm9ermQar2UFmYbut84+UBO0mf7vEvTnU4XOEBu7e84EOl0q1WrnES8lVHnHw/LHstvjYEMcTHP3QFNveutJ+03DT04dhU3imPkrsdeSwu2slrSdh1qUdqU0mNSHvMRnKZPZgz45FS3vTS6DGTPcraA4buQEtD/muI3D85lelmV+ypbXsKqhsXjt5lcWfnUlwg== 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=pf4inSY+RB0lfRXpJU2uJKpcdM/pReKphGzIA5sDc8k=; b=csHD6pP5r3jM/2BCB++8vKrpGFyL+xKkgrPUQ4TgMPE2VBu8Ejw9f7o+4/awsBuo0bpSNTS6sIymYAyZQm8uOhRE+aY/I+qKnScT6tBDdRNKMz4EPdCtqIrWb8qjdidxiP/EtdmOL71JWbk2oQt1t3ZcNQbKY4i4YGi/3/AF5Gp8YO1qxqEwmbMwwoRX3Vmq44faRnnrB5m6p70J7oAUCoZjqy1XGevPicA9tr0GVcp0JElMYD7KUPi7LVudis71r/beo5o9ABwtaNgNmwYI6YnEC1zldoJzWLvjFTQI6dkkjOQ4if4uGfwBKZUBe8usl66Ov04PX13D9/m+SY3aZw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by MW4PR12MB6732.namprd12.prod.outlook.com (2603:10b6:303:1ea::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.11; Mon, 17 Aug 2026 07:04:51 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 07:04:51 +0000 From: Eliot Courtney Date: Mon, 17 Aug 2026 16:04:21 +0900 Subject: [PATCH v7 07/10] rust: id_pool: add contiguous ID reservation Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260817-chid-v7-7-a5872e64d8f4@nvidia.com> References: <20260817-chid-v7-0-a5872e64d8f4@nvidia.com> In-Reply-To: <20260817-chid-v7-0-a5872e64d8f4@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: TY6P301CA0015.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:3bf::14) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|MW4PR12MB6732:EE_ X-MS-Office365-Filtering-Correlation-Id: 144a2a7b-103d-41b3-7f1c-08defc2dd4f4 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|1800799024|366016|10070799003|376014|921020|10067099003|11063799006|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: btiJUgQPViZVjpAmwtXPkbyJldBKr8JZrirI7WjDqxqvxY1pgQET1vJ3x/NDQJ6hbtmdS5yNxsbV7pHRh31bC8V81oM1N4GAK3XKDBsX5ZxUb7oxk9t4GpOoJCQAJLwrQUMQc65Gp7Ug6M2N1WwSTrLLeXUNGRuzhl9/UuoKMBs3IKyPvw1nNJqsHlKhrv56GDZDkWScJruzwrRyfWN1Kp++oOR57elflOBubM2i6EAVIW0A7kOPwx1v7bQGCTruoTZpaj3BShKw0gC1hUQuhPUtvmcBp5vxULYf1+lvCgIYFH1yfOHKVLrF3AFkoAap6ydnnQC2HKxe/kfQw0/QhOzZfbrKo+LMRu6NgCbGFZb+yLwzNXgfWE65mlV5qhuYm2tfz89q/DNmWKalG9JGKPAyx5BJjf7SXupYsE0a6OpjJkZ8wNA7QGGoXInqfwVyBomUNCsjHKpSCxcbSP8LhgIBMsZniFO9SI2F5O2aRbn6E8W0fttn0noXpjhd5MW437UmvXOV2fGjZTrH+DnaeRa9bNKROeW+D7+UpgM45A2+sx5saH7CSsOxJ9AxWsK54l7UEwWf/pyuCUE6CoiCDcH1+VF9NnLQ4gZZYr0Z/rr9G5LX3qcKcnoBMLqMkkJgb6KA1o5jkezYhtaM+GuFk2grwL/0ci1yc7b85ruH77Q/9NtwDTTBv+gd/FtUTrySc6rGPCnoq4SHFBt/26Ngfg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(1800799024)(366016)(10070799003)(376014)(921020)(10067099003)(11063799006)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TkFMUVNKMVY0UkRwUUlnaExiZjhhNDczL3NCRVRDT3FtL3lCT01YdUFxeEJL?= =?utf-8?B?Vmh5UDR2VEIvUG5SMVZ2OWFnWVJ0ZFc0SGxiVi8ram9WU0ZpWEtFWFo3aWdK?= =?utf-8?B?UE1KWmIzMzFyM21EZjNQMk1rMjNxb1hadExLQkpqS01OMjNHMXk0eUNLT3hP?= =?utf-8?B?OGZZQ2FpUTJsdEg5TnNIVUZITWlSMUJFWWdCVG9XaFV3aUZzV3J0eGtWUjVP?= =?utf-8?B?RkNMNkM2VXlnSkQvdHBMSkZXZ0w4emhhTWhOVEFSUk5PMGRDUlZjLzRyU0ty?= =?utf-8?B?NWtWNjV2OVhNVStTSjlBYjUvaEgxbmR1U1lJcXp4bkM5V3pRTWhSZWpTeUUy?= =?utf-8?B?VTlrczRhdW1PdUdxK1hWYnh4M1VldVc4QXNBbm0wdjJ5VmxoWXRLSDUwQjNH?= =?utf-8?B?ZXR0WDlweVZ3ZlF5aXlEelIva21jRHhGc1JVYndmQWpaajJiSWJQeEt1SzhT?= =?utf-8?B?S05vTElCOVk3RTV2bzZEWmNSUnd4Z1QxZWx3UHAvMkVxNHZoYUliTDYzRXhW?= =?utf-8?B?SmordENwTkJ5MlJINk5vZHBLRnhEbENTRDN0Y1Z5RmlIclhESlhJeGpTQzk3?= =?utf-8?B?Z0V4MGMyWStCeXpqWnRUK2tJMzNKQzRSTmFwVWxVTkdiZVR3Q3BFNjZHdHBz?= =?utf-8?B?RU1LT29HVjhvZ2tBY0UwMVlGRDg3N3J5WEFKall5VU9LWjYzT3YxNW1WV0Jm?= =?utf-8?B?Nzk1VExMRk1nc3hxT2hIMmV2QjlJUlJ2Q3NlOE51YWtGdUhOamJ1ZEpoNmM5?= =?utf-8?B?NURGaUhLMFpJdHZjRS91eHdVRE41TmUyaGhWamxLV3FCME1lc0s2RCsvQWx1?= =?utf-8?B?dG96WVhCemdsVGtpN2VkRXpFaDBNNG5oZnBLQzdPMlcwa1pOVENtaVFUcWR2?= =?utf-8?B?NkplVFNtMi9oRDFneXZwRGJXUTRseERpb1czTjNvalBCUGxRMnZMc1FjOGZ1?= =?utf-8?B?aUIwQ1FRdVJvTjlmaWpRK0Mzc0hpQW03SktBNTZ1cklTdGdyd1BVc1Fobyto?= =?utf-8?B?bVJld0YvQXhkeGw1UERiR1ExUzhxa1ZrTm5Od3JycWRWbEF4QVBURWUxTkZz?= =?utf-8?B?UXMwdm13MUJ5Vjk0VnJwMHN4czkvc0JHV2VQWmNxdFFVUEdSMDJzeWVHcWZ4?= =?utf-8?B?SW5DWWNGUVo4UktDN3lBRUtEUFRLR1F4Q3E0RWxOTlZVemJMN2pJS3d5N0Jo?= =?utf-8?B?NVozbHhWVVQ3R1h5dENZZkJERlMxMGswUEFUbDh4NFhDNWlpeHc4SUlzN0tP?= =?utf-8?B?VnFVKzl1TUk5cm5XbE5UUlQvQ2c4WDNLNXFhbjBsejlPNWNZaG5NSTRyNExE?= =?utf-8?B?RzFCNnlhV0kxdzREQkFKeVVoVjU2NVRwNEEvU2w2cWU3MGwzOTBiS0dSbDhk?= =?utf-8?B?YUEzTHVBZStVY2ZyV1l2TWhXaHVKQ1ZMRFZ1OTlRSHA3aWlQZ3VRTTMwVVNF?= =?utf-8?B?emRaQjVudGk2UU01VUlKMHdFemhMM0x5UVZOcGMzbjNvblNCNW14Y2JyaXBp?= =?utf-8?B?dVpCNndnL05PMldxVENqZXRhZWtZYkI2VXd2aWtSYUhNbWdzY2pNR1B0d0pq?= =?utf-8?B?ZHk1ZUNZdndHRlcvejNxd3VMelU5VjRPT1ZDQVdKdGExWDdPQmh4MkJNeGdD?= =?utf-8?B?NzE1Qnd1by8vVHlQRCtPUjI4UGp0bFp4YjlrK2lYTjNTOUUzQVJ3eWgvYlZU?= =?utf-8?B?Z1RaVEhBNnBYdXJlcXJabVFqUkFURWl5L2VKTXhzaXpRa25HRWRFT0Q5akFn?= =?utf-8?B?Q3dEdDVPdlc1YmovUmlDeXA2S2h0UTdGSll5d0VSL1lFeEgxRUxPd0lpem1k?= =?utf-8?B?VjZKOHJnY0JPQ1kzdlg5Rll0dVRsMzN1ckk1VTVhWjVqOUtiTG1TM0pyTzF1?= =?utf-8?B?RjJuYWdKT0M4akJ2ZGsrdm1ORnNYNC9lUVZWK3lQMTN3SzVKbmoza0tLcEJo?= =?utf-8?B?TGR0U2RGRVA4Wjh1Y3ZpTFIxbnErMUpZVmtnTFNkblR1ZDhIbm9BT0JDWXQz?= =?utf-8?B?cnNRZTdITHZacXZTSnNRL2JnNUFsaWh4RElyOWxjL0h3dS9RNzI1L0EzN0Vs?= =?utf-8?B?MVVKVzVZdUZ2dDVjeGdyZENvSDhnYTNBOERMZURRcjF0cGR2MmJOU3o4M0dE?= =?utf-8?B?YzNUSUk2N09yc3JCRXdyZkdDV2Y3L1FEK0krQlYrWEM1MDF5Rjl1SUh4KzBO?= =?utf-8?B?K3BXdmRjazMwYTVCRnBNUnBzWisyOHFDYzduZ0xNRXJTRUdCdXczSkhmeTg2?= =?utf-8?B?YndCOWtZZDZ2RVRlZkJHM05vM3l2alhkMUg0YThHVzZYdzJyZEU1enZiN0wy?= =?utf-8?B?TkZyMXY4UmNtdk1EMG0vdWFNeGcybStFSjhrZGlqK0Z4VGFjVDQwY2dDZnBU?= =?utf-8?Q?KiwX+QxE7CNWgscjDCbYlSKcACwMisy+dl/GSClYe755w?= X-MS-Exchange-AntiSpam-MessageData-1: k4tlsEbBnltLWw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 144a2a7b-103d-41b3-7f1c-08defc2dd4f4 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 07:04:51.0580 (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: 2xp5tPA0k+7treP5QRBk46o6RUV5n2yU/Lkzbh7pUGawBrh+lDrhIsECMFYlC/d8Pj1j7UdNPTjh87+BEP64jg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6732 Add `IdPool::reserve_ids` which allocates a contiguous range with the given offset, count, and alignment. Signed-off-by: Eliot Courtney Reviewed-by: Alexandre Courbot Reviewed-by: Burak Emir --- 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 9494fde701ee..382a5645767f 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`]. /// @@ -244,6 +250,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 21:52:48 2026 Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011045.outbound.protection.outlook.com [40.93.194.45]) (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 7626A3B6C16; Mon, 17 Aug 2026 07:04:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.194.45 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950299; cv=fail; b=pklrcyqp4GAI20E52f+x/A6On0F+62NlgjKGRpPL6DV3sUdti4oZ4+qJCMDej+jerSiYdG8Ty19oiZ316ml6ySOssdFyKx8jWUieLlUXGuyeZRVSV4hXzZYhTbQjUK0wttXjWDL6mLhnGd/EVe/O4/d3q/3h1rAQ+I47RZercyE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950299; c=relaxed/simple; bh=KHMOd7uqWu4a3wdO+EwREfQtFtM/PJmqI1tliIF/uy0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=o8Y1fvU+7QdTZQKUirwCzoaZ17zJiJKxcAP7iW1SO0UMimewBWsjy69DB9eRGDSO39masGGlSDdhm69jckPdXx/X+iVwUCBSxk04oS02NHtFBwtl3WE7utIaX9M3jEiWESKos9fpibKzr9RSr7pkbyiddq6BZFVzsDLutsldOB0= 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=fSsM4nhq; arc=fail smtp.client-ip=40.93.194.45 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="fSsM4nhq" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=GlWFiJYQ582Ev75r2bZVaJlkU+emzqaSJfYKKS8zeqbRTv5mek8LrsQPp198ZWLA0wA7dyV2FVjzOuG9hEij5ShdsPumbtAsrr8M4EfC3yy3m4AoGegcNjq6uHC+UeY+4NSlLEukVKnOMyYOCYLua5c/6SBRN/cZkngpyJY4VGWBoZXg/tJ1qV5beAF62NdS6jeWrcimAnGeO3TyjNq8RQpZ//HyIEd4bGDa191rwD7ilM24QM2pOMKifxcvZcTjrxaguWudDCejm1YAyzOA5AzbrDWFoXVCObxLTdrnFITVLT9BX30k57lzxTyQRWZKZk8tvtQSicPjyr9tNW8svg== 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=9be2eN/JX2gxo4V1KKN5kUjWbyScz93OTD/kjE0nR3M=; b=fUBZ/+fLAN28hH73Kvi0tkl1kiJ98Gl5PtPQgCNTTWeRYJnUFVQyCZ9DKzsA+G3EQyaPOrgUHP6z+OvO9bEb9LBFKODgcRG06cMaNctdlgdeDM17PaJ012sSpOiB63/e2g27iN0fGiSSg0zE6Ln3P5tNFlgnCi1uzN7/zoSeSD88WI2yrvOwDZUCDx4YYrCyyVtoANkUE+zKMUDnwzShPNvlUhRQN9h50yswLbEVqIzCjb6bVBPMaeQhHCdValRfMnyAU0yWXvfe9gYbkNubIBt259oSyDT8r3YAB8gPNuq6oJWSGOP74F6/W83mnsPQNu9lL/J2jwMUYgEoXh6zjA== 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=9be2eN/JX2gxo4V1KKN5kUjWbyScz93OTD/kjE0nR3M=; b=fSsM4nhqJ7EaVDG1/eULToOzNnWddOAXNSAi6yhNs5hkI2I8iXaylj8S1rS7bKYArr8K5IQctLdEYlwT2V1YNpdIOgYouMCmR42Hl9BBBRLkM1Pq3TUqNsmqW3gre5wRu74WQeNAHZAPKliVgjT16VU126/BgHU7nm2gK7gWTF7MW+mztopRisqeNUxxkGeiyyDJGDCy6+vRIv35XVTS8cSGR7imj6s0HVjy+HWySgE4B0pxfS+0b6n0HcP6ZEh40d74snrknUZynC7w8PuJCDPvE6Fzw6Hy3Hy6SWr640EvfBd/Y+YKKbCEUHklekFgq57Fnc8ARaLs7E/A9WmitA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by MW4PR12MB6732.namprd12.prod.outlook.com (2603:10b6:303:1ea::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.11; Mon, 17 Aug 2026 07:04:55 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 07:04:55 +0000 From: Eliot Courtney Date: Mon, 17 Aug 2026 16:04:22 +0900 Subject: [PATCH v7 08/10] 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: <20260817-chid-v7-8-a5872e64d8f4@nvidia.com> References: <20260817-chid-v7-0-a5872e64d8f4@nvidia.com> In-Reply-To: <20260817-chid-v7-0-a5872e64d8f4@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: TYCP301CA0059.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:384::19) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|MW4PR12MB6732:EE_ X-MS-Office365-Filtering-Correlation-Id: c20c197f-df65-41a1-5482-08defc2dd74b X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|1800799024|366016|10070799003|376014|921020|10067099003|11063799006|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: 6k7jOzyqsClgLlVSLaQz9UxMuXcInEiZ+QToPREhr9h5FmQx55JU3s63bDjagvcN4Om8z8FtBqheDAhqABe2v1Pqt9siTtYgbuuObVkL9JqX75ec3LN39RRSXNhyR1LR7XP19QRSJQMZTQMAEeP9vGZHKfs+Y+zv6s3fzrrKgD/8bnhQUm47xKr3eb6rDEww6A7ewVWtHbNuG9/36kwUACiSw/j5MlmkCJkigi1/dqSHcNZezXcXHYXyxCSDnXk7B0QkZVnYIwtlWmLT46Tl2HJNTjBwTMezkAaNlqpmicSiTsqWWWVfoIY1/TDgN2KmP5RHLRxAWMVYF5Guubjb5SDwWA3ucp17aMki6E0Z6jgSeKS8eG7KviKPjnjsNMK/buzlqaq+h1Zlt3lLgnRJsh4v/ErfTwYzic9ckr3edtyoSipdSnNqf9xedMVfmYo9ENs0kc2yCvi0SLeNoH7dyIqbYQ8esmq3ciRivJ5gg/MFxpnZ3u2W2KiaPKkPE2Jjb4m5URtTDfeSHRwvo4Bj+DlOiCzhPCqwfIrtfxH1cPAxScemqcWvQ77IHfpXtl2fACA6WXQ7yI1d6TxXy5dNM29L1eFSqhoDR+eL7Ut09K039CAuA+VnH+2TEPk5v6i8D6FBdIAg4iObPt7zjecNrijKG0iksvsmOEgWJnzHD8A64+K/aMHWu9j5NmLJolNo3GdN2jFyP3AJRZlgWuWACg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(1800799024)(366016)(10070799003)(376014)(921020)(10067099003)(11063799006)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dCtqbnhpWUVabDlDMmhwOGZxVzUxS2FmT0lmbE5TamljNDJxbE1heEhXU1hk?= =?utf-8?B?Snc4RUNHTGJObE16VFNhMGxocWhYVE9CaTc2MjMxKytFTUtKSkFhd05CdW13?= =?utf-8?B?SStER1Jqaiswbll2M2FoVURHa0NqYmFSR3cyVk1UZExWWE9KQytEV09ZWDI0?= =?utf-8?B?em1yYjJBeGx3YzZGVmdnSXRxclllQnRPd1VvTVV2cDJMb1RXck9aWFNUWVZ4?= =?utf-8?B?M3lrdEoxelE5Q3JBMzc4cUl5ZHByUG9VMW5PRlNlcGpTV09RdkRrS0FaRjFp?= =?utf-8?B?OFcvbWVmM0ZWZ3c0OGdBS0hDQ1Q3d3FLV0N4ZCtEUDZJMnN4SW8zelhKRlRM?= =?utf-8?B?bWxWMXFWVU5JMC9KbDhvblJ0S0FvUU5VdnNReUZRNkZjRGFhbG93NllmeDli?= =?utf-8?B?bGxjRE1QQzRQUzBQdkUxZ3VIOENmQVVicEJaN3lBQjlMTE5BQ2VnN1BvSWpG?= =?utf-8?B?Smp4L3lTaGdLUmZESFMxa1VBb0ducitDUU0ycC9aQS93NWJPNGxuT1NzblE4?= =?utf-8?B?UDZuV3pQOFhFbWh3N215VUlFaWRtNWQ5VFRDSDVFNEQ0aTJIN25XNUxqWkhl?= =?utf-8?B?Y3BQelZwdzkwYW9qdkpidU1kOVhmTDhnYnp2WDIyUVFaa28rY3B6Qkk0VDdr?= =?utf-8?B?YlZPVlcyYWdqOWlRbkQxVnJ4bkJmTmF4dHV0eTNxZ2lvOTZyUi9Zd2Z5ODRs?= =?utf-8?B?eS9va3NHWWRBdTIxbzN6MmZlUmVkQ0RNK0VqWlpTUG5jeTRwRnVuYUtnK1BX?= =?utf-8?B?WTZodmVjMTNzOTF2RjdVUFMvZTNNak05VG1iT0U4czhjcDlxVlYwL1dzNEVD?= =?utf-8?B?anFzMWJvbGx2NER1akludGF6LzJ2VGpsMUtobWl1WHhHTW8rc2NzRjl1WkRv?= =?utf-8?B?eWlWWitvczhMVlZ2cnVrYmRVb3Z2citFNXlYQTZVbis5MnpseS9Qb1dxdy82?= =?utf-8?B?dVR0N1YzSU14UFpDU29zV0svNmNZbWpXREt5aG5NYk9MdmJmeEhUaG1NTlRU?= =?utf-8?B?dnFyODBHQXlZNlBWZzYyT25FY1ZvQy9sSTdqZGw1OFM3Sy81OUREeStacit4?= =?utf-8?B?VU0yaUM5cHdxeVdNcDVLT2RWOXlYQ1Rka1R3c3NtOW1wMUdMTXpTZmR5VXhP?= =?utf-8?B?V3RBRyt6VnB0RWhRdjJjUG1HVFB1SmFnc1dGaFFITHlQZTRDTlcrS0Rhbk5T?= =?utf-8?B?dncxVVA2L3RBNFljUkpnbDVuYWhxSWxkYlRTdElKanlYMGlGZ2s3eTFGUWVH?= =?utf-8?B?dDU0MWNmZW1hZU55TTl3dS95NFA0eUhtdlZzN3dtVUZDeERDZGdsWWk3Rk1R?= =?utf-8?B?QjNhUjY5V2k3WnEwSUdrSllOdTJwMWs1Z2k1c0Z0Z1RyeGU1ejhiYWJtQmJB?= =?utf-8?B?Z0hvTDhiRzNNcmdjbUMyZmFqZlNGT1doR05xMjlZT3drYnhtUTZqR2RJSEdT?= =?utf-8?B?eFF6RXNKRko1T3BhYVZsVnl6cnZxMGNSUjJCek5WUE01aW8wM3kyVHlsUW9K?= =?utf-8?B?V1RnTWdJeTlLSmxrcnhqOHV4d2dDOWViMGVDL0hZNGtzMERCcHJQaDZ5ckor?= =?utf-8?B?QzU1MWxPa3VaNkdGZWpnYkl2SkxLMnFrL2Z4dTZQbkhTY1hoYm00aVdSNkNr?= =?utf-8?B?UkM1czNranQzNnk1a2lFQmN3QXdYTk55QWRFZ3JaeDJ3ZzZ4Rk1vb3IwaTFx?= =?utf-8?B?RmZJOWZNWGpUYnZtWGZlN214bG8ydjRZcGQ4UmZBTy91SGFxVDlVazdYbWh3?= =?utf-8?B?MzhDNHI2NlJiYkRldEw0aXcyRmo2eEpUb3A5eWpockdCbmRSMmdmRGEzT2N6?= =?utf-8?B?MHdSc2ZWSEdLeFJmaDJrNHpKTFdjbWZIaysveno5ZWE0aVJvRkxZTzUxbks5?= =?utf-8?B?K3JqamFQQWJaektMU3RCcUtXRTBVZmpZbUpEWldVUmYwVTk4cjNCd1M1K1NJ?= =?utf-8?B?dFFKZVlJc0p5RFd5dGNCdGoremkvK3FNRmNPczNPZXZXeDZCZVVCNFZYSEFC?= =?utf-8?B?aXBqUG5UZktqMHRGNmFOZXlDS0ZLSzNaaUhnc1BNVW9UREQzZzBPRXJFeDBn?= =?utf-8?B?WU5zU1ZwZE16VU5rdTJDaDhuTmpFMzVrTVgyTVNFd3BSUCtGckhoR0NPeGtr?= =?utf-8?B?WERtZUt4ZTZHREhNcWFHZXJiSDFvMTF0V3I5L0pXNFE3a1JsWUs3TGU0NXFu?= =?utf-8?B?STJkNHVhYmlwSjZ6VVpXcmVWb3c3MjBOVVBSaHc0eExwdmM3TnNCMHIyVTBs?= =?utf-8?B?UW4xT29RY0srRks3ZFcwbS9NMWRMd29DM1RGQzIySHB1MlY0Z1dhT3pPODhr?= =?utf-8?B?OWlUbXBxYjFFTmJmb00vSHczK01ScGIvU0JjS2xKdWZ2OFZEY0Ixc0ZiNzRp?= =?utf-8?Q?gM2esxDPsnWjwdj0Jg5nLFJOdpe6dvqajkk8LCgjjvOgh?= X-MS-Exchange-AntiSpam-MessageData-1: jcg8399N/A6BGQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: c20c197f-df65-41a1-5482-08defc2dd74b X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 07:04:55.0029 (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: KVjlkU2JYWznhZ5ubJ12KR+FayMVTBCutGdjT9Luh6fiK3+BKPJJPYKTKzknr5UNOQtWes4DAJuddJ6CoEtwkw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6732 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. Signed-off-by: Eliot Courtney --- rust/kernel/id_pool.rs | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/rust/kernel/id_pool.rs b/rust/kernel/id_pool.rs index 382a5645767f..3e7c3d0c9dd9 100644 --- a/rust/kernel/id_pool.rs +++ b/rust/kernel/id_pool.rs @@ -115,14 +115,9 @@ 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: NonZero, flags: Flags) -> Result<= Self, AllocError> { - let num_ids =3D usize::max(num_ids.get(), BitmapVec::MAX_INLINE_LE= N); - let map =3D BitmapVec::new(num_ids, flags)?; + let map =3D BitmapVec::new(num_ids.get(), flags)?; Ok(Self { map }) } =20 --=20 2.55.0 From nobody Mon Sep 28 21:52:48 2026 Received: from CH4PR04CU002.outbound.protection.outlook.com (mail-northcentralusazon11013041.outbound.protection.outlook.com [40.107.201.41]) (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 690703B6361; Mon, 17 Aug 2026 07:05:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.201.41 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950304; cv=fail; b=E/9sAcdubZqgfkeLl2HiWQvwOOfG6krfpcPFowWQLd31PQ8oBfv3Ae1Sn/ZwiKd+ytVirQDgenMyE5aoxQoYrYjfLPDgSshmFAP08wfblhL5ByQp6+sHtrNv6EBsad+UYsJ33hxkrju1WMTsLcedmt8lCgtVDdiT629EJhM2poU= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950304; c=relaxed/simple; bh=a9U5ha5YcwdOWt1Q66iC+4y7aZxa5qKqNniVDrc8BF8=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=YZa9Uha3Qhl3/XfDYqL8F+yZ4MLN0AEqFyuQ7T1Dx4mqBN4k+QTmouph2tTzTh/CZR/Agy4mjLjS9MRxL6EQGb/1akZE4ltmGfHJzZ01HO+TLCuuccJPsPVOf2tdLjNifHKhII60wQYG+TVy7JXSH/EWz3irlsR5VC9LU9SLCgA= 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=uKB3Njib; arc=fail smtp.client-ip=40.107.201.41 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="uKB3Njib" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XxTlGOsbVXNUrow/6E7qFkfU7nyrct/hkw7ZrWhG/6P5n9OZba/zMH9kc1a24FzwbRDRaz7dKopBnWe3pUvYCZQI+iBlJOcXDeyBUFwVfbvkQiJ8b4CHyofW3bV8oSscFaSNnk7+AgwMWENwfPL28uQEyt6Eq9plgHVCQPK6ULzOgqql0DHvS0WeFelZntQWIa0KGDaBRBxCdJ3l5SZUDJjKTs/JCZUbzO2eDnYz+572VWPbDgEtgx3861Bw7b0agL2B3CISxe93kx+yHvff3xni9mqsge87GTw+MC1DET+Y6xyqsb27s0d5Vv2R8hjzAMDZHcKefhbTCauGw6sVew== 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=LRrfU10uFdhU74EfoODMzyyExyogg0nIZWr59NPHj3o=; b=wQCbJ3WvMIe1V0Nv0HFU7OW8pxkSS/TrrcMCSiTergHgFFcKJXBPZ5xRco0BnBE+1tH6xaqXGkaoYTCX05sJicCpdhkC7IyspP98PESzoYkjEAtukYvLAWR9Bxt6nL4YIvR/WOn9qjN6f7T5k4ZOURAHgS9CTtUR7oFNzghX6Bqxbm3Yt1exeechnKctn6pApBJJVwuamf/DspZLHNFceZeGE5M2EojnQTrfAKAl2l2lKiL4MCe+n8FMpPaR9Wtuo+4EYpUVG8kKVdMCIjs83fEYSItv0k+0uW3TKBv5LKufL7vv5dfefzNeL94W+GqaxyPFlLBbKDBmsA7w592AMg== 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=LRrfU10uFdhU74EfoODMzyyExyogg0nIZWr59NPHj3o=; b=uKB3NjibP05RAvCROJI2o/WQLG+egqvaz2XWPlC3aMudwTA8GMy7Z9KcTsvB0jjkn9YIPcV7Lsz0HuwCQn+g2TpVU2GmqoQ1tdXYUfTnbkiejKSF2E94m6IKmnRpDusUZknlIwMaRuQmtE4IcJAuX+DPX0W8zIU815sWSJRoi/lwqsJ7w/JN9TKjC36e3n+kN8tbK6xXfwwTQMdVjFX/5jeMsrjkcIWrj7bprcdUPlkmb4oqUP3IsN4EuPtvdC5+MHBic7DcGRHsolP4m38URTqcI0MHdpXj5f1bHK99uT+4GaT7gBuaOdH/2hvxYA6Wvaghm/fn8nirE2NAUSCjrA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by MW4PR12MB6732.namprd12.prod.outlook.com (2603:10b6:303:1ea::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.11; Mon, 17 Aug 2026 07:04:58 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 07:04:58 +0000 From: Eliot Courtney Date: Mon, 17 Aug 2026 16:04:23 +0900 Subject: [PATCH v7 09/10] gpu: nova-core: add ChannelIdPool Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260817-chid-v7-9-a5872e64d8f4@nvidia.com> References: <20260817-chid-v7-0-a5872e64d8f4@nvidia.com> In-Reply-To: <20260817-chid-v7-0-a5872e64d8f4@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: TY6P301CA0032.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:3ba::12) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|MW4PR12MB6732:EE_ X-MS-Office365-Filtering-Correlation-Id: 600a560a-277e-4a52-460c-08defc2dd937 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|1800799024|366016|10070799003|376014|921020|10067099003|11063799006|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: 4Mfsodv0jFxWKfC7oQSSk3OYoZRvaz6hJ8XeQlm70QWLGjfqujibtxH+hWSsIVIHhdK/UZwXSUGiJ8XlUTZRkRP+ZAMxx9PSLt4l4IJcw5MuIVs93/B47oQJstctaBl8eb4vlcw0IG7MMJIzcxt3Tn1MIM2o4DpC6PP8zaBFYUxghdlum/bBDiSrLB3iABfpuNrbZfdabIUKgO8w1qzb8oNopwgjzhw7BF2rq9alz6RTi26IEiwshHihWHpxCcqr766XbJOpiYPTqhjhAxqD+ybPa99EUvkMN9elT6HLxATPq1tPxSi/V/sRo+mg669HuBRW/azuHmibGXkhX7FWJhW79iOghfx+RolFMyAk8PHaTJ4O62NZpo9aVI80Wt7/t9Z4UWHMCUt39Gy1vT+BbnLsfr2UlE0snhlLmqtlnjMofdhfBiaCwy+PweBz/XgF8yVmLUmloQQya1hqWMaJIWJaEase8/N+tmgBTqynPwnxPyvN41KPQXu0p6n9YB1s/hltlnXz5KXSZhEWZJBSGY8b6ChNl/kCsbj4ecOFp74ozGCOyrfQChSdAniDzpXBVD6v5y4XUwU6xM/syMiiSglPIAPdjtBLDN7Pt30fZAKlWbmTL3CaLszVSiCPsqygCts95KhVo6rlcAj9LwHzh+sUAkclVsuOA2h4dqb/75Z+9dY5ABYl8I7A3v1eihxZDBp8I38zeccMENbc+e7SzQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(1800799024)(366016)(10070799003)(376014)(921020)(10067099003)(11063799006)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?K0JDRVZaQVhDa1dkUXpvMGwxRWJkeXU3eFJRemJQSFJFMTFncEcySXorSzIz?= =?utf-8?B?VlRiNlhVOGpJdW9ubDY5TmE0ai9aUS95YW82Uml3YVJ4RWJqVHFCcEsxbFYr?= =?utf-8?B?bzNwNC9VV3ZnazlGWTNIZndUYm5ZdXVwQjFYcndqTys5OW5MYld1V0JKNlJC?= =?utf-8?B?ZTZTSXNpcjcxZktpZVY4WHhVRHRKQ0xGcmRadGQvaDNFQ2RFbHFxVjY0WFFT?= =?utf-8?B?elZmSFVXdE01SmVlZWZ5eEF6cktYZklMUzBoQ0RweWlveDIwbG5WRU1ZdzZH?= =?utf-8?B?b1BlZHNqOGFFeFJrSGVmdEVlZUg1b0JpTHRhaFFyblFBYnMwbGRGUStrSXpK?= =?utf-8?B?YXE0cmFlRXlMZVkyZ2t6dXJVRWozU09QQjFQdWJsUmtkVGpSdDBTdExKMEJE?= =?utf-8?B?dEh3UUY0WW50LzZpOGpxUTFJTHFPb2Y1YnErQ0wxdkxiamZIRzBQNlFLcFZq?= =?utf-8?B?N0ZBM1l3bGpFU0xGU0lkREx1V0xWd3N3Z0p5bVhEWkx3SjE5V3loVW55SUt0?= =?utf-8?B?dXNLSXlrQjVlUm9UY0ZtRFdIdXNFZUVyNWNCNmhlZ3FOK29RN201MjIrMTNR?= =?utf-8?B?d3lUdVNBZ0JvM0oxYkhUTlFQVmhkaUNHRXBRd2hPd29GOHJsZnM4Q1hKYmow?= =?utf-8?B?b3U3dUF4Y3pBdHM2Rjl5QU9FUEhmVjJieUVYemEralNMN1J3dGo5YTc2Y3Vy?= =?utf-8?B?Z1poczVVdHVQN3RNcnhrdXFtSy90MHdnSGxaRmtlRy95S0FVU0tDZ1dTK1Zk?= =?utf-8?B?L1hZeXBTTDdGMGJCSllLYWM4V05mdWJ4SzAxRktUUVowdENjdFRYRVlnZHla?= =?utf-8?B?aGc3MDJRV0RQYmNFM0c3UzdQQUVJV09mTFVacnpzN09TOUdzTGNzYWVxa015?= =?utf-8?B?RWtSOEJxd243THJOTTJtR0U3b0N5aUFFR1FoazdtQmxzSFM5T3B0R1hjcnZS?= =?utf-8?B?c3J3UG5rckZYSHRNZGZEMGVtSFBKNjVQakRTazZ3NDFGeVR2TmNHNUtTaWcx?= =?utf-8?B?dzlJWXkyYnlFcUlyaEtrRUNqNmlieGM2dXhPZFZDZC83V1dOb1hkY3h3SmJ4?= =?utf-8?B?RlFPbWpVNjg1dmdvWC9LR3NubklaN3JrMFU2dXhrQzRzc05rcGsyZDkyR3hL?= =?utf-8?B?LzR4NWZWTDVXMHd3c1RLUzBnMm9lekw3K0RGKzNUbVB6U1IxL3FLTTRlK3BI?= =?utf-8?B?ZTkvYUpENkpQdTZDUG5aYzY5Tk1zaHFtbEc4UFNwMmxrYkxoMk16NmhKd3pr?= =?utf-8?B?aVFVcFBseWYwekN6NXgxd2ZtYnhpVzlsVUxoNGFqZE1rMG5PRDEwWUNPTlNH?= =?utf-8?B?Y1pPNnpLdjlEMkE2aHh0U2FPbFR6bWVTRU1zR2pUZkp1ekVabkRtQndpSTF0?= =?utf-8?B?SjlIOHJRRGdTSWorUXhjRHArUWhZMkQ3WE5KRzVFRTBqWmxFaHZhSjdEdmZF?= =?utf-8?B?Nm9yTmVlYkloMDhLb1hKWUxqMnViT3BCZVZZQ3RFVWprZnRuSmNhRStrakVx?= =?utf-8?B?Ymh4bUtPSU12YUdaNG03emVQUmtjNDhva05VS05UUnpORGtyWXRoNFprSk9r?= =?utf-8?B?RVlsWnU5Nk13UkVTcHpxOWdZYVFCTHFpSDZrd24xNVkvVllrNVNCd2JTM2th?= =?utf-8?B?NE5YSlRjZkY1elR1TzBoZktJSVhNNDFuQ3J2VTc0VzlJYkZsM0Q0WkZZazNo?= =?utf-8?B?MkFyTEFtKzVYQ28rYktkMk00VnBkcU9NN0h0TTJvQmthMWxHSG9HZVlrZlFV?= =?utf-8?B?cUZsdTJ3WWkrNHoxMXVwelNmTjQ4WnZhMWJMU1lTeG5pYTBMS3BlWnNKMTl4?= =?utf-8?B?OGp1RTRia3JzVFlVMWprYi9sQlBCRmo5UGF6Q0I2WEZZMVJycUZ0ZExEeFIx?= =?utf-8?B?MmVuWUpQTloyMU9VYTFpVElKU2dzOXRPbEN1U1JEQlh4UFkzalFiZTVpSWdh?= =?utf-8?B?SEZ2TlU4THFXSVJYdDhFSnVkOHFSa21NZjY1Sit6bWpyYXE0MU5mZ0Y4UjJV?= =?utf-8?B?eXFSRGZBN0J3cjR1aUhuZHNpTzN6QkFGc1k4d3hoYm82Z09FNS9tRGMzZm4v?= =?utf-8?B?Y3lRUk9IOEhTNTZ3QUhNUCtwaGRaNTFHNVovS2xvQ1RlSnp1RGVHWmh4dlE2?= =?utf-8?B?cUcwUUVNSnlkR09ueWZzQS94Nm1pbzZGY1RRM29lV2ZLdkVCTk1xQ0dRS2pi?= =?utf-8?B?TVF2U1UxVFdkdy93UnovSFFqZDMvVmhkNm5sbWVMRXU2amxPQUxZbDVvbTky?= =?utf-8?B?ZmFqZkNKWFprMjVncDhNZ2VWRlBlV3ZRZHN3UVUzRjRvMm44MVBLYW9lcSt4?= =?utf-8?B?dnQ2bXBHTkwwZDJTbDArQWFnbXJ4SWJpWmliNUxyYy9ZaWMxL3pWaUh4NnJI?= =?utf-8?Q?L9sz5ku1lcSEIjTOLeJT9fWZffiWWbfn5bJJ5nitJWzxo?= X-MS-Exchange-AntiSpam-MessageData-1: T0yxmYwHMipyLg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 600a560a-277e-4a52-460c-08defc2dd937 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 07:04:58.2129 (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: udwNYrNoLz2qCHJpijaxsdgsiiAhF/BbYuiwejF5oMw/N6rKMzctiRhzqYxvzr28uzC/W9AhER65HddM8a3S/g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6732 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 | 201 +++++++++++++++++++++++++++++++= ++++ 2 files changed, 203 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..029fd843bfe3 --- /dev/null +++ b/drivers/gpu/nova-core/gpu/channel.rs @@ -0,0 +1,201 @@ +// 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, GFP_KERNE= L)?), + }) + } + + /// 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::{ + nz, + sizes::SizeConstants, // + }; + + #[test] + fn chid_reservation() -> Result { + let pool =3D KBox::pin_init(ChannelIdPool::new(nz!(2048)), GFP_KER= NEL)?; + + let first =3D pool.reserve_ids(nz!(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(nz!(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(nz!(48), Alignment::SZ_1)?.start + ); + Ok(()) + } + + #[test] + fn chid_reservation_drop() -> Result { + let pool =3D KBox::pin_init(ChannelIdPool::new(nz!(8)), GFP_KERNEL= )?; + + let a =3D pool.reserve_ids(nz!(3), Alignment::SZ_1)?; + let b =3D pool.reserve_ids(nz!(3), Alignment::SZ_1)?; + let c =3D pool.reserve_ids(nz!(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(nz!(4), Alignment::SZ_1).map(|_| ()) + ); + let b =3D pool.reserve_ids(nz!(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(nz!(8), Alignment::SZ_1)?.start); + Ok(()) + } + + #[test] + fn chid_bounded_by_num_chids() -> Result { + let pool =3D KBox::pin_init(ChannelIdPool::new(nz!(4)), GFP_KERNEL= )?; + + { + let a =3D pool.reserve_ids(nz!(1), Alignment::SZ_1)?; + let b =3D pool.reserve_ids(nz!(1), Alignment::SZ_1)?; + let c =3D pool.reserve_ids(nz!(1), Alignment::SZ_1)?; + let d =3D pool.reserve_ids(nz!(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(nz!(1), Alignment::SZ_1).map(|_| ()) + ); + } + + assert_eq!(0, pool.reserve_ids(nz!(4), Alignment::SZ_1)?.start); + assert_eq!( + Err(ENOSPC), + pool.reserve_ids(nz!(5), Alignment::SZ_1).map(|_| ()) + ); + + let head =3D pool.reserve_ids(nz!(3), Alignment::SZ_1)?; + assert_eq!(0, head.start); + assert_eq!( + Err(ENOSPC), + pool.reserve_ids(nz!(2), Alignment::SZ_1).map(|_| ()) + ); + assert_eq!(3, pool.reserve_ids(nz!(1), Alignment::SZ_1)?.start); + Ok(()) + } + + #[test] + fn chid_reservation_aligned() -> Result { + let pool =3D KBox::pin_init(ChannelIdPool::new(nz!(16)), GFP_KERNE= L)?; + + // Alloc 0 so the first fit for the next area is unaligned. + let pad =3D pool.reserve_ids(nz!(1), Alignment::SZ_1)?; + assert_eq!(0, pad.start); + + let a =3D pool.reserve_ids(nz!(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(nz!(1), Alignment::SZ_1)?; + assert_eq!(1, b.start); + + let c =3D pool.reserve_ids(nz!(8), Alignment::SZ_8)?; + assert_eq!(8, c.start); + + // Only 2 IDs left. + assert_eq!( + Err(ENOSPC), + pool.reserve_ids(nz!(4), Alignment::SZ_4).map(|_| ()) + ); + assert_eq!( + Err(ENOSPC), + pool.reserve_ids(nz!(1), Alignment::SZ_32).map(|_| ()) + ); + + assert_eq!(2, pool.reserve_ids(nz!(2), Alignment::SZ_1)?.start); + Ok(()) + } +} --=20 2.55.0 From nobody Mon Sep 28 21:52:48 2026 Received: from CY7PR03CU001.outbound.protection.outlook.com (mail-westcentralusazon11010003.outbound.protection.outlook.com [40.93.198.3]) (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 5A2033B8BB6; Mon, 17 Aug 2026 07:05:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.198.3 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950308; cv=fail; b=Q8z4J5q+BHYpHFk/7AeQ5JsbSzDFRnOrMdzGWloRkUAmKvTvsOZ2YX70WeSHw5/8yADGAWs73J45oqL3696WbzmanDCeOC4z7fB7del/LdU//WebcuTYtGu4JeXfkXtj/OCndbvVilWupSfvd01lVTwlO3zLj8eJrOIkdq5a+yE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1786950308; c=relaxed/simple; bh=vCMxh3XUZjHyb3YqVEftYOVpuWj5p630b6EEPzSbkeU=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=fSQN0mYCxSskE613Z9Yo3Zs6d276+W3QwXnFE2FUN5NN7jwJS76DW5QfLDQk2OwZmfv35LrHrQC4KZJg2o8m22GugQI7HqnKdSjtZPnwSDwTnusv3uKal0QqX8xV+1UK0/QRqzcLUAodZFNbzDExef45UGxJS/L5Kq5srzzMiSg= 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=IAVsWFg+; arc=fail smtp.client-ip=40.93.198.3 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="IAVsWFg+" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=XIgnXb4u/FODxp9usXlb40WC9aNN9OfFuGzVSg2mNe0TP+1twe6O9lAAu+iHCy8cr7N6TfXqL5QviMlaffxVEpUwmCW84E0FNTrpNEGiAfr2ggJ25sYP1/I+T1r96nKMwDV4ZkwcKV4gExXObxxzJLHF/smbxGBx7DcWIArnhRvAl5MDQH+RKRrylfV19VoJIHfFES4hvrKzMsG2jG+CZHS75KWZL4hyLWJQMaAIZQt41lRAZFZs+/Xzph90Uonj412p+kjzY6+KYmtJ7ITZTxJpP/PbgitbTEmRTu6b6VvhGaVlhbQpaWfycb67NHj4zC2znCnLt56K39OUHaHiFw== 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=ZVFD3ekeQZ3HCJW/cqvzrJCSuIxLY37s9Pwo2Gm0VTg=; b=KUL2hSiJ+A8EeZMuaoZRty7TjfkQbdYkEmdLNrqp1tQDjfxcGgkcg8jtfNSR1Sc4Hhm+HhhGWQrjlJU8FHkViGRyr0BrOSpqtLk1CMy8RYSOckJ7cy+Q0R6mEnswOwdCmRGnWvv98Sm+NzSLhm1BHfPxhyPCzg7hqf4S5eOHJxxpF2Fx65cnud0GAxBK4pPb60ytqrhKH41VJl95QFjcl5af2ClstXei0CB566fXUN/PXxlkm4hSXL+LeuE/LxVmb7GRFRyYlASlDBSyedKO6lobv5SCFQDpJ5MRFhdEPP0rS5YXln/j9Faj51h9KLT24F1ivyM/JP0xf4JWnsJ2hA== 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=ZVFD3ekeQZ3HCJW/cqvzrJCSuIxLY37s9Pwo2Gm0VTg=; b=IAVsWFg+0/wgiZRMfPD1diye1dy+FjIyh8KXs5pu1LH7CuLDpPPUxSOwgSlTiNzEvxCX9RwPQ2Gwt40rojYZW0Li4YPc6e2mDeDwl9uAA7ohXRgv8beBgx3fRafb7aqCxRpI45JwghNcW5onEZVacREkdTnIQH2pdrkMMW0f/7CQFZT4zwn1F3la1EhHwnK803wQaVV9G6qy2ZazY2I5mHBbrM2Hh5IeqVzc9E2mH1mWy/ms9Cfp1sZuFPimwZOtT1PbfVy9jqIgXVFsGGT0lZN5jaUDuPIw3OL9YWViQac5u9kvz/l5Up6zeKqDqgMht7CUO3x9baM4aryWMaOUJQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) by MW4PR12MB6732.namprd12.prod.outlook.com (2603:10b6:303:1ea::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.315.11; Mon, 17 Aug 2026 07:05:02 +0000 Received: from BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0]) by BL0PR12MB2353.namprd12.prod.outlook.com ([fe80::99b:dcff:8d6d:78e0%4]) with mapi id 15.21.0315.016; Mon, 17 Aug 2026 07:05:02 +0000 From: Eliot Courtney Date: Mon, 17 Aug 2026 16:04:24 +0900 Subject: [PATCH v7 10/10] rust: use Alignment size constants Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260817-chid-v7-10-a5872e64d8f4@nvidia.com> References: <20260817-chid-v7-0-a5872e64d8f4@nvidia.com> In-Reply-To: <20260817-chid-v7-0-a5872e64d8f4@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: TY4P286CA0133.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:37f::16) To BL0PR12MB2353.namprd12.prod.outlook.com (2603:10b6:207:4c::31) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BL0PR12MB2353:EE_|MW4PR12MB6732:EE_ X-MS-Office365-Filtering-Correlation-Id: 10ae94f6-6c88-428c-5cec-08defc2ddbb8 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|23010399003|7416014|1800799024|366016|10070799003|376014|921020|6133799003|10067099003|11063799006|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: FpJGLxx3NGUa5FrFfLT/GtxCk+uusUe5grJnXJDO5odwgk/TsI8XcEKWFXx7TLdJ4F28imXuHmiNqwl0TvIy1ZH8/IKoJ6Ml1qc2mn+WnmniwHyMQzv84WHY6x0tTRzwsFDC92SZjovk924FD11nKFgUIhJQOyqc0F22PFcThn+45ZMFDC+EqT/Sre6mYKyPKIIURJmg3adFoweD8ldKkJCGbuu+BjboLxBNFMlUWeP134DN4eMx/5fvdPDNIGO/xEAVFQeSW83PUgottD10YTS/+3wEyj9vFC5KPULv5wTVaHbGE3/tRGgg+Z2L2XDVE4w33gcaPpw/TBvvp9FddVIzeVBvuhtkPcI1gxQIvEpqUCAx3askxdg2fvXYEKFYNNUMCX/pV7UhOVqr7gd5OhCscDUE+xBcNjfS+lgr1jkpBORejw2mNpLkoUNsv1cSDtgxRjGMZDx8LZWu9KeypasKOkvIscpTu6itUlQjrGsSOKmcr+Yh29evPBr019ZUQd/fZvlswf+0GlOU7YD+OxYABf7ukS7fVhZJgUjRBba3d2MvDmE4R5xRs8A84CGNfIvXAtGMW7dILNwNoDuov1p0l5fzyzdoCJRIG761bKGV2VpuoxRNs54+lVfl6a5O5Ms+RvNMXGoV+RsWZYi11k636NSgJkjxWWPPk2xjDubNm3s+OuZYZuhXpvWocR9XsnGNK/GJdev6833sOsUXdw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL0PR12MB2353.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(23010399003)(7416014)(1800799024)(366016)(10070799003)(376014)(921020)(6133799003)(10067099003)(11063799006)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RklnRzcvR2xCdzBlSktUMlozbUduWUJJdzhHbjUvc1d0ZDVTcksxeTVQNXVz?= =?utf-8?B?ZXhnSHQ4SWNxZEFSOTdOWWpBclNEVm5zL3BxTDY5NnVIZkpCRi81THdEZCtO?= =?utf-8?B?L2thb2U5d01EMElKd2tKVm1xWEJudVZ6ejAvTVhDYkxWMjc3MTlDV0xRblZu?= =?utf-8?B?cm1DN3NIT0NqNHlMVFlKMWk4N245dHBOTXRzckRic3ZFSlVWYmtVdGRuS0do?= =?utf-8?B?TUFscXlJUjZ2UGNjTXVQbHptU3R4MTFQU1FNSDFJZFhPYmNZcFRYWkxobmpZ?= =?utf-8?B?bGxBSXJqaFVpMzZ2UlpMeHpqVlJoYmZJdkdhbHlwQlBNY1FhbncwSHNlZ2to?= =?utf-8?B?Vm9nUXFxRGFDeU9yV0xFZXpEK2ExSW9zOXJFbnhtM1B6Uk5hTWV5NUFQS1A3?= =?utf-8?B?Q2NNd0hPTm5paE5UQ1U3R3hCbXNFWTZQS0tRekpwUDVvVzM2NGUzMTJTSDgr?= =?utf-8?B?TmlycUtpRVNEN0lFbEtjaGV3VzNDNnBpWnQ5a09ERHFZOENCQjJKRk9BSGFG?= =?utf-8?B?S2FXZFV6YUZabkwvMk9UVS84QnphV3pNRlk2Q1hsclIrbnFiOGIvbEFIdllC?= =?utf-8?B?M2V0TkpBdFJDZU45VzBrNldGbi9nVXFaQUFjK25jZHpyajJ5L3QwL01mb0VF?= =?utf-8?B?bysvSllkeHdoMVZ4RzlGRnRUa2J3YndoUEdjTm05dzRnNkd2L2VCV2RvMngr?= =?utf-8?B?TEpyZFpNUk5sWHplZGg2ZkdTNzBCQ0JXM3JMRFpvMjl5VndFdjNFeUF1OXBq?= =?utf-8?B?L2NlaSthRWx1WkVLdXNqaHJ6VTdldWVUc2ZLQ3RCMEVGaXhQbEhyTVZkYmJz?= =?utf-8?B?NHMwbGNwK3FpZWtQQkkzMVprM2ZoS1l2WU5ab1lBSE1aR1RqakFNRWlBdExH?= =?utf-8?B?bzJ4ZEMrM0JFSUo5dDJ0MkwyeDhDS3YyUkhCcjN2RU12U0QrOWczbTk0Nk5E?= =?utf-8?B?QUM1ZlIzNWlDd09hcTRibmtNeVdobzFsd1NJNnpKeHp2K2F0UnJpcFJ5UVJ2?= =?utf-8?B?MGdJS2lUQWN5emozNitzbmw0TUN4aXJEdDF1dkZGTWd1WHdFTDdDdWo0Z1Rj?= =?utf-8?B?SXRINTN4V2s2dHpYZ3dCZlFScUpUekt0aGVsUzE1SjhRQ2FCMDJ6WWlhYVd3?= =?utf-8?B?VUN4UTJvS2U4T1pNRlBMbnBzSEtDRW1ZdFJUakVaSHhRT0dzbXJDbXpCS0V0?= =?utf-8?B?eVp5TjdxSElEdktPclJOc2c1cUdNdU1CTC9IeVlUNXQyVUcxT21zTE0vTHg5?= =?utf-8?B?TkJvdzIxYVF2aXFEQ0xHd0wzenVuN2pHeVI2WWc4eW90bjBjN3J0UDFtZnlG?= =?utf-8?B?NEJVS1NycVRFdG8wR0FBaEtIbGtzWjhHYVN4eVhjS1grVHgzc0w2eG5QdDRU?= =?utf-8?B?enN5OHkySGI5SDVsNFMyQ244aHduNW8zZXowUWFFbmRFOTljQ2xMakJBMktO?= =?utf-8?B?c1BnZkxadi9IdytXUFpGUi9Mbm03MDRrb0JFdWpHLzBPbnZCNkgzM2J2bWlu?= =?utf-8?B?QUJTK1NOZktzdm1hYTI0S2d6NkxTRDVGMnRteEtiVERQZzdPQ3pSYVlDdWV5?= =?utf-8?B?ZGpubUJaaEczZi9DZGtUbTFzZW1PVTZ2Rk5xM2tyV1hWQXI0aXljV09mYnk4?= =?utf-8?B?YWlzekU1NHU4b0ZsWmFvVTgzOHFrWFphUURac0tva1RvSDFmVHJKK2E2TXlq?= =?utf-8?B?QnZsaWdQYkxzWVlXNUZvTVdFTlJWY1BKWWJxUFE0cnMwRFVQUks3MU84c2h2?= =?utf-8?B?Q3JBckZiUDlJRE5SbzZLbkxRWmFoak45MEgrZnR2MWZYYUtxR2lCZDdwSU9a?= =?utf-8?B?OTM0TTdQN21MR2lack1tTmdVNGx4WkpTYTVHQkpDRzNlcFVaelRZNy9JakdU?= =?utf-8?B?Y3BkQzhkVEN6K1o2Vmg1bU9kWjRLazNocWdKL1lKa3BBb2wvZjIrd3NmNThU?= =?utf-8?B?YTN4NkpPS1lFYWFMRlJ2TUw4ZHNIVVJ2OHRVdndJdUtXS3ZvZXhSYi9GMGJD?= =?utf-8?B?MmFWZEx3RGtMYUszdlE1RWowcHA4ZlAvd0h3akhYVTQ0OVpzbEUrTVRrSkM3?= =?utf-8?B?VUh0MlBtcjkrRDMyWEV3Z21wTkVzUXlIVzB2NDV5b0ExbGtuSWttUkUvbktZ?= =?utf-8?B?bUpMRVlVdHNGa0lGZTRCMHRNZzhTWGtTMnplVmdBR05qME9XKzYzaEVLSytH?= =?utf-8?B?bFFtTkdGVWpOS0xnK3VmYk1qZElsSCtRZGdYMmFtQ1k0UlFxRHV0SWNCa0VY?= =?utf-8?B?bDMzc0tvRXBRK0g4cEMzOG5UcFg3VGFhSkxRNnVvV0NKTWdHTUxhYXh0Rjlp?= =?utf-8?B?WVEvM2ZoRE9VMjRNVVRlZUczUHI1bFU1ejNFa3o2YUtzM1lKcEJXL2Z6ajhR?= =?utf-8?Q?sZzYRbMd5y0nCu5vPFupFdAHGqNIIcjigev+qZPfYXtkB?= X-MS-Exchange-AntiSpam-MessageData-1: 51KLXj93PNbLVA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 10ae94f6-6c88-428c-5cec-08defc2ddbb8 X-MS-Exchange-CrossTenant-AuthSource: BL0PR12MB2353.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 17 Aug 2026 07:05:02.4185 (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: YlyzK0DBAFGiecRy7RLLhUgG98wDKb2FFTJ+WjeYiIalyGLpC+mdUKa6XnF1u9YNOv3p/YJmDf1MD/XMPyRzGw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MW4PR12MB6732 Use `SizeConstants` for Alignment that are implemented now. Signed-off-by: Eliot Courtney Reviewed-by: Alexandre Courbot --- 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