From nobody Sun Oct 5 12:46:13 2025 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2062.outbound.protection.outlook.com [40.107.220.62]) (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 E8178204090; Mon, 4 Aug 2025 11:45:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.220.62 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754307942; cv=fail; b=MRrXJ7d+kD6LEpJWNAA6JCFLD//NU6gR9hCQ/12wI3JwkQKdcLuTKQeSgdPwp5tw8wRS9iGyRIdAA98+4kwivONUhmCpgE/vHZdjZ/jJZc2/3sDS27Q5TycosMieRr7Bmt9zHFBSlttJizQZ1iJK6nY2RZySSht/xDrw/deNzPQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754307942; c=relaxed/simple; bh=ZxaHJsAXE8++gZGLBrswH8V812WbnD4SV+H7N1SZCRM=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=NAYNj3TlLwg5PDkRjJpg32FpTnPrR+W7hsHD4OQ4o3IqGwOic+sbbik/ulvAEkW2yKEOWIOSCKM/LBtdl28IpXWitl+3xKZogsPV+nhic8xAG3qsaBHTDvEC+SafY9junzPK0od+D0zpS5DpbrzKMKgOEDmjn8Q884huiCZnTfo= 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=V3FBFGNc; arc=fail smtp.client-ip=40.107.220.62 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="V3FBFGNc" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=WVxRxRtbqNHLgaidvNJQynTAV16Vo5yXJMCpV1H9sjh5ucAC8E+GlXZtYOg6Crinpqtub8oL1uY+v8l7bvOuVISrehZvfotsBgf9vMsEoywFDWgiIYAM9gtp4gyJ5FfvDX3uLWKlYNa5DMiaOb7O7W+aZfPDf6sQFlv5U7ScAZyaCLRSJ+wPLcriPARpA/7z9aYdiuogjzlb3IOUavSXhbKuV9I5TfMabPO3rX2mkiawbCti10kp7hZ0T6qwc76HdjAMrEDaL/ZX8LCfJGxERghKBjlrvEMNCcvQ+TFlw0WdvXVuCiz/kSJKwBGf/+uPB+ULmzq5TgIp8Ig5SkKcEg== 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=5LPEcQuZicKVeWHahCDoSbvKUGTG6T8K7EQK7lB8xwk=; b=ZzyZOl20MpYfgMDISvW5F/j+Ret2oZIi3GP7YWhIohs+Xvfb4/tcqyg2q/myxZfFInGEJoGNY/qxKFd/DIDPFew8iSYUrOv87IYRhkiLWmad/eIRjyUXyWH3Ypl92TGiReYZznEVFXbuq7MEbdY5Hluk4Z1IPLHVEpg0p5aYjWSLQdwYs/BdKHfAETEI8EJVxVBAqFZZq9G4i3NYt0DSnE+4ThmWLQ8uajSg3eFchxiQuM5E6cGXyaxKtju7jJ5Rc0wZWut7tSeXKKw0RrD7+JSjHvD3NtKgTDoXUUCw4qAZy5qGDN8rYpBVDvmudY+9TknPcaU7hk7KPON2vHFyGQ== 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=5LPEcQuZicKVeWHahCDoSbvKUGTG6T8K7EQK7lB8xwk=; b=V3FBFGNcB0rENxcvewD269toQ2gUgp05Jj1qZ0sBOw60ET0Wv1g0Mvi4uJq5h06qQ77avvrhXFd9C/pk3FZvHCpSD10vCfb3iXUPWq1VcpvcsSADtvnVK86FJcVE5x+mRvUG8wbObGWno5lRZ3qqBLzz62VeHkLRtIqHKsfgJHx2extsm79O53ZYXZiTbJ39VqKdnc/C+pjzsCIytGJ5S24VbOjyt+AU5g69tE87pKZMyp/y58EW3coKicPe2vBRtw6mGXn71fnw0H25dM5iz9nfybKjLDEJQW8rqpTGuxg4Qrt8Hpuc3eqI6jT6D8b37kGnKdFotZfDpEbPsh7D0A== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by SA1PR12MB8841.namprd12.prod.outlook.com (2603:10b6:806:376::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.21; Mon, 4 Aug 2025 11:45:38 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99%3]) with mapi id 15.20.8989.018; Mon, 4 Aug 2025 11:45:37 +0000 From: Alexandre Courbot Date: Mon, 04 Aug 2025 20:45:24 +0900 Subject: [PATCH v2 1/4] rust: add `CheckedAdd` trait Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250804-num-v2-1-a96b9ca6eb02@nvidia.com> References: <20250804-num-v2-0-a96b9ca6eb02@nvidia.com> In-Reply-To: <20250804-num-v2-0-a96b9ca6eb02@nvidia.com> To: Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich Cc: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, nouveau@lists.freedesktop.org, Alexandre Courbot X-Mailer: b4 0.14.2 X-ClientProxiedBy: TYAPR01CA0097.jpnprd01.prod.outlook.com (2603:1096:404:2a::13) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|SA1PR12MB8841:EE_ X-MS-Office365-Filtering-Correlation-Id: a616c347-d5ea-44ed-22b9-08ddd34c6dee X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|366016|1800799024|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?cGVpYzRkeW5iN2ZLTGdZWUNuYVlTZyt2QW5wTlVLMkdTQkNGN3A3MVJOWHgz?= =?utf-8?B?NVRoMGNOL09wVnZPTHViQldtYUYzL2ZWekxHV1U1VGJIcGQwazMyS0ltdTU3?= =?utf-8?B?OGVhTHB1Zk9rREh3dkhKNnhBYkIwUnNSREFVajRENE9JTWRwY3NpbTB5cVBi?= =?utf-8?B?eVFwL244VzIxUUdtOTA5b0IwZGNCM01Jc3Fjcm5lMWRNSGNUcmpYZ1JtcGZl?= =?utf-8?B?TW81WGtWZGJTdUd5b3piYlNjTzlxRHdGaUhqNTByQWJPaWxKQjRqZW0zTnVH?= =?utf-8?B?K09xYXJHbC93aUMyK01McXBYNnphY0p3bHB4K291cFZNVHNhVW9XeVV2Qy9Q?= =?utf-8?B?ZWp1MHZ3dk9mMzJyYlh3QTBrb1gzQXJqM2hMdDhRdzNSQ21BdjFKSFV1eGRR?= =?utf-8?B?aGFIWjRyWk1pSkVUdzB3Nk9uYXB0Z0trSXFNdjR3NkR2ODNOZHlNUDdpb1hu?= =?utf-8?B?LzBxNGt3d2dadzRjbnVHTGhIeGQzOVBhTy80dVFQZ0tUd0ZEaXVCa2d2aHdo?= =?utf-8?B?QjVvVzBmaW9na1J1USs4MktNaGtHTTRlL1F0ZG5ucnNJdmRjNmdmcXltZnk0?= =?utf-8?B?cmJMZFVCR0UxU0FLQjFFNCt2T0R1KytORXlPby8vQkZGZDlkaERZVXN0bnRp?= =?utf-8?B?eldkenhVdG9rMU52RFNoSGhmanBKcTJJbzducU1odmExMFVZcHNzeUx0TkFh?= =?utf-8?B?aG1ML2MrZHJ5K3FMLzlib1RoVWZWcnI0KzhLZlhraEdGMDlZM3hRL3Z1OUk0?= =?utf-8?B?VUFiMHY4MmdJbDk5b0Rzd3loMjFNV2g1eVhxRmRjL3p3RzZZaU9ITnNtY1Zw?= =?utf-8?B?WlRzMXhmbm9sdHdLOEdoazBpd1pad1Q2SXFtOUI3eXprMlJzdU9pLzdnRUtt?= =?utf-8?B?RDJMUWNxTEJoVWdhQ2xTT2gwWHcwWDBGUG50MVA3T0puNGt3c0RFR01ubGd5?= =?utf-8?B?UVo1TDQ4bzhuYmhNVTdEM0pQTnlmTmJoZlMycnJ4dEJVcnVEWUNPSFRnWHp1?= =?utf-8?B?aGljeTNwQWdLMmljNmluYnlCZk5yM1kzZ3owbkY4WHk3WWRPWWxJejgrRUY0?= =?utf-8?B?NEFKV2dOY3ZGNFJIQzgzdEQ4Um5ObmJLY1ZtYWI5SWhGNE5GbmYxUyt1TS9W?= =?utf-8?B?Rmk0amJCb2Yva0pvajRtQWorYmhTZjBwMEgxSjhFcmkvTUNaeXJ3Smw4UVFo?= =?utf-8?B?cy9HYjAyVVdtNmFKOWJPY2ZGcnRidW1TdnI0WVFDRnZReGVVVjBOTmlUWHFH?= =?utf-8?B?VDFHdnJ4TVJTV2p1SzJzbUZLTmdQcXdOdWN4OWJvazRpUEwveGlhazU4QVl3?= =?utf-8?B?YitiL1VnSExjcERVd091RS9qT1hMU3MxaktPYjhnMEpDMVZ0WVc5NUZJZ2JI?= =?utf-8?B?czlFOWZoZ2ZXMlEvTGhEck9QWjBFVkh1VllPMld5a0JXazNLZUJGNWtCUmtw?= =?utf-8?B?TUxwakV0UmlPK2l0Qk9YOWpyV0EwdjhmWDJiM01WcHZjQjNCSnovT1VnTEVr?= =?utf-8?B?T3huNWJyWS9Oem9zSWV2MVRoSzNyMjdhRmlyOVNCUkJnMXpuN2QwUWtTYkNn?= =?utf-8?B?MnRzeHl6bVZyRk90Szd5NmhJSW5Fb2VjdEE3T0ZRSmtkaGMyVU1NSDl4QllT?= =?utf-8?B?L1NjbFZXYm5OSXI2NlRkaW1vZU5xNzZrNVdER3BKa0pSVVlVOFpFYzB5ZS8r?= =?utf-8?B?RGFzVkNreThWYllWNVRaVlRERUdkd05UNnlsZStLV1Eva2l1bmFURFduVWtm?= =?utf-8?B?amNTdEJFZjdBZm1KYmY5aHFCOHoydjBvV1M5WDNDeGRDU0ppdG9xTW0rcmYy?= =?utf-8?B?SnM0UTVwQkhTeU0wbEhTWkw0RGx2SDJqUDE2UUgzV2FGTkNOb1FTVjJOOHo0?= =?utf-8?B?aUVLaHo2a1ZXcGxHenZqOTlpSFdjd0RWREsyampBelgzS096NEsyTzVESmtT?= =?utf-8?B?dGI4TUI1V2ZGR2tTWUdudkp3TnM1UDVLbkZFSUlVR2JYRlNxVGU2ZjlzOCtO?= =?utf-8?B?OFhxeWZ1djNnPT0=?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(366016)(1800799024)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?WWFXRkMvRitpSHIzWW10MkVtbzduL1RZSjA1UFBuN2t3ZVlvNm9yMUhLSmxn?= =?utf-8?B?TWlabnN1ZE5oM0tvSW5Qb2loVE5GbzBJUVRsTjFURTdUS0lNVEpjTTRwZnlN?= =?utf-8?B?enpQTHRIdEZMbE5rOENNbnRvWVB0ck8xcER6d1c3VDNvbDhtNjNCYXI4bGFX?= =?utf-8?B?M1p1VkhEbGdHc3ZRQVd3SGRkdWh2QmJhWXgxam5OZ3hqMGVoY0xWRGpWRW1u?= =?utf-8?B?MWd5dFNvUnN0alo1b0RId2RWYnNYVWZRcGFiSlRsRDZGT3lLdVF5Z2N3cFVY?= =?utf-8?B?dm1hdzhORVRiRE5tcWxRR0ViTk9YS3EzbVZYejdJYmpaMGcrL1psMEZROXNm?= =?utf-8?B?Y1U3VzNQS3AvM1E0YnRCY1djMWxoN29OS3FTb2RtdUJ0ZDNsK1V1ZmNXMjFE?= =?utf-8?B?M2FHMUp3T29qSm1hL1BmTFpGamZnc25pa2hraE1Xdjh6eFdjbHExSFNyUzBr?= =?utf-8?B?eWhBNVRVSi9MdlR5Y0xXckM5Y2lZYkEzMUlNMk5HdE9yeEg0R0Z0WUYzSjBn?= =?utf-8?B?M1M0RmV6UjBBTTBEcEJhNkJ6cXFQN3RPbnZDbXZVVjFyejBpNEFPSzNGbXRl?= =?utf-8?B?Rm0wVnd2ZmVYc1NIVDZ1ODVURmduYWdjdXJTNXZEYlBQa0xQUWl0djByTGxj?= =?utf-8?B?U2p4b0tBZHpqN2RseFhDOWtjZWRDVGtSektnSWJrWktXbTZEYzhHYmZHYW14?= =?utf-8?B?UmZUUUtHUTJudS9UMnhCcWxZYVVxNkVOOFY1cjE2RDFST0h3SlM3RUxlUmlU?= =?utf-8?B?U1FaZ29ZYlRWcmlTdTdLcmJGeXZDYnJ3NmNMaS9OSkJHUCtlNEpOMGhzY3Z2?= =?utf-8?B?OVphMC9Ndml6TnZTMEtYdVlSclFSSTEvWnp4KzMzSW9tc29tRU5RK0orc09T?= =?utf-8?B?ZjNCclQ4OTFGZTU0aGNxeHVwb003M3JVbGtBT3VJeU9lS0Q5bkdZMkRyY2F6?= =?utf-8?B?NFFGanNsRDRHVjg4RlJ1TXNaZjVmTFp3d1ZZZ2dmWmZYWklEaGpqNlhlRlp2?= =?utf-8?B?SC9DR1R0aW9IT1UrbDIzRDJIUFM5RTh6bVBtVlZaWTBqc2RSQXRzNnFBcjFW?= =?utf-8?B?Z2srTDRRc1BMaDdsbE1LK2JEeFI3OTNSRC81REdXZ1o4QzVqd2x6VzVRRjI2?= =?utf-8?B?YkNkMG41SnJwVXcxWHdkY3pFNHF1YjRSbjZRNlR1SHV4aXpFT2FYQ3A0ZFV6?= =?utf-8?B?WDVjTmhJc1NOMHZaVXFlQWF4TUg1UWJmRnhUT0xvWEs4L2E0dWZ3OFUxOTVs?= =?utf-8?B?MTEwN2FRWU45bFA5SitZSVd2WU5EMDdSUDBHWE5yMHo5ZGVuUUs0Z29oOC92?= =?utf-8?B?SDAzM1M2YVc2RWxnT3Yza29Way9TQ1Z4V01EdndrRkNMTG5YK0tldzBsaUZN?= =?utf-8?B?d2grdTF1TUxHK0xUUnl2dmZDeWxOK0NvZkJYY1pBWmhPek5ZWVJDbzZSS2RU?= =?utf-8?B?WTFlVG5LK2J2YW5xdWJ6R1JYVk40Zm00YzZjNVJQWE8raVd6ZVJ6eWZyT2RN?= =?utf-8?B?S2tCeUQxbkpMNGQwNDdWc2VLaGVuU2JvbjdyMFArMlZBbXdvRWtlajlISklY?= =?utf-8?B?NFVOazh0eUhCVzdzbGpDcDQvbTkrTTcvcGhIUk0vQSs0U2dmSUdlcVFLVDRp?= =?utf-8?B?ODUzUkp6UDIvby9PNXF1Q0gxNCtETFdsVG9ZOEkybFJuQS9vZ2NZSlZLUkdT?= =?utf-8?B?cWhnNDZaUEtlMU8xL0h2NkZ6Rk5mNHhlaDJRenNKQ1kwUmppc3ZMNTNzbkxR?= =?utf-8?B?aXZ4NlpCRUpzTEFKZUFuWjY2dzkwQzRXUlNoRHA4aUZFRUExZXFlTWVKMkR6?= =?utf-8?B?YkY4RXhqKzl3WkN1eS96MG5vSFpiNFlCNUtOYUdqNEFDWk9ablgzRmdzRks5?= =?utf-8?B?MzhVdzMrWEJQdys2SmlGT2lGSnpMM2Q3aHBFaU1XWnhrWkRUM2taTVE5R2l4?= =?utf-8?B?Rm5hUE0xMkhuM0xHRTRqbHRnLzlRM1BISERmWHpoMzljbWRWVUR5RzBUUnBs?= =?utf-8?B?VjdxTWJUNG1RTHlRMnlQK1BlTDVqUXloaVFsNDl4Y04vTVhBR3hIZ0UzNGlM?= =?utf-8?B?dHU4UFdxRnBlRUdBK05OeXZ3VUJ0ZERSWVdCMEJjaDlSckhTbThVMkRmWjZZ?= =?utf-8?B?dkhWQVFReWovdlRJL2s4ZUFZSVMvN1pJMWxjZGFqaGR1WFpNQXRTaUdka0JT?= =?utf-8?Q?8CMjhwqVwH+La/U2kvQehqE2tNVzwfPqQj+aKiyCnVkg?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a616c347-d5ea-44ed-22b9-08ddd34c6dee X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Aug 2025 11:45:37.8752 (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: ZyHsqMkiJZno4/sT2iPN4KIqOMHMtFxHDJ5XY+jILJGZvRK41QV4LvQeyLK1y7QMPECkstwP5xZ85frvzYEgeg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB8841 Rust provides traits for standard arithmetic and logic operations, but in the context of the kernel we often need to consider overflows. The checked Rust arithmetic methods are unfortunately not behind a trait, which makes them unavailable to generic code. As a start, add the `CheckedAdd` trait providing the `checked_add` operation and implement it for all integer types. Its name and location are inspired by the user-space `num` crate. This trait is to be first used by the `Alignment` type. Signed-off-by: Alexandre Courbot Reviewed-by: Daniel Almeida --- rust/kernel/lib.rs | 1 + rust/kernel/num.rs | 28 ++++++++++++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs index 6b4774b2b1c37f4da1866e993be6230bc6715841..2955f65da1278dd4cba1e4272ff= 178b8211a892c 100644 --- a/rust/kernel/lib.rs +++ b/rust/kernel/lib.rs @@ -89,6 +89,7 @@ pub mod mm; #[cfg(CONFIG_NET)] pub mod net; +pub mod num; pub mod of; #[cfg(CONFIG_PM_OPP)] pub mod opp; diff --git a/rust/kernel/num.rs b/rust/kernel/num.rs new file mode 100644 index 0000000000000000000000000000000000000000..c81bb046078b70c321dd52aa9c2= b5518be49d249 --- /dev/null +++ b/rust/kernel/num.rs @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Numerical and binary utilities for primitive types. + +use core::ops::Add; + +/// Trait for performing a checked addition that returns `None` if the ope= ration would overflow. +/// +/// This trait exists in order to represent scalar types already having a = `checked_add` method in +/// generic code. +pub trait CheckedAdd: Sized + Add { + /// Computes `self + rhs`, returning `None` if an overflow would occur. + fn checked_add(self, rhs: Self) -> Option; +} + +macro_rules! impl_checked_add { + ($($t:ty),*) =3D> { + $( + impl CheckedAdd for $t { + fn checked_add(self, rhs: Self) -> Option { + self.checked_add(rhs) + } + } + )* + }; +} + +impl_checked_add!(u8, u16, u32, u64, usize, i8, i16, i32, i64, isize); --=20 2.50.1 From nobody Sun Oct 5 12:46:13 2025 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2082.outbound.protection.outlook.com [40.107.236.82]) (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 5F89C2580F9; Mon, 4 Aug 2025 11:45:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.82 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754307947; cv=fail; b=oNxX9wDx2rgNYyoAMQNFptPyt+19LgMgncHV8JSvZv1kmX7K6CMjGC0sCEMWHEojDtLPH/K2QphdM4excwG1i4dVRTDc375G8fa1wmGaAhP8y0JbsJzg3+8QFIlZfSo4gHfxH+ej7S5kn8cWFBKra1wU129t1/kGO1VVMuVCghM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754307947; c=relaxed/simple; bh=uj3HO27dp4Na5b19VZv3YvtqUij1tWt3eoGVLz2s+7U=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=KCDq6oZTGMPcwnTq0z1mokCqI1AEo4L01FogxpoPpT5AvHlvoRuXunPpPpPvCrCIIsy1FIeq1gDuw7qfZUQCf5l+kVbjA4SFemUV/irjfWaOjASurEI04VOB0IS++zo/JU0lRrdSd3Z2h9LX2Er9b+SeaZgPR2kp3B3Rtix275E= 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=h6BGnned; arc=fail smtp.client-ip=40.107.236.82 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="h6BGnned" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=LkSlnbIKdTOzKNRHhDZt4kinHxs6tbGM1zxLkPt3sXcxGsc4Y6C9kLJ2vrexLykYCM0SWqoPZgfFTR2RQNIVFpgd5dk+ZSvNQhRd+OM9hy1i37OS9tpgzT99w+HOP9I/kkCcuN73UCX7iZgYwBLKsOLgwS4rM5w+Z69UbbJqgffN3vmEOMoz+KcJaTF5bOgVCr+3KGq8J2GLA3prARpI+kFpDElYp4EaTDK1A/zWIDrQrSv2NMF/7/aMSpPxHR6Pkh1cMO/TKbEqyEfE2Wxe+zPTEtDH+VEGkl4uVHeykFx+6juUcfh1XaX/gVSAwsyp1UGHI1iC3tsI1aV927N0Ig== 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=2FYGVmSkFDhJhxgA9KVszDuELPp34tiKUPp68dK5VbY=; b=YcZy6hrzwhBmkTfY8qif/ssIr5qXVPirpX5+yXRlhapQyKCRTtIb97m22AOzdFyBlpn+lLD4w3YZ8h3hy7mnglU64iIfJ4oGKZ+BisOf6biDizdPLMsQzr9/fbs+mejWX9sVuHbfDK6ZFjiNVsgLrcPCZacjrVc7tHffR/7HUqZQIm2OxQCDi+Leu84+tjeR3ElBQz6o1X13tHhpr7rU3z0IeP35dSk7nmw/k8MNSjVogQe/pba6QQG3lf368CxFsOBtlqk6fOpGNhN0lCprkDF0cnjY1rtMhjJbzf9ptNTrJxBOxHojhrVi577JjfxLOx4DgMwLKij/WMzYaokr/g== 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=2FYGVmSkFDhJhxgA9KVszDuELPp34tiKUPp68dK5VbY=; b=h6BGnned7yZlbi5cJrpe+OQCEeu0CKlZHMFYGEfvdTOTSRKaGapnsP3kg3quIjgZ0cu8GmQMQAFEgejQ2Qf8PmEIsEEPkxeBCDxIhX7rQRDqpPM8WsfnTldORIDQdov2r44aUASOinQm1g/s8mg7HD5RgRIGHfWxJhXwNPV22lLAqZUD36qwy/oRTBxoGXLe4FU8F3cPckOofappAHUPR+lLono87x2hFGxcp25dyforfw+GRX/1umJp923ApEB7YNIsD+wZzM6J9B7lYtKU79g/PUtk6DgpZqZ0Q37/B/awnQDLo+ZOwQWZG/iin4VtTg+OCqj6fPP+NGex/n8zrA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by SA1PR12MB8841.namprd12.prod.outlook.com (2603:10b6:806:376::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.21; Mon, 4 Aug 2025 11:45:42 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99%3]) with mapi id 15.20.8989.018; Mon, 4 Aug 2025 11:45:42 +0000 From: Alexandre Courbot Date: Mon, 04 Aug 2025 20:45:25 +0900 Subject: [PATCH v2 2/4] rust: add `Alignment` type Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250804-num-v2-2-a96b9ca6eb02@nvidia.com> References: <20250804-num-v2-0-a96b9ca6eb02@nvidia.com> In-Reply-To: <20250804-num-v2-0-a96b9ca6eb02@nvidia.com> To: Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich Cc: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, nouveau@lists.freedesktop.org, Alexandre Courbot X-Mailer: b4 0.14.2 X-ClientProxiedBy: TY4PR01CA0084.jpnprd01.prod.outlook.com (2603:1096:405:36c::11) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|SA1PR12MB8841:EE_ X-MS-Office365-Filtering-Correlation-Id: 2383e9d7-fbd8-41af-281e-08ddd34c70b9 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|366016|1800799024|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?OFNuNmQ3OWdGcUUvNW9YNlVmdEhCZi8yQ2l2OUhKQVNRRnhDVjcvZUJFRWRR?= =?utf-8?B?Z015TGR4eUtHL2lIQ2Z0OGRFcDJCOVljYzJuTXpwTFAwWFd6aVJNUDhwZnJF?= =?utf-8?B?TG13QTA5dm55TEtYODZKdEdZUm1vRzhKRUxSUjl0cm5XeXRQalJPaW56WXpL?= =?utf-8?B?TnVRSkZTSkFXWFdOK1hlS2VRYmYyeXc4YmN0K2lteUFzVnlVcW4rcjBDTFlj?= =?utf-8?B?MFh6SjVCT3o2c3hPU2xkdStXSjBXSEI2UHRaZUhwcWlFdk5aU1IzYUpObHUr?= =?utf-8?B?emJyNTh5QjJ6enQ5VWlTWlRHMW5STG9BUVlmNzRzZ3czVjhiQ1RyV3pKTjJz?= =?utf-8?B?c3M0WEJGaFFpRjR2WXV4YWxRVlY1cVk5TnNWTzFoUk93Tk9abkVkbG82WnVS?= =?utf-8?B?L3locWlVbUtVWURmWkg0YUlJc1VNSGs3a0pYRjdNOEpEaGowcmd6dmhLQXpI?= =?utf-8?B?L0cyemJib0U4WnVVTStHcnNhUkNqTVA1aDlUa2hPVm1Hdm10M3RNS1M4Wm1V?= =?utf-8?B?cmFQUUVpRmpSNkU0enRNRVcwNHVSTkJ0ZDlEVUNQY3A3UFd4OE50QW9mSTI5?= =?utf-8?B?SnZ5WkxzQ2IwRzdJUDErT0pOSkw0SHVlWnBtME1TNThVWXllTHRMcFIwN0d6?= =?utf-8?B?QzZ2ZXlob2lYZHd1MzJJSXpkZEgrVXpkSSsvSE5UNlBrOW9rcklQZDc3QVlu?= =?utf-8?B?NlNvalJtZW43Uldac0ROUG16UHNVUTNvV3JtTDNid0t2Uyt5N2h3b3BKa2FJ?= =?utf-8?B?RVpZTWxvRWpZUlEyRU1aUktqQ1F4OFVpYTN1bWtrTXlabGdRWkZ3VXNjaWc1?= =?utf-8?B?M3lhSU5saWExTWZFVXFwc3NNZVFjOXIxNCtqZGl2all5ZGlVQnFCcllDc2xw?= =?utf-8?B?S3N3aXJoZ2lNWHljSVNvRmlHa09qaWR0UVdjb0I5Z3hMbHlHRklMSnhuNSs5?= =?utf-8?B?a3FwWlFpTy9DNTdlRGtmSGhtVjc3TXBVWHBOR2RNS3VyMjZuOXB4dzRUd0NW?= =?utf-8?B?Qy9SekhtTk95aUZWYmdiN29sS09MUXloSm9IQitrUnZ4UFQ4K3dETmpWSXlQ?= =?utf-8?B?MjBKajFKdmFzaEloakY5YnJrQVFXeFgyKzdyd3NFMG8rdEJ2MCtha1EzdXdu?= =?utf-8?B?TnczZ2cvMitHMHRrWHJvMmlEUXg3eXJONEhXTmZxRjRrT00xMG9nWlo5c1Zo?= =?utf-8?B?cXFoRm9TaUVVWmFrZHRaM2RWQVFqcmJuZTJaaXlsTDR1MWJaenMvOU1zWXlz?= =?utf-8?B?bFhUd3lVZ0R6OXFjQ3RHVWYwZ2IrK0pJSElhV0ozUm1HR3VDcXpCakZNVmhq?= =?utf-8?B?TDYwdEFKbGowVGpweTk2NEhXV292RDUyU0F1Rmk2RDFwMTNOTFp1TE9wWGlt?= =?utf-8?B?SnZKaEM0YmFGZHVWK2pHUHYxaUxmWm1Oc2dCR3JEei9kOHlBcTdsSU1DWEVJ?= =?utf-8?B?N0hEdWZUUnE4NTB5S0tIUnU5NnRMdEFYRjZuVUVyUHhrT1p1TlpaSDNNWHN6?= =?utf-8?B?N05YdW9VNVdGS3plZ09iOFJ2Smd1bHJuZ1EyeDVOSjlQVTNuSUt0b1JqN08w?= =?utf-8?B?QkdabkYvODE3NFNDNTZwMjBCQzNzR0hjRk9TY0Vua2RLOCtJOVFBUlk5c3Bk?= =?utf-8?B?aG9kcGUrRTEvYnNBcHBVUjVnUUxvd25yc3lQOE1XVTRXVXEyVnhwM3lHME4x?= =?utf-8?B?b2M0YURGVUJBWXZ4c29ZY3BaTVNIUzZNWElnV3UwWlkyT3JGcWIzSm5uMU16?= =?utf-8?B?ckR5cjdqeEFQL1k0RXJLdTFoWlpiWlkralNIVXdKWENxMC95aTl6cERzaFZD?= =?utf-8?B?Z3UrYU9lbmllejVKcVFNR2JBNzJ1RkxvcTJlUzUxYW5jZEpSM3BXYnlvOFhF?= =?utf-8?B?akZ4aUE1Y2g5ME1sTFVzam5TWlkvOEFoUVlYSGVONFdjTk5EUElWV29IQVM3?= =?utf-8?B?SmgwY0wvMElnK0dmU2NSMzdGbUlRU3ZrbXBMVnVvN1U0V3UyVVhKcHl4Vjl2?= =?utf-8?B?UTdYK0t2V1ZnPT0=?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(366016)(1800799024)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?clM1MC9GTUliaUxlSVFmcnVVdytzRjl0b2FROWVaRGhMRmNNMWdYeDdSWVpW?= =?utf-8?B?WjVDdG5wQmFxbkxKZUg0SEU4SUVIYkFYVndpdnhFSTljUHByaURCa3l5dTZ4?= =?utf-8?B?S1ZsSHVSZHlUeEFiQnhUUWJNbDc1clRja3FKZXRHekkwbEw2VlIva1BIYi90?= =?utf-8?B?bks3bTdsaEpTRE9ZZUUwNUJkVFlsQjVLSmFlRkdDeGhneEZIaVlVWGJvTkty?= =?utf-8?B?Tytka21IK3VJMmRUSE9Edi9CcnFURTI3d0VwMmhrY0xJV2RIRXI5WnZWM1JE?= =?utf-8?B?dlN3dmVCelRvSnZZeXlvakYzSXR3ME1MOUtoaTZGNzk0M1R3S2d6WlRTOW9I?= =?utf-8?B?NkdTdVIvSytreWp4QlpQdFBjWU1KSDRnSzRzVW5pYm1UcnZmL1IvQzU1L2JJ?= =?utf-8?B?QUE3MjZBQlZ1WHR6aVgxZjMrY2ordmZFbURhaGR5cURTYzI2VnFnSllCcVJI?= =?utf-8?B?RjRRT0FVcXdiWHhDenFUUFZPT09Wa0Z2cEJnY2xOMVBpOEpaeVpNc0V3bU5U?= =?utf-8?B?L3VJVzBUc3NpMUNsWW9rcVMvbTJTSU05eFlMbjlUcUIzZ052RWtFQ2plWU5B?= =?utf-8?B?WENOYkxzMW0rcWRJQ3ZOMU9yK1BLMnVBZHBqQkk4TjF2ejU0L0lMbGRRTkJp?= =?utf-8?B?dWY3ZFA5NTAwSXY1cFBkSDJWMUI2VVhOdEs5dmdBbUJMN0tZYjFZTWhjL3FY?= =?utf-8?B?SXk0UTdoRHp5SEJTdG0rUnpZdm5sVElJMnVSL2VlMCt2WlJjWDArZ0xhSkVE?= =?utf-8?B?TmROMW4veUFpZUlwcGJQM3BNeXVmMGUraXV6MjlsQkx1TXU1TUphU0Y2ODZw?= =?utf-8?B?TEd3Z0NWeUN5QkVkakM5NHdaT2gvTkhBeDNRQXpHeW1HZW1PVWM3dUxoUHRz?= =?utf-8?B?ZzlvOWl5TDg0WlVVaURHQ2oyS3hySGlIMm1jamVSbDd0aWdsNlBvTWhJcXR1?= =?utf-8?B?dm4xYlhvcW9XN29sL2cvamxGdml0czJMRTEvUDhCdUhUM2V3b1B2a1VjNDJJ?= =?utf-8?B?OWppQWpscWMxckJteDRNdVdSZXB1eVJtNUFOYnNEWG1JYk5NOHVLNUtURkEv?= =?utf-8?B?NWRTL21tYUZZSWcyLy9RVFF3OStxR253ZnRrTmJtaG9Hd0JuMWNjOTdEMHNZ?= =?utf-8?B?WHo3MkdnMTEyUG1SNk4ydmZPdkkwOTRBZFFLS0MydEUvZGpwaXZzNitINzZi?= =?utf-8?B?MWVPa1VCZ3JKdnFHSUZVWkhjbkU1bWFSYWs5ZWFnOTJGdmNlMVFHU2dsNFlG?= =?utf-8?B?ekd4ZkNJOFdnS3VsZDd4OWRRcGt1QXBZcUkxK1Rjd3F2VE9hWGErSGtGenpZ?= =?utf-8?B?Y3lOTVhqS3NJVWRPcVNQT1h0bUJtUnE4NlhpSFlCMHBrQmdMYVRhRHZUaUZW?= =?utf-8?B?djBteDdNV0xiVGl0ZTJTM1NteW9UbWJ4NmJBcWJCU2xlNytHZ0tWakhXTjQ2?= =?utf-8?B?MGJXRDJEOUljd0hzOGtDODBYeHBNY3pNZE5wZCs3dHIyZnI1WUxJZjlrSzIx?= =?utf-8?B?UkN2cW9CWE54YW5lRzZlNUN6M2NDSHNMNGwvZlZ1Z3F3Z3M5Tm56elFER1Ju?= =?utf-8?B?NUJHMGhOTUJzUUdoekdzSklLK2srTnRyTE9weU9HVXBzY3J4UGtwV0RxR2xO?= =?utf-8?B?blBwbGQrRnZKdGlPTU1YZzRnUE8rNHhtY0p5TUZIYzZsWHBPUzEveVlyRGV6?= =?utf-8?B?b3ZQT1JwVGVNamhRUko3U05XOXRIUDl0dHdIL2dxMlhoNkFJWjcwekFYai9L?= =?utf-8?B?UWFtbkNwOWNLTndrTmg3VWFxQm9rUnBZYjlRVzhxQUxMcms4TDdwVnNIblMw?= =?utf-8?B?OTBwek1ZUmRtS3d5aVllTnkwandRdmpvYzFrSVZlWHNJTThsZWJIOVBLM0Uw?= =?utf-8?B?Vms0UUc1MEpnckdDUlBFU0wxaG1rTDBnRWF5czVRNzk3bjFiSktQZ2tjc1U5?= =?utf-8?B?Q2pISkRJZ09RN1BpU3RNOWFlTXkzM2dNQTZyZTQ0MDBiaHZsMy82YzNZbi80?= =?utf-8?B?c0VXZlp3NW1CVDY0WWNUTU5DdXhCblRwZXdkcmNyWnpPRklUR1MzaXNNbDJx?= =?utf-8?B?TTgyLyt1M3BYWnZDM2xLTnRvTGdpejZqamRtVkpvSGdRVVFYWTIySmw2dTRT?= =?utf-8?B?RmNnRVlkUVZua0RwWXBzZEl0aEJ3SEs5Y00wYlZidHhxczA1RTJNdTY5TEZs?= =?utf-8?Q?2kFFy7VW8YhJGuAe53RcWZZHAhZmJnC0uV/o7v0ApUtl?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2383e9d7-fbd8-41af-281e-08ddd34c70b9 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Aug 2025 11:45:42.1990 (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: dP5w3Ws8kwbsFN8tgBX/8k6bkmBvaD5QI2MHsSYi4/+LVdxedQAh4Gz8218edUbfbBJlqMd3QON0n0dlRNV8xw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB8841 Alignment operations are very common in the kernel. Since they are always performed using a power of two value, enforcing this invariant through a dedicated type leads to less bugs and can lead to improved generated code. Introduce the `Alignment` type, inspired by the nightly Rust feature of the same name. It provides the same interface as its upstream namesake, while extending it with `align_up` and `align_down` operations that are usable on any integer type. Signed-off-by: Alexandre Courbot --- rust/kernel/lib.rs | 1 + rust/kernel/ptr.rs | 213 +++++++++++++++++++++++++++++++++++++++++++++++++= ++++ 2 files changed, 214 insertions(+) diff --git a/rust/kernel/lib.rs b/rust/kernel/lib.rs index 2955f65da1278dd4cba1e4272ff178b8211a892c..0e66b55cde66ee1b274862cd78a= d465a572dc5d9 100644 --- a/rust/kernel/lib.rs +++ b/rust/kernel/lib.rs @@ -100,6 +100,7 @@ pub mod platform; pub mod prelude; pub mod print; +pub mod ptr; pub mod rbtree; pub mod revocable; pub mod security; diff --git a/rust/kernel/ptr.rs b/rust/kernel/ptr.rs new file mode 100644 index 0000000000000000000000000000000000000000..6d941db58944619ea5b05676af0= 6981a3ceaaca8 --- /dev/null +++ b/rust/kernel/ptr.rs @@ -0,0 +1,213 @@ +// SPDX-License-Identifier: GPL-2.0 + +//! Types and functions to work with pointers and addresses. + +use core::fmt::Debug; +use core::num::NonZero; +use core::ops::{BitAnd, Not}; + +use crate::build_assert; +use crate::num::CheckedAdd; + +/// Type representing an alignment, which is always a power of two. +/// +/// It be used to validate that a given value is a valid alignment, and to= perform masking and +/// align down/up operations. The alignment operations are done using the = [`align_up!`] and +/// [`align_down!`] macros. +/// +/// Heavily inspired by the [`Alignment`] nightly feature from the Rust st= andard library, and +/// hopefully to be eventually replaced by it. +/// +/// [`Alignment`]: https://github.com/rust-lang/rust/issues/102070 +/// +/// # Invariants +/// +/// An alignment is always a power of two. +#[repr(transparent)] +#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)] +pub struct Alignment(NonZero); + +impl Alignment { + /// Validates that `align` is a power of two at build-time, and return= s an [`Alignment`] of the + /// same value. + /// + /// A build error is triggered if `align` cannot be asserted to be a p= ower of two. + /// + /// # Examples + /// + /// ``` + /// use kernel::ptr::Alignment; + /// + /// let v =3D Alignment::new(16); + /// assert_eq!(v.as_usize(), 16); + /// ``` + #[inline(always)] + pub const fn new(align: usize) -> Self { + build_assert!(align.is_power_of_two()); + + // INVARIANT: `align` is a power of two. + // SAFETY: `align` is a power of two, and thus non-zero. + Self(unsafe { NonZero::new_unchecked(align) }) + } + + /// Validates that `align` is a power of two at runtime, and returns an + /// [`Alignment`] of the same value. + /// + /// [`None`] is returned if `align` was not a power of two. + /// + /// # Examples + /// + /// ``` + /// use kernel::ptr::Alignment; + /// + /// assert_eq!(Alignment::new_checked(16), Some(Alignment::new(16))); + /// assert_eq!(Alignment::new_checked(15), None); + /// assert_eq!(Alignment::new_checked(1), Some(Alignment::new(1))); + /// assert_eq!(Alignment::new_checked(0), None); + /// ``` + #[inline(always)] + pub const fn new_checked(align: usize) -> Option { + if align.is_power_of_two() { + // INVARIANT: `align` is a power of two. + // SAFETY: `align` is a power of two, and thus non-zero. + Some(Self(unsafe { NonZero::new_unchecked(align) })) + } else { + None + } + } + + /// Returns the alignment of `T`. + #[inline(always)] + pub const fn of() -> Self { + // INVARIANT: `align_of` always returns a power of 2. + Self(unsafe { NonZero::new_unchecked(align_of::()) }) + } + + /// Returns the base-2 logarithm of the alignment. + /// + /// # Examples + /// + /// ``` + /// use kernel::ptr::Alignment; + /// + /// assert_eq!(Alignment::of::().log2(), 0); + /// assert_eq!(Alignment::new(16).log2(), 4); + /// ``` + #[inline(always)] + pub const fn log2(self) -> u32 { + self.0.ilog2() + } + + /// Returns this alignment as a [`NonZero`]. + /// + /// It is guaranteed to be a power of two. + /// + /// # Examples + /// + /// ``` + /// use kernel::ptr::Alignment; + /// + /// assert_eq!(Alignment::new(16).as_nonzero().get(), 16); + /// ``` + #[inline(always)] + pub const fn as_nonzero(self) -> NonZero { + if !self.0.is_power_of_two() { + // SAFETY: per the invariants, `self.0` is always a power of t= wo so this block will + // never be reached. + unsafe { core::hint::unreachable_unchecked() } + } + self.0 + } + + /// Returns this alignment as a `usize`. + /// + /// It is guaranteed to be a power of two. + /// + /// # Examples + /// + /// ``` + /// use kernel::ptr::Alignment; + /// + /// assert_eq!(Alignment::new(16).as_usize(), 16); + /// ``` + #[inline(always)] + pub const fn as_usize(self) -> usize { + self.as_nonzero().get() + } + + /// Returns the mask corresponding to `self.as_usize() - 1`. + /// + /// # Examples + /// + /// ``` + /// use kernel::ptr::Alignment; + /// + /// assert_eq!(Alignment::new(0x10).mask(), 0xf); + /// ``` + #[inline(always)] + pub const fn mask(self) -> usize { + // INVARIANT: `self.as_usize()` is guaranteed to be a power of two= (i.e. non-zero), thus + // `1` can safely be substracted from it. + self.as_usize() - 1 + } + + /// Aligns `value` down to this alignment. + /// + /// If the alignment contained in `self` is too large for `T`, then `0= ` is returned, which + /// is correct as it is also the result that would have been returned = if it did. + /// + /// # Examples + /// + /// ``` + /// use kernel::ptr::Alignment; + /// + /// assert_eq!(Alignment::new(0x10).align_down(0x2f), 0x20); + /// assert_eq!(Alignment::new(0x10).align_down(0x30), 0x30); + /// assert_eq!(Alignment::new(0x1000).align_down(0xf0u8), 0x0); + /// ``` + #[inline(always)] + pub fn align_down(self, value: T) -> T + where + T: TryFrom + BitAnd + Not + Def= ault, + { + T::try_from(self.mask()) + .map(|mask| value & !mask) + .unwrap_or(T::default()) + } + + /// Aligns `value` up to this alignment, returning `None` if aligning = pushes the result above + /// the limits of `value`'s type. + /// + /// # Examples + /// + /// ``` + /// use kernel::ptr::Alignment; + /// + /// assert_eq!(Alignment::new(0x10).align_up(0x4f), Some(0x50)); + /// assert_eq!(Alignment::new(0x10).align_up(0x40), Some(0x40)); + /// assert_eq!(Alignment::new(0x10).align_up(0x0), Some(0x0)); + /// assert_eq!(Alignment::new(0x10).align_up(u8::MAX), None); + /// assert_eq!(Alignment::new(0x100).align_up(0x10u8), None); + /// assert_eq!(Alignment::new(0x100).align_up(0x0u8), Some(0x0)); + /// ``` + #[inline(always)] + pub fn align_up(self, value: T) -> Option + where + T: TryFrom + + BitAnd + + Not + + Default + + PartialEq + + Copy + + CheckedAdd, + { + let aligned_down =3D self.align_down(value); + if value =3D=3D aligned_down { + Some(aligned_down) + } else { + T::try_from(self.as_usize()) + .ok() + .and_then(|align| aligned_down.checked_add(align)) + } + } +} --=20 2.50.1 From nobody Sun Oct 5 12:46:13 2025 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2088.outbound.protection.outlook.com [40.107.220.88]) (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 89EA821A440; Mon, 4 Aug 2025 11:45:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.220.88 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754307950; cv=fail; b=M3c33fmQalrx6/NMwT0W+mvLiTxbS34pylGEA6OJWamLnN4hypjnDsRbGKVflZMXVl5zn3zFaw6zrNtWn6CSW4U3hnh8VwlmyXcF16o25RqkiBboDCJgYhRDoD9Hd0DFoCmuCgxevFwE8bgBhiUA5mBTzD5k4BL7GV+9AArSqUg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754307950; c=relaxed/simple; bh=8B3YoMWyjeQEnDGwkFZnra06rNVqZHM+yRdYAZOKd5M=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=nF0iB9KSXqBf5pwWEHJK/HxtcPkh0xz/8bNVRq4hIZdqzOyAoAu+PJ+l57K2S6mjB/3Ku7jV4SjZKaL9zZeVpm7cbH3UtNDWHJhl5GQyY8D9F20PuC8oeT2nbhMmebKoTWOGxhPFWmGgucYKhd3dIa7dMizIub2MigO9luF3fhQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=d/stanKU; arc=fail smtp.client-ip=40.107.220.88 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="d/stanKU" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=NTFd8y2C1BdB5X2wuMxiyx6jo66TtPdbt3/74Q+rQO0+Fv6Dnmg899s4PmMxJee2rwmaSUDrIanODsBpYJ5jwxcJys/KGB8kMgvHBoglVCtuM7yx9G7juiKbP0pP1VHh/CHXiVtBJ3YA8Uw/2bx3qjO7hE8eb2cvCeY+b4UVPh5axhTfN52cmLihlLSNeXpNcx61c0rPaJ8bou164TBgzUoxbRetJrzMO5CYaWwmQHaQObDWedFhoVp5tDSSiuSoSJ64KBWlHA2snwIpSsYaqhNct8vTAkmPsZmxVUnTj523EoW73pm3eVv/xDwqRO4/K48yvNGOgEDfWc8OtjjEig== 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=ofpTSDTmzXLy4fMqbrfLAcK8OpuhRsePX/aKvYRz+V0=; b=oPArHlV78HU+p+0mpO5wB1BtSu5zpiNZhToTxx4CpUFLvM2nMJKDKMGeT+TFmlxbpmY6rT/i/2wjFluaWLvQ+FUVNGa3I7X1+jHaOAZqb9qAKydMttKxeMKtmCF1EqTnk/j8iX161frtxoVUmIqSXHv39QzIZexDWpgEHG/E0Xyvvr6ZJ21BqzQ6bMznissEoOoEzRKIEdVqJftvEtZWQnBAvH2QHZhAyXJqim/vXqbOR+6sKjWRrL9OSpfrbzGYvxXtQVfcXWIfFBdP+IUm0rsoEDrpZ5+fpvwkDRCWsxVFe80fZTeiaItMFwN+ztGfnXWmcq8OzJDpPZt0A8dufg== 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=ofpTSDTmzXLy4fMqbrfLAcK8OpuhRsePX/aKvYRz+V0=; b=d/stanKU2TdRGggv6bx4ouq+uz3RBPXPeJEGclTclKkbLYaeWvTfyGL5ueIAHx6YugZ5So8aqB6i6+PdTctMIjL1MzHBBn46PoxFsBpShdCWrd9iDLfAd1J9MasRjCcuaS3tmXu6GO4wjYJcWMUjfZ2RfNU0bvRW4tKZr3hFhx9Y8r+/aMbfH6tc9Sl+rWYszY0FwEsLQceWL+vaWOC1j7cBKd5nBL40cO8ZBoFJ4B2pt9A5HeVK3l79YyJNpOiBz4qfoE0hzpym0OFl+G4VN+5YF5emnVUDeaD8C/jTTK9X28KxQ5pekQl/4mI+NoqrKlmNeqFDfq+U9vTA1WNTIw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by SA1PR12MB8841.namprd12.prod.outlook.com (2603:10b6:806:376::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.21; Mon, 4 Aug 2025 11:45:45 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99%3]) with mapi id 15.20.8989.018; Mon, 4 Aug 2025 11:45:45 +0000 From: Alexandre Courbot Date: Mon, 04 Aug 2025 20:45:26 +0900 Subject: [PATCH v2 3/4] gpu: nova-core: use Alignment for alignment-related operations Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250804-num-v2-3-a96b9ca6eb02@nvidia.com> References: <20250804-num-v2-0-a96b9ca6eb02@nvidia.com> In-Reply-To: <20250804-num-v2-0-a96b9ca6eb02@nvidia.com> To: Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich Cc: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, nouveau@lists.freedesktop.org, Alexandre Courbot X-Mailer: b4 0.14.2 X-ClientProxiedBy: TYCP286CA0107.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:29c::9) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|SA1PR12MB8841:EE_ X-MS-Office365-Filtering-Correlation-Id: 964aeb4f-3159-48b9-c8c3-08ddd34c72e3 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|366016|1800799024|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?RVdOK3A3dURTVjFzVG9QYjhUTmVDQ2pRMEJrMXZMamwrVW5KSEFxMGNaT1Bx?= =?utf-8?B?bUtIUFdaY2FBOTFVOGR6UE1aaGw3S2NRWmtYT1RKTTFIdFhrd2hWd0Z3UWU4?= =?utf-8?B?c1Y3dEozUkgxTUZaTHpUWnZ3TFYxTWJzQlppMm1qeC9mYnBIL3JpalovL2Jq?= =?utf-8?B?ZHdEcjkxZDF5cFl1bHpNUlVzNUVHaWFXdHBka01EV2pOaXZhTWNjSnZST0Yr?= =?utf-8?B?NlZWU0hJRmpKdDgyN1ZOeEZYYk5xWDQ1S25VRFNwSG9lVm9XaU8yNDh2UTU0?= =?utf-8?B?bE1pMWV4cmJGR284MEFkNnpOYjl4K3JpL3JjU0hreVVLYUoxYzQ2Y0xucGk3?= =?utf-8?B?V3JGckRZaUEwMzlwUFZWQ0dXMnh4R3hqendKWU5TSllLTjNMOVRpUzVIS2R0?= =?utf-8?B?MWk5SS90Z2lXU2h5c201SGpZbFpKQzRvQUNoRzliZlA4OEVFY281T3lJNWlp?= =?utf-8?B?UkJuN1hDazd4K1l3RXJmUGhrTkpLWUNkSzdJaHhGMnFqMHlOdXV4RHpqU1NV?= =?utf-8?B?dERWY3FnL0c2WG1tR3pxaGtvWDgyOUlnRmczVm40Tk5VSlRhZkpzaVJGbHZW?= =?utf-8?B?THkyTzcxMGxqUXc3M01qYmpFcWVRempZamVVcjYwb3VLeHpkbGxKVHNaYkFk?= =?utf-8?B?VEU5MTRMVmxITlhqVFJQeEZEVTg0UTZ4TytlZGsyKzdSNkFzNmorQnE0N2w2?= =?utf-8?B?WlZpWnp6RXdlQTVSa1M1Yjl2SkZUVjZZZ2FnQ2tLcDFUMzBiMUw3S2lHK1E0?= =?utf-8?B?ZWRBNmVqVlYzWDFGYm9zQXNKdW56akhUREVQajYrUWo0UiszUHFYcFVUaXdW?= =?utf-8?B?Ukp0aWhjblRETjU1YUFNS0lMbUpTMVBKa3cvR2VWMHYyZXpvc0c2ODVZdC9D?= =?utf-8?B?YU80b2pta3BkQkdFaUc3ZTZjeGZlZzNvQnRWT2ZjaGhlME5YS2QwcnIyZFRo?= =?utf-8?B?eFlZK3lHVjJpSGxBSXZEWHpPQldaV0xZY01FQzJ3L0U3U3dLbktmaE9yMElH?= =?utf-8?B?VG1rTGZnZmZkbWI0cm5UNUl1S3FuZVQyWU5ZYjNqZ2xlU1B3bTI3ZXZLMlBi?= =?utf-8?B?NTVkRFVVdW1zZHhSWWJwN21rMGV3Tys2MlBmbnRkZzQ2OUVUNWR5dXVmUVpN?= =?utf-8?B?TEV1VDA2YjBjVTdKdGllMHpTTWpYdUxjWXZTTWlqWmxoU1JlRFE5SW45dWhl?= =?utf-8?B?Q0dEY2VJK2labmtYVCtUanJ6b0U4ZzdMU21BbzhhTlVsaHZxSXM3OVZzT3Bz?= =?utf-8?B?ME5uWGJDVXZWMHBNTnVIWDgwMm1wMi9HWkROcUNQVm5oZTdrcnJVZEFiRzd5?= =?utf-8?B?VmZTV3REOVU4bkdRMFBEKzQzZFJNUVcrVkRXRnVrV1hoTVhXVlNHb2J1Qll1?= =?utf-8?B?Z0NqMDBYNDgrM0NTdGJFNG5HTCtYVEZnbjhUMVV4TmFsbndkY0JYVzlnUWQ2?= =?utf-8?B?Z0ZBalJYRVF0RXJFdFZjRk9HQ29nODBoRHVBb2oyaXprZ1IyMWRqMDRwMjUr?= =?utf-8?B?RjJjWTJWVysydUpmOGRWaHFoWEdaeENIUGROd1ZScWtMSEV3RS9hbS9mUjhX?= =?utf-8?B?TFFyNThROXUzWStOYnhjKzFURjhQSmJ6ZUYzTHQ2a093UmN2eFlmVmROaXNn?= =?utf-8?B?TmpGbi9DREg2eUlCanFheGFQbkd0VFJQUlRGdy9CKzJSRXJzeGNjV2pWVTdJ?= =?utf-8?B?YXN2bTlIbTNKazlFZ2gyNkpDNUovYWtnVGhhS2NKaUFjUUlNaU5CbENZOE8r?= =?utf-8?B?WTI4RWFNZGFiZDJ0aStDTDd6cHpkcEpBbDR2V3QxOTExazFFdzA0N294cmFu?= =?utf-8?B?TmFBa0Nxb2RXbyttMkhtKzYvcDM1WDJKdmNmOHIybklFS25TSUptV1c0bEM3?= =?utf-8?B?Ui8wS0p3TTU0ZmtxM20wTHl3ZHhNZWVVVU9vZG5QMnBSb0NLTzlnM1h3aDh5?= =?utf-8?B?M1lSeDltVnJHUDJxTnlMWGZzT2tmR1pvWWNBUUFYK3JveGJZbytzRUxORURu?= =?utf-8?B?ZnM4Z2pxQWdBPT0=?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(366016)(1800799024)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?djVnRWoxNzRvQ1BkajhCNHR2MjFrNHZFYVBhVzhnY2xXcDB5SllhYkx3ZUNL?= =?utf-8?B?WFF1TWFOU2pjZ2dnS2JLRFdBKzR4b05BeGhqTStaTy9QNHQ0Z3NibDQ2WkpM?= =?utf-8?B?M21mOVloTWMyOEtCd3QxRkkvSzRsbTNvdzBURzhqbzZ0RCtmWm8ydGZ2bjZG?= =?utf-8?B?Wk4rQjdxRUF0RE9na0xzWWRhTWpFbE92NlNEL08vV3NkbU56NUROZCtKaTNP?= =?utf-8?B?REJteW1CendLVGphZnpUSzM1Y3JtcWgwdEs4SUV2QjBjSWd6dkswa09jWWVu?= =?utf-8?B?VXhteFN3OGZCVy9yWUZ5b1hZbG5GUkdMQ0o1SDhWRnFLMHl5aXczR3lXY2VO?= =?utf-8?B?NldvaXVBeDVJemlRRTJlYWx2ZlJxcEpOc2V3QjFuTnd2OXBQVnNHdG9ha05o?= =?utf-8?B?bk9SMW5STmFFWThqNnFObVp6S2hUUFdUMExXb3NhTHZ4ZHJJdjhlQVZDNUFr?= =?utf-8?B?WGRPTnRoN0FSTkV0bWxudmN2azdLemMvZE5BazAyM1ZuRXlqYWM4bllXWmxC?= =?utf-8?B?bDd6dk9CdEFQZkYvQi9ZL01naTRrZkgzZlNoSkx1bzVFa0drMW1uODdsNXNn?= =?utf-8?B?OTJUa3YwNk9idkkrYTZhcS9RZm5yK3ZCQ0FZUGFCcWJEbCt4dWFjVE1TNU9v?= =?utf-8?B?SWt2ZytxKy92Tm1BMExERHJzRDMwejZmVFdLMW9hdnk0VWJ1M2ptelU1ZkdM?= =?utf-8?B?OFV6ckZVRHNNcDk5QUNEamVBdGh0TnpKYkFTWG00cGJmZFMrU1h1Q0FJOFRr?= =?utf-8?B?Ly8rNVN0M3JiVFR2czVsOEVPSWJiV3Y0Ni9WQUpXcGJVK2dEQmlvRVFzY21X?= =?utf-8?B?OFFmbUFKU1NKdmJ1UzE5d0svQk9EemNKa2UzMjhxbnZ1dDNNTjhYV3gySmhL?= =?utf-8?B?bTJrNjd1TXQzNUY4L1VwNEo3OVp2UVBHWEw3R0Z4Y2xyTzNoTFBsZ01GMWU1?= =?utf-8?B?bWhZTEk3TGR5TVFUWFpFcUYwMGFvajZBYmdrZFhMdEdHNEp2UmtxZEFzOXRM?= =?utf-8?B?d0grdnJVZ2hyaldTKzJKZXZqMk5xcjZkQW9RNWVuWlBjNG5LT25hdXZZeS9l?= =?utf-8?B?ZDdvZ3YyaXRDM2pma28vbTdPU0ptN0pIaGcyQnhuaWd5c3V3YkhSdExRZXBL?= =?utf-8?B?dUtteUJjSk1COXFRaFlrNkZQeCt0Y3JZQURYNlUyOGZwdytqWlJjUnk5SDRZ?= =?utf-8?B?TTdRZW15RGhUbkJKcmNXNHc5cExOR0M4NjMyVGdpUjAvcmZZZlk4bWIxMjdh?= =?utf-8?B?SnhxbEhIcFVLRE9nK200M2tLRVFscEszQjhQeVhFTmkvNWZEbFhXREVDd0cz?= =?utf-8?B?M2hBTkZNUWFkd0tzWVFIdXJHYzNmQUMzRGx3SWZJOGdkM2dhNU5OOS9LVU4x?= =?utf-8?B?NkRWdW9LdjhPYnJKRFBMZ3lHdVVZd25pdytyYVFHWWNDcW9rZHpPRDY0b2lz?= =?utf-8?B?QTdHVGhSZW44aDRkU0l5YW1tdXc3K3JtL2FSb0tDQzZwRnBPM2hNWjNVWk5W?= =?utf-8?B?ODZwYnhRQ0tjQjBQZ3JuTEtpUlZBSWg0N1J5S0pEdFNsR2VLUHRYdXZDOGpX?= =?utf-8?B?M0tUZzZzL20zYUpOQ1AzcUhMQUszdnBlRDNDc0diV1ZhL2hYMC9OcGRaSG5I?= =?utf-8?B?L3EyQzVrRFBOSVQ2TndVMnZxU0VlM21ydjZHMmVWUzBGZHllckNQSzJuN1V2?= =?utf-8?B?VGtaYXA2RE1VM3FxNGpEMEI0OEVYSmErY3lFVCtBU0xMZFA0V1VoY2trVUMy?= =?utf-8?B?K2xJRWpCUitOVUpHSkNBcHBnNXNUeGRlSkp6MGYvZC9HZzBNWnhZQ2x6V3hI?= =?utf-8?B?aDRKT1pGRDdmWnh1WVJxT0w5cWNHYVU1cmJhSXg0dEQ1L3BQb2xWekRFNkdS?= =?utf-8?B?dTZ6dFNqdjdHcU9HOHdCbTFPQ1dmZDZZMDh1UnRPNmc2dmNFQThrUVFQbkZJ?= =?utf-8?B?YmFVQm5ybXIrdW5hRGN4R2dDdGhBT0tnZi90N214VFJsRmUyVVgwak9iT2hH?= =?utf-8?B?R0loZTErS2g1NkFSMEZhTUJhZWY5L1k4aTAwMlZrL2RmK3pHVHVRVmE1V1Z4?= =?utf-8?B?Nkl6SC9KUFlkcXJMWG9oaGJ5QWY0QUd5TkUzR3lxaElJRUtFdXlVUzNPQVJF?= =?utf-8?B?a24vUGkzUUVhd21MYmlWVSttMmZIWlJJb011dlhycFBWWlF4c0d1V0h1ZXM0?= =?utf-8?Q?3FXrNDyBaDBtdjpdx0SUqSpssqYVguQYcj1Xeth8SoqO?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 964aeb4f-3159-48b9-c8c3-08ddd34c72e3 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Aug 2025 11:45:45.6005 (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: GKMF5qbtVrl2SogvejMEyy0jBmkMouYEzcKN8WjVT9QAcFqH+1XBsuHVhSwrOOxm78j3x5m5E+EpXuYJh7qItg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA1PR12MB8841 Make use of the newly-available `Alignment` type and remove the corresponding TODO item. Signed-off-by: Alexandre Courbot --- Documentation/gpu/nova/core/todo.rst | 1 - drivers/gpu/nova-core/fb.rs | 6 +++--- drivers/gpu/nova-core/firmware/fwsec.rs | 11 +++++------ drivers/gpu/nova-core/vbios.rs | 4 ++-- 4 files changed, 10 insertions(+), 12 deletions(-) diff --git a/Documentation/gpu/nova/core/todo.rst b/Documentation/gpu/nova/= core/todo.rst index 894a1e9c3741a43ad4eb76d24a9486862999874e..8fdb5bced3460a3971699df79ff= a2c69f84b2735 100644 --- a/Documentation/gpu/nova/core/todo.rst +++ b/Documentation/gpu/nova/core/todo.rst @@ -147,7 +147,6 @@ Numerical operations [NUMM] Nova uses integer operations that are not part of the standard library (or= not implemented in an optimized way for the kernel). These include: =20 -- Aligning up and down to a power of two, - The "Find Last Set Bit" (`fls` function of the C part of the kernel) operation. =20 diff --git a/drivers/gpu/nova-core/fb.rs b/drivers/gpu/nova-core/fb.rs index 4a702525fff4f394b75fcf54145ba78e34a1a539..ebeffc1b1feccc5c4dc08135d84= 47ec185a3068a 100644 --- a/drivers/gpu/nova-core/fb.rs +++ b/drivers/gpu/nova-core/fb.rs @@ -3,6 +3,7 @@ use core::ops::Range; =20 use kernel::prelude::*; +use kernel::ptr::Alignment; use kernel::sizes::*; use kernel::types::ARef; use kernel::{dev_warn, device}; @@ -130,10 +131,9 @@ pub(crate) fn new(chipset: Chipset, bar: &Bar0) -> Res= ult { }; =20 let frts =3D { - const FRTS_DOWN_ALIGN: u64 =3D SZ_128K as u64; + const FRTS_DOWN_ALIGN: Alignment =3D Alignment::new(SZ_128K); const FRTS_SIZE: u64 =3D SZ_1M as u64; - // TODO[NUMM]: replace with `align_down` once it lands. - let frts_base =3D (vga_workspace.start & !(FRTS_DOWN_ALIGN - 1= )) - FRTS_SIZE; + let frts_base =3D FRTS_DOWN_ALIGN.align_down(vga_workspace.sta= rt) - FRTS_SIZE; =20 frts_base..frts_base + FRTS_SIZE }; diff --git a/drivers/gpu/nova-core/firmware/fwsec.rs b/drivers/gpu/nova-cor= e/firmware/fwsec.rs index 0dff3cfa90afee0cd4c3348023c8bfd7edccdb29..add8cea7bbecc98238d418d0fe6= f235c6b850d58 100644 --- a/drivers/gpu/nova-core/firmware/fwsec.rs +++ b/drivers/gpu/nova-core/firmware/fwsec.rs @@ -16,6 +16,7 @@ =20 use kernel::device::{self, Device}; use kernel::prelude::*; +use kernel::ptr::Alignment; use kernel::transmute::FromBytes; =20 use crate::dma::DmaObject; @@ -203,7 +204,7 @@ pub(crate) struct FwsecFirmware { } =20 // We need to load full DMEM pages. -const DMEM_LOAD_SIZE_ALIGN: u32 =3D 256; +const DMEM_LOAD_SIZE_ALIGN: usize =3D 256; =20 impl FalconLoadParams for FwsecFirmware { fn imem_load_params(&self) -> FalconLoadTarget { @@ -218,11 +219,9 @@ fn dmem_load_params(&self) -> FalconLoadTarget { FalconLoadTarget { src_start: self.desc.imem_load_size, dst_start: self.desc.dmem_phys_base, - // TODO[NUMM]: replace with `align_up` once it lands. - len: self - .desc - .dmem_load_size - .next_multiple_of(DMEM_LOAD_SIZE_ALIGN), + len: Alignment::new(DMEM_LOAD_SIZE_ALIGN) + .align_up(self.desc.dmem_load_size) + .unwrap_or(u32::MAX), } } =20 diff --git a/drivers/gpu/nova-core/vbios.rs b/drivers/gpu/nova-core/vbios.rs index 5b5d9f38cbb3a6b1c374c1e0eee2509eb8d5660c..3bc24ce26b9d4d1948313f80898= 6211facb0e8d0 100644 --- a/drivers/gpu/nova-core/vbios.rs +++ b/drivers/gpu/nova-core/vbios.rs @@ -10,6 +10,7 @@ use kernel::error::Result; use kernel::pci; use kernel::prelude::*; +use kernel::ptr::Alignment; =20 /// The offset of the VBIOS ROM in the BAR0 space. const ROM_OFFSET: usize =3D 0x300000; @@ -177,8 +178,7 @@ fn next(&mut self) -> Option { =20 // Advance to next image (aligned to 512 bytes). self.current_offset +=3D image_size; - // TODO[NUMM]: replace with `align_up` once it lands. - self.current_offset =3D self.current_offset.next_multiple_of(512); + self.current_offset =3D Alignment::new(512).align_up(self.current_= offset)?; =20 Some(Ok(full_image)) } --=20 2.50.1 From nobody Sun Oct 5 12:46:13 2025 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (mail-bn8nam11on2048.outbound.protection.outlook.com [40.107.236.48]) (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 0AEF521A440; Mon, 4 Aug 2025 11:45:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.107.236.48 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754307957; cv=fail; b=pMwacWnaV7QufeDEMDkImba+RhVU/zRpRDEblHtwCeUQkdaILcVAqLoBEDJcePbVPn0oBUcQ6nmjY38ZATfQdq3BgA76n08NTD+3pQwdVCk6IC5IzynkWr5iUhr0gtemLp52cXP60FrAgCRwHbytdQSjuu0bkoaDSS2RtcChCCk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1754307957; c=relaxed/simple; bh=P1OzVG2s4NHnONe7RF4DH67QiF/I68lGTFzh/FfwfHc=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=XkgGqlWsBxZLEAS/bkLMKve7/39HWS+00igxMVnzvY1VFk7jLAO2BUsqpVPcSXUEL8uHGkRE2qFBHzMUfvHi5wzzlNnadQPmEOcfShbWn3ApuOsMf+zZF8YGg6WjdUyWegPM24Q6WuWFb8iyQTLCVUbcxwF4S4UmHmfhpNln53s= 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=LBoYM7fY; arc=fail smtp.client-ip=40.107.236.48 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="LBoYM7fY" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JvjdznJP1AeOTuHr77boXq5h+ASaacQVRNsa0e/VyFeQGZmw3sMzFAjv/igjr4HXCf1GIf5nzo8i9hew+6X9N/ylpI3YK4w7kEWPMxEeoCVpFEa7jH6iXqUOlSwrT2PDrWOIZb0NJ5H6ATiSCAVNuwYliox5AD0p/tKWKdzDaxPSB0OQZGjGMqS7aAov0Nu0xB5GUZo8tUXSngRZPTZa/M36gF5IxYFQbkYnMG8fp/+bsKsMgNbyPuF8+j2mVSXd9KRpwsq67ihIUUui6egv3rst8Wk4UnVS34qq4oi8sJOLwqjns0xkm8G1uNlcOBhGDEiLi1CWxPFUE8H1V/0uuQ== 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=LPTlKqmV+UVsokxjqq24pZ6GJPvL5+3DZm+g0DOE1iw=; b=p3HGwZEDywvcLOhpccYOe7iyOlS+Vj+5kFvqf/mT52KHjpQs6ediS4C141ga/ePclNRKe8gjlbmzE05U58H/Q4oZ6bxahSOG1kpeg++QWfTXIpdBJyBPY8v6VT6sVXR9dNQ3cCnGY6Lp1r8BVqPmbLldoRq8zLOmmT4LPyNqP0Vsu9ZXLURcVfekKkTmCcYR5Iw83BiUBFV1wmpzEAm2k635iafbSHbpOHnZoURWNvk3dN2grWEXNCp3TcCdlLKgVsTuwVdFa00dYjK9XDcNoEb21Oinl6URQGUMDl1B1RPXoWrMPK1uPpPvkvC/XhrhCHJxo0MVR8aAs7FWR3M8zg== 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=LPTlKqmV+UVsokxjqq24pZ6GJPvL5+3DZm+g0DOE1iw=; b=LBoYM7fYVo67TiGzWVopPQYoLe0kFQWEGnlZjJ8bu+NU8J3+94f1jCVLmQajIhhffWrJ7UjbBmiEfxnGYybvoGCbIBbnkgNfsP30i/gdg/17smR6DgIbQhGtaLqxDNlcbp0av+cwTUQsc5OKp9zbi//ZZg/uHZQsmXDvGff0RNShcCy1BGEw9O+T5h9G6qYV69eZgol+QhkGMunT5dOyw3MJzAnnOFNXgt81JKm9bQhHAKuKGn2jxFR5KERxS7NhSfWH4gtP2MTiKGTcc+fKglU9z5u36gmZESCnE1rFGRszHfeX1HNfHnC2J6cLiwdapDzuKY9rDkGr6035pKkKzg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by IA1PR12MB6020.namprd12.prod.outlook.com (2603:10b6:208:3d4::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8989.20; Mon, 4 Aug 2025 11:45:50 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::6e37:569f:82ee:3f99%3]) with mapi id 15.20.8989.018; Mon, 4 Aug 2025 11:45:49 +0000 From: Alexandre Courbot Date: Mon, 04 Aug 2025 20:45:27 +0900 Subject: [PATCH v2 4/4] gpu: nova-core: use `checked_ilog2` to emulate `fls` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250804-num-v2-4-a96b9ca6eb02@nvidia.com> References: <20250804-num-v2-0-a96b9ca6eb02@nvidia.com> In-Reply-To: <20250804-num-v2-0-a96b9ca6eb02@nvidia.com> To: Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich Cc: linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, nouveau@lists.freedesktop.org, Alexandre Courbot X-Mailer: b4 0.14.2 X-ClientProxiedBy: TY2PR0101CA0006.apcprd01.prod.exchangelabs.com (2603:1096:404:92::18) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|IA1PR12MB6020:EE_ X-MS-Office365-Filtering-Correlation-Id: edc1b474-dcd9-4f20-811b-08ddd34c7567 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|366016|376014|7416014|10070799003|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Ym01aS9vWXpoWFY5VWpvZm1yc205N1FYcWlRV3pVZG5hNW16UG54UXZPNTM1?= =?utf-8?B?RzlObUpveGZYUkhaanpPdHhEdll1clJsSVdZZlMzZ0FpeEF6RzBiWE1BNUZS?= =?utf-8?B?SlJMQ0UvN0k0L2ZlTUhsUW9RdFBNN3lPTU02K2ZsRjh3SHVNdHFhL2ZUSEoz?= =?utf-8?B?T3ZXN0lKY09ZZ2NsamdKVW1jMzJBUUtmVUNXTERpOU55c3ROa0NMajNKNng5?= =?utf-8?B?eEM2NFhRUW9PZkZRMktLVno5d2c0NjdtNEFCZjVvd3pLeGR2RzJubEJZKzho?= =?utf-8?B?T0NXb2w3ZFFFbVhSY0crZzFIOGZPVDBwTnRVMUtlM2hab3V2bnZMWDJYQ1Vl?= =?utf-8?B?OUp1aFlaeitvS0xqcGRxaUlXbkpyREtxV1dtT25CRlVvNGNoVjJ4aG1UU2Qr?= =?utf-8?B?MjRpL01VQ1pHaFkrTVkybGl3eHE3TUJLWnhLWnRSYTE4Y2R1cGJOSVNSV3Ew?= =?utf-8?B?ZTlIam80YzFNVXFHNkVBbUpISjFkWWpDMTVNYUV5c1VqREZtNmp1ZnQ3cE9a?= =?utf-8?B?azhDb2h5TitjZzlrUHR2RTZtT1pTYmhFRExnekpDQkI3VVorY2dqeVR0c1RD?= =?utf-8?B?VjZ5WXRCRkJqM25XbVM1S3RkMFNBODZUTnlqOGdSSXhFcDN0Nlp1dVRMUWx2?= =?utf-8?B?MXFZOUdVeERHMTc3aXEyb05rSWpzaS9OUjJYb1h1T2xLVUU3cTJJc1dCWUxK?= =?utf-8?B?MysxSFpHNVJ6VG9nY3cvMjJaR21HTzBwWEo3b1JOYUIyamdWd0ZpVlNKMWtj?= =?utf-8?B?TzU2ZFBDaWFVT3RvNnFrRmFpSkE1cDVzbWR3bzcrRFZNSjQwK29LNkRuOWp3?= =?utf-8?B?T2xldUZXclNEL1RHL0dHN2NiK0xsMjBvRUU3Zld4T09IclU5YmQ3RzBxNSsv?= =?utf-8?B?MmpEbS9YL3dPUzcycGZremEwckg0cWJYZUlqTGlHUG1jWmw0WDF2UVNHeEpm?= =?utf-8?B?K2RKMW1iYVE2b2syd3paOXdBa0JDZ2lXbExRM0lZYm9nY2ttV2RjaFFVdURx?= =?utf-8?B?TjhtdnhxdU4reDBveG13VlZnd25xejR5QWlEQVRJVTAwbmN4cmpwekdvSFk2?= =?utf-8?B?LzNiaWRJclZLQzZRNENTbWhuVnRhQy9zV1B3VVBPWHpXaHZUR2hYVFRIUnNu?= =?utf-8?B?cU5kZFM5NHNoTkZIellCTGpyMTNMb25USFZwVGI1OEJOaWVBUVpMdHN1bUNH?= =?utf-8?B?TWhMZHpSN3JlOFFaWVRaQ3AzenArYXBjRXVRRnU0TU1uSytUMGdPeUdZS0JG?= =?utf-8?B?RmRHWDMzZldLU0JqRTd2VGYxL1JYN1hMSlpTRWNUQ1d1b09VNEx4TmVLWmYr?= =?utf-8?B?cUN4eGhwK1Y1QW5BbnVKRGFlVGZjYldLN0FpSWVBbVRGNHBTR1lSMXo4Qnlu?= =?utf-8?B?Nm1XdzJlWFlhTzB1UldDYnJFTGh6V3NFS3hoNkNRQURINS9xblF0OGZ3RDdF?= =?utf-8?B?ZWdYSWlUNTk2TTk1bzZCbHczR2laTkI5SEpvTnhpaDZlY21nKzROcERLL2o3?= =?utf-8?B?ZktZVitCSWVuNm5PZ1ZRUmVKMUFscE0vb0NHNkRkVUlId2k2MkxzaW5RN2dM?= =?utf-8?B?dS8ydlUzUHRON1AvZnNkYkVYOUdBOFBHdHVENnQ2YWhiWEd1WlV0bktEdFQv?= =?utf-8?B?Z0VGS25selcweFpqUDJ3dDF4bEV2cmxGcjRuSmdSTndYTWdPOVNwWllTSUhl?= =?utf-8?B?YzUvTVpKWXk0MzVOU3ROVmExQllkT3ZaTXNENUtac0lrM0hLZHIzT1poRVZW?= =?utf-8?B?akJwamllYWxZVGpTNTRqN3JNT2tORE1QNXRla25lbEEvRThZeS9PL2lGLzJE?= =?utf-8?B?RG8wZThLWGV0azhnTWYwZ3hXZklRTk5nWFlkeEJzUlZMNlAxRm5nWWlTWjhq?= =?utf-8?B?d3ZzSUlYZ3VvdndNdXpUTVBhSnBWL05zWUFzN2pOdjczaUFhYWNoamFDSzJt?= =?utf-8?B?cGh5ZmV5L3FTUTZKcnpyQVJxZFg3TXVaUEFxOFN3MGZ1MWVzK1JNSzBIUXR1?= =?utf-8?B?RTEwcy9BYmh3PT0=?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(366016)(376014)(7416014)(10070799003)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?NE82ZnBPUXI0OTNKd0hTeDkxVEZoQ2lpcEVadWxmcEx3dzJsdUxibEdBVGZD?= =?utf-8?B?TDBWTlJtVUNaNmp3d1ZyaGs1d3lDWUZYRVB4RGdQZGVoQ2NsZUFwK0JndVB6?= =?utf-8?B?eEF0a21YT3hoVkI0YmZ0ejBOa1UxTmV6WERGN0ZkbzVmSklYUjAySmhSalpY?= =?utf-8?B?aDVpY29wdVArRzE1R1M1N2kvejRrZ0E1NVI4by9qcGRtVTJrV3g4Vk9ZaExF?= =?utf-8?B?REZFSURabHpvaDU2NFZWZUNDLzZFRDFoNDVPalRXb3RvaFNLdlBud3J2Yy9S?= =?utf-8?B?SGp6ZUZ1Tk9lU09RRnZQQjI4dDBKVERQL2tndlEzZTdoVnF4eDFxR3Q0M2x1?= =?utf-8?B?eXI1S1Q2R3lMdS94dkFxbVF1TmE3WHhvY0RUdVZNVlJmci9pY3Vva25pL0s2?= =?utf-8?B?VWU4V1FYZy9JaUVYcFV6SXQvM3BsRlorNVE3NnlQazNQVi9wOUNBY2dySFR1?= =?utf-8?B?Q1NsYi9sS3BLQUhFcVlNLzVVblQwMlh0SHUyZWtCMmFJOG9JRkNlai9JMWtq?= =?utf-8?B?Rm1wZXh4QkNKNkh2Y3JWbHk3U1RpVDVJTGZDSll5TENmK0RmSlFGbzFpcjZY?= =?utf-8?B?SlBUYnZpWmFycGNQcFVTbGp5bUZ3ZWpaNVdOSGJ6ZzJtNTIyZkx0TWRGYUVn?= =?utf-8?B?a0xLR1hVclFOZWNlYmRZbE8yV3RjeEhGbks4THl2TzFhRnB0Vi9mdW1FbW1y?= =?utf-8?B?Q2xpS1VUazIxRGRVajZHZEZvb1VpbzJSeWJud0xNR1djR1drdlp2U0gyZFRF?= =?utf-8?B?blQ0VWFqQ0JHclYvajhaTUVGNHczVWN3MGRJS21aK1cxdm0rcS9RZ0lFVG5Y?= =?utf-8?B?bk1xcTFEQUM5djhicVA5QXdjRXNURk4rWEZZOFBycXhVYlhOeWlBcDRlaGtq?= =?utf-8?B?MDZqeG5wdnA2V1RNV3pYS3ZaSEdkU2hIL3BkZVlDa3JVSmUydUhpZ2RpME9l?= =?utf-8?B?WFk1R0dSeW1TcWxGeU1XUmsxaHRROGZySHFYRllodnduYTd1S3JFaXJ3MW94?= =?utf-8?B?bll4WEVvSm9aZkxqNEl0VCt1cFZHdWM3WGRGdmd5eVdMME5mVjlZTXUzMER4?= =?utf-8?B?OEYvRHBRMkdWTTBUM0EyQ0cwcnBiU3hEaDBnQTZsR0M1bmd6WW5vdWM1SktK?= =?utf-8?B?c3ZzNFlIVkpOa3ozS2FwVUY5U045dkFiMEVrV2k0WnROc3VJZ3JxcENzNS90?= =?utf-8?B?MEtubmJ2QkZIZFBtNloxeUJDcHFBM09KWjc4U3R3VjlaTzJ5V2s5czFKckJE?= =?utf-8?B?c2E4Q2lOVE1Ec3JCV0NCTHVxYktWUW9GeU50bGpCU3VkK3AzdDZIQkpqOENr?= =?utf-8?B?anlXeFEyUy9JcThsR0tmcW96SjVXM1RLVytjMmtHcG5yQVk5N1lKTEpzcHdZ?= =?utf-8?B?eTFkaVRXTUw2VWxubTdoUGVlalBxS0VPQ2FJS3BvUTNzbXNqL1hBQ0lIQ0th?= =?utf-8?B?THlCeXozb1pab2krTDcvblk5eWswT1lxQmkzK1E1MHhrMXdDN25LNXF4Z2Nt?= =?utf-8?B?RDVWYW94RTNpMTdXL2dKTDhpRklEZ0MzQ2Z2endrSW9uSUNWSHpLUHJqekh4?= =?utf-8?B?MDBQQjZSQTNIT0xzWk5jR0RHTFNFUHNYV05oNDczTjdWQjdNMVJTc3RrY0hl?= =?utf-8?B?eW8yMTV1WmdPaHFCTyttSGVhbUlxcytHYVowN1ZrSTZSN3ZUSUtJblhpSUNZ?= =?utf-8?B?T09yZ2g3dk9xU1hJQVRQdmVSWTdPa29yb2FXNENyVVVVOVFGNFZXREFjSUNO?= =?utf-8?B?RWRocCtmWVNkTXRJNncreTQyT2JQVGV5R2VaVFNoSDRLNGJBOHNwRllXK2Vl?= =?utf-8?B?QjJqOUZWSjNiaWxCUk55WkN6KzJYcjJjTTg4eG5FRlFpeE9ZTkRUWFRMRzhj?= =?utf-8?B?U2M0WWNQTVozVlN5WHBYYzl2djFQWWQ4SDJHMzFjOFErRitXMW9CclNxbWZQ?= =?utf-8?B?U0FJQlUyUllqNmF1WlNYUVlwZmN2UmZ1QnFrSjZkTEpQSWpib2tHSmJOVHF4?= =?utf-8?B?bW1mbHBWU0haaS9RUWJPZ3I5UVV5aDFYdDhNRnhKK0U5cXliNFZLTm1uVTJY?= =?utf-8?B?OWp6bjkyWjhmSDJJMFdEakNpcWQySnBQaFNKZFFXZEY1WEJtNDdUeXRIbGxV?= =?utf-8?B?T0lhVWxNQmY1cStxWTNjMDRxVTBoU29jbHUwdmluVXVHbkRKZitOaFFrbE4y?= =?utf-8?Q?0Z8/DMCU+P2WwBi2d5eoZgYIMq7vpyIpoJ7oC3VvywLa?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: edc1b474-dcd9-4f20-811b-08ddd34c7567 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 04 Aug 2025 11:45:49.8799 (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: 3znCYAv133Pl+mBGr1Gzx0timAA1YMOR63R9+kn9ZEtCYsHcx098u0Z+8J+l8Q869GoRh3vS6LoW5CWimgHVDA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB6020 Rust's `checked_ilog2` is in effect equivalent to the C `fls` operation, with the exception that its result is zero-indexed. This means we don't have a good basis to introduce an equivalent of `fls` on our own. Convert the relevant Nova code to use `checked_ilog2`, and remove the corresponding TODO item. Signed-off-by: Alexandre Courbot --- Documentation/gpu/nova/core/todo.rst | 14 -------------- drivers/gpu/nova-core/falcon/hal/ga102.rs | 4 ++-- 2 files changed, 2 insertions(+), 16 deletions(-) diff --git a/Documentation/gpu/nova/core/todo.rst b/Documentation/gpu/nova/= core/todo.rst index 8fdb5bced3460a3971699df79ffa2c69f84b2735..01dfa858d11fe377c345b463742= c13c37878e334 100644 --- a/Documentation/gpu/nova/core/todo.rst +++ b/Documentation/gpu/nova/core/todo.rst @@ -141,20 +141,6 @@ Features desired before this happens: | Complexity: Advanced | Contact: Alexandre Courbot =20 -Numerical operations [NUMM] ---------------------------- - -Nova uses integer operations that are not part of the standard library (or= not -implemented in an optimized way for the kernel). These include: - -- The "Find Last Set Bit" (`fls` function of the C part of the kernel) - operation. - -A `num` core kernel module is being designed to provide these operations. - -| Complexity: Intermediate -| Contact: Alexandre Courbot - Delay / Sleep abstractions [DLAY] --------------------------------- =20 diff --git a/drivers/gpu/nova-core/falcon/hal/ga102.rs b/drivers/gpu/nova-c= ore/falcon/hal/ga102.rs index 52c33d3f22a8e920742b45940c346c47fdc70e93..430a511aa1f85477690e78cdc11= 04f0e0097b0e4 100644 --- a/drivers/gpu/nova-core/falcon/hal/ga102.rs +++ b/drivers/gpu/nova-core/falcon/hal/ga102.rs @@ -69,8 +69,8 @@ fn signature_reg_fuse_version_ga102( let reg_fuse_version =3D bar.read32(reg_fuse_base + ((ucode_id - 1) as usize * core::mem::s= ize_of::())); =20 - // TODO[NUMM]: replace with `last_set_bit` once it lands. - Ok(u32::BITS - reg_fuse_version.leading_zeros()) + // The original C code performs a `fls`; this is equivalent. + Ok(reg_fuse_version.checked_ilog2().map_or(0, |v| v + 1)) } =20 fn program_brom_ga102(bar: &Bar0, params: &FalconBromPara= ms) -> Result { --=20 2.50.1