From nobody Sat Sep 26 23:51:23 2026 Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011014.outbound.protection.outlook.com [40.93.194.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 055EB3921C1; Fri, 28 Aug 2026 09:16:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.194.14 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787908608; cv=fail; b=PhC/6oRKmD14Cyf9C8n4bzgrxGZvTb1HEKuYHHWKsGDnfj3Wmd+j2ZevnfFK/4Y5c6XEXRDt0CDvTq9UgmeLbq2X0O93fmqEigxRUGEmW41MwM+USndAIUCvAgbeyB+fkEsGCdtxe4OC3CXClVjPbkN+AaCtSs4nYOCqdU6kcnA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787908608; c=relaxed/simple; bh=cqNhC91zGpGZX0axOl78ETazVyxkUhmjV4aOx7tHitg=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=rVOIAkZ8VdlU4/uDqdplunJa8JE19uykwibCtisRCPsj3poIdy9Y4FIDqHHWTP0Y55+67wQhgYJO2TKa8QAsbdlaUQgU2bEO+R3r3DCTcTFKunt+SJrm/2kS0Q7GF8KwSWHrc7qs31GM4eNpbhqAq+/LMGki9EUWy9w0u1lXLQ0= 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=orUuBMSN; arc=fail smtp.client-ip=40.93.194.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="orUuBMSN" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QkeCUV9ip8OX9GgWC5CSRcYgbdlig/wX5hQKjejecItrJDfENh7KPCiEN0DU15agsk3YffN2lNs6wclshqnVeQqY0c7uS/qIJlkBwGOJWfftaTAm47y4/eY3NxUwU1cj8NuiDyNIlPpfG8DxQ5o0xkpHeCAO7o7ShKJrL9p+cdEmmORbBMT9Lz1sEok0GmOVeQf7wuKhmA5jP8xEnTVAZRsR/+0oQgujtd5fvwN5VGCQE3gcGtQE2VRaDHwxT9q/XMjoHnFaVl3tJsQmU4GLO2i41MUwo2kws0S523tQwcSFuOeIuIVBr3hrap2qrbMEAWSyUTKiXgbiZK9DS2sZ9w== 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=u83uyYWqCW/wy37fBp8b5+eVcUOJym9WzPsWdkmJdbc=; b=DT7CTR2TofBwhPdSzQyFe62l+RbmB+AeF7JkBfzKUBGJNym+vQMrkS4gtWvfNU23XQw0Jl1suHvml1mJZDrYfPfD0LCPG6AECdCzlX13WXLMe0bnWL/gFMjzgxThPgaRFvNq7ulqLpcEpq60yCvDUEoSA0rvd/4S4dKLcHri1ak5Y0SX8se62DPs6RIZ6yoOV11eUpghjIjz/KXKjr7eo0xf0NpJmqXVsyO4XRF8WyZ4hLYeRaw/I6QCMPZoGVVp+7CG4+5Bo2gC3HeFxavC4yXTg7gX+y0oeGZwjuL+s61RWTWc0jlOdJRUOZccfSxO/uvD/ZusACWNvYddQBcQgQ== 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=u83uyYWqCW/wy37fBp8b5+eVcUOJym9WzPsWdkmJdbc=; b=orUuBMSNpIHj6/BYoLrmdEL9pPCpWAN2FE/DGdVEGgRf6ISBZZ6EElvFvmIAdowrZGoxlWCWdmnpd41hkkpZU4o5Jj2ZxUl5dsBg/wnWCYAilQqXDK1vj7RGJD00pU/36Omx1r1HIF00GKYEePZPCsp8vHx3JiW5h4PFUKc25/48DjR7IhtOv7atIDHrXTPzb3FXOQAYYgCVB/c62Zg4/9+MnEd5F6V8AgAIL6FmIRuiolhK1pXnoX1m1ASB5m5Bo7lfkmcf5sMmoVt7R9eekQrBRrFlp4ZW/5ZNLzbZOErEMVVTffLgHFux5xZd+TZ1ODZPzZAf7XpkBegm211xzQ== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by IA1PR12MB7520.namprd12.prod.outlook.com (2603:10b6:208:42f::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.10; Fri, 28 Aug 2026 09:16:40 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Fri, 28 Aug 2026 09:16:40 +0000 From: Eliot Courtney Date: Fri, 28 Aug 2026 18:15:56 +0900 Subject: [PATCH 1/3] rust: num: add cv! macro to create values from constant expressions Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260828-cv-v1-1-48a180dfc4c8@nvidia.com> References: <20260828-cv-v1-0-48a180dfc4c8@nvidia.com> In-Reply-To: <20260828-cv-v1-0-48a180dfc4c8@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , 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: TYCP301CA0054.JPNP301.PROD.OUTLOOK.COM (2603:1096:400:384::12) To DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR12MB6413:EE_|IA1PR12MB7520:EE_ X-MS-Office365-Filtering-Correlation-Id: 09cbed09-10f2-4f05-efdd-08df04e511f6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|10070799003|23010399003|7416014|366016|921020|6133799003|3023799007|56012099006|10067099003|5023799004|11063799006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: 9Z0X7Bht564eBOlIp+RnRMHLHdOuZwsIDf2fMXHmzeJyk7eZAzQ3bypJAzG7T+Ecq3vgxKdgD0FqXWHM9QxTKahDGE7KF+sqHAX1uwWuCElVgIBnLUrNsbnQG03Agd69IVjfLgU9+MIDdeqNaA6DgvjTMnKRGvZuOUXVAys/H2Y4SqymGvqo/hndffFzo8UDfMwMjervJwnqCN2PLg+LWD7rCEEHXT40oR2A3rEo2IsAG+8qzVi6Ng8CcKSvx3fDk/X3Xa5U/PJMbqc8PEnWC46M6Zak1CvQMCyxZMtr7b0G1mt5uATvVhmeE+vtFphZEWWZE5vTnZ/0wGhSJSB7/L7vGJjvbN/aRbEmzXdFxMJ6QzpjBrtu484jBgrmxbnDjYgf95iwKnxmMvbazQ93EzRnA/c9mZZ+BfZZc6z3rg8SVstIfuFu4XDZIoQ+7/PhjPCxJ24E0NQJdiOTEVsYNqFCCWWeyLtI23ot7qPBMelpsNHf8BcUk9JRVZ3AUtk3/BjTC2hmANqkr7ukMilJi0gbFf7MuY7uJuR2GAqFNe/Mgq0+KGNnLRaH3UEn90fonqt02JFE02pkGjG4DbNTEhDgaLBF2jkO4dBFm2/VtMuatqDGAjyqxnIBJuDujKQEGgrCBGxc2g8iQ5zDFuaxkfkHpBFRXTS0FKcwPWJUcn+byGmSgVsiw8dWHwmaac22ii/0I+sCcjz/4IlTCc0WwQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(10070799003)(23010399003)(7416014)(366016)(921020)(6133799003)(3023799007)(56012099006)(10067099003)(5023799004)(11063799006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?d3Y1MEJ5eEorWm1ucmJZY2laVHMwRVJwMlNoSWJ0TjBoWWxHK0VtVGZXTnRh?= =?utf-8?B?T0M2bXpEYnlsZjRHMFc3cFVnUGNLV243YkdhKzNoZ3kva3pwSXJnV1M5aExW?= =?utf-8?B?eEVNKzNwaUs4WmN5ZG1OL0d2VUpVUFNNdk1NRERkTmEzZ2l1cXNGcWRYWGQ0?= =?utf-8?B?L0FQUDc2SWxaMkp2b1RQcmw1WFBCU2VqM2hNeXU2cTF3WEMyY1YzNzd2ZDBG?= =?utf-8?B?dnJxMlhxUVZ1TkF1RmxORWFWL2lZQnFXV0F5Q1NiTjZ3cmRuaFMvWWJTNm1y?= =?utf-8?B?SHZoNzNXTEFLeXovUHhGRGRqTmUxL2tvNGprSm9mRzVTcXZJWDRsL3FHY0Zm?= =?utf-8?B?bkNuN1hoamlQZjY1K0NTUlljRktGNWVqKzdGam5LVndGdmVqdmRRN0ZJOXZ5?= =?utf-8?B?OHpRTFFXV2cyeEFXTzBWRXEweG8yN3BNMVlXNkhWYmVnTmNuNU5ha2xrdzkw?= =?utf-8?B?MURvTVpYekhVcDBnQ1g5WW0xR0dzeVF0dk1GTDB3ZjRkZEhKZTVOU0JPWGhF?= =?utf-8?B?MXZhSUh3d3BGOHl1YThVQlgvakRuY0dwZ3lOS1JJN29YdUFZUFoyT1p6bG43?= =?utf-8?B?b255TFZ2dlBmTU5oMmUyZnE4WlJCNU1GeEVkN0ZEdG5sRzZHdUpqbGh2eXlz?= =?utf-8?B?bEdDeTBCSVNVL0toNzFVNDlXVnJTYXpZYjh3RWhReHFrUnkwWlRHQmhoVmFz?= =?utf-8?B?Rk9Vc0NOL0M2TlJacW4xQjNWOG93QmQyVFpIRWNEbElDMWZLWDVWY09USWxY?= =?utf-8?B?NDZPTHU0K0VVQSs5Nmh6MWVrUVQ0MmR1T2FvS2IvaGx3ZWpZZENpOTRIMFAv?= =?utf-8?B?SWpaMU43RnZZSVA3ZUp2emFvbE80TmNQTGUyMDcvcGY0UDFlVURjZVVQTjhy?= =?utf-8?B?ZGgwYXNYSDFKRDN5ZXlHYytNbnI1ajJRTzZjbzlJNWo2VnFhSkpJeHFWV0ov?= =?utf-8?B?WmhoQlZ6YzdNMGx3S3QzZXE1eEoxYnF4WDJWZHZLTG9tdFp3RzVHTkU4S1Rq?= =?utf-8?B?dWVNWVVMamJ1WjY5TjM0YXEzVk82STJsNWlpakVDdUZhSmFGZGNMT1YyS291?= =?utf-8?B?L2dEQmtJdm9kZS9MYXB6Z1o1Ukg3REcxUnZDbXhRV1l2SExBTjdpRHZrb09L?= =?utf-8?B?RzN0em5WcmFENTZ0c3h4dXl5MnN2SHhLMTRra1VlaTQ0NGZvUEVvckFRbjJs?= =?utf-8?B?RnhpUm54VEE3RDB0cW9mZWl5UW1ZQS8xbXhTd01mOHlHN2ZLN2NldHF4NXRK?= =?utf-8?B?TUc3NlgzcitFcTZrVnlNTEtjeEthQU55bUU1UHl3WDYxQVNsK1pUbG16TnJN?= =?utf-8?B?cWk3Ym12UWNIdTBXUlFoeEZnd2ZqNVNwcWlmOEkyTENiSU0vaXB2Sm9qa1Bt?= =?utf-8?B?dmx3cUtBbHhxUmRQQ2xkcmhEUVloYlpHRGNYN2p1QkRxTmowODlyUkFReEtw?= =?utf-8?B?Tm5BVXcwR2l4UG51K0d0dUtqMEdqSGFmMitKTXdnYnRvS2lwZ213bklzcVJn?= =?utf-8?B?aDAvVTB6eWFKUnVwTDhiT1c1VmRKVjVpclh3RW52WTYrbk9XcGdhQ1IraE03?= =?utf-8?B?K3FOcDVRT2hYaDFlN1YvbWtiOVhIbDFOSjhRM1JRU3kvU1pCeFRoN2YzMmd1?= =?utf-8?B?YkJXMXRvdDBYbmd0WWhiVi8zZjM1WENnc3BkYlAyZzZuSFZOL05YcG4wZ1NM?= =?utf-8?B?Zm5lVTMzRjUzTE9vT010cW1TOEMxOWMzZzkzTXN6WmJUQVc0QzErdndHSXhK?= =?utf-8?B?MjljSGF5cE9mSnJyMHZpdG9PUi9ZK05YbDl1ZE44OGZjeUtSVGpvUVBwVVRF?= =?utf-8?B?d3ZGYVdyZ25hbVJTOG4vcG94d21SWVVZemVNOGltZ0dHRmdtN0pySVFiSG95?= =?utf-8?B?NU5ZNnpHTXpZRERGaXMyZ3EyUTBucVhzNFhWbUwxNG45SmYycFhGMDdqck03?= =?utf-8?B?RjlTV3lwallUODhJdkQ4VDE1dFFBZi9kSThVZEhMYW05cUhkVi81bUpRUXZh?= =?utf-8?B?QkpwVkNVTUtmKzhCWnR3ZktzNHZZS0ljRHh0QWhMdGF5cUdmbGFtUzBreWJC?= =?utf-8?B?UkJEblA0TmNrT1NQWUZ2ZjJCcVpZTnBVT1dLcFFGcjBZTGo4eCtybXNLeWJG?= =?utf-8?B?Q0F6QzhFN0VFMlRXVXp0eTJCSTBUYUM3TUlRbzM2RWx4MjZSaDhqQi84cmxO?= =?utf-8?B?YnRIVk9OWXBwNk9YOGVwS2RaVWJyT0VvTmYzU2VTanRGQkNIdlFGa2ZoNmNT?= =?utf-8?B?N1VUdmpTdXo5UTlyZERwenVwU1hsb0gyeTIrQm0rUGttSzJ1ckw1UHlMTlg0?= =?utf-8?B?NGNLZmJlZTF6dWY0UDE2TnE4U1E0YTQ0Unl5bmhwdktZQWY1TVUxeElIN0RR?= =?utf-8?Q?haEP14hZEdXW/J8CdsqAlfLy3kM6sJ/jSW0s66t3wkDFN?= X-MS-Exchange-AntiSpam-MessageData-1: 7zqlu1WGbJs/Mw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 09cbed09-10f2-4f05-efdd-08df04e511f6 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6413.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2026 09:16:40.6313 (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: 0jg5bZsWMbj190094HWtSPribsst9/m+wg7w2LSgbS+s+AhaAvwgZRgePaHlBMubJ+cZ5UY/U2LxXY+2HBRelQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA1PR12MB7520 Currently, using NonZero/Bounded constants is quite verbose. It's unfortunate because it disincentivizes using it in interface boundaries. Introduce a macro to make it nicer to use. The macro `cv!` (for constant value) takes a const integer expression and widens it to i128 (at build time only) before passing it as a const generic value to a new trait `FromConst`. The value is then converted and appears in the associated constant `FromConst::VALUE`. The trait is implemented by NonZero, Bounded, and Alignment and lets values of each be constructed from constants without a verbose turbofish syntax. For example, `const { NonZero::new(1).unwrap() }` can be written as `cv!(1)`. Suggested-by: Gary Guo Signed-off-by: Eliot Courtney --- rust/kernel/num.rs | 132 +++++++++++++++++++++++++++++++++++++++++= ++++ rust/kernel/num/bounded.rs | 20 ++++++- rust/kernel/ptr.rs | 12 +++++ 3 files changed, 163 insertions(+), 1 deletion(-) diff --git a/rust/kernel/num.rs b/rust/kernel/num.rs index dbe848e30efe..d9e4a089d128 100644 --- a/rust/kernel/num.rs +++ b/rust/kernel/num.rs @@ -2,6 +2,7 @@ =20 //! Additional numerical features for the kernel. =20 +use crate::const_assert; use core::ops; =20 pub mod bounded; @@ -9,6 +10,137 @@ =20 pub use bounded::*; =20 +/// Creates a value from an integer constant expression, with validity che= cked at build time. +/// +/// This works for any type that implements [`FromConst`], with the target= type inferred from +/// the context, or named explicitly with `cv!(value =3D> Type)`. +/// +/// # Examples +/// +/// ``` +/// use core::num::NonZero; +/// use kernel::num::Bounded; +/// use kernel::num::cv; +/// use kernel::ptr::Alignment; +/// +/// let v: NonZero =3D cv!(8); +/// assert_eq!(v.get(), 8); +/// +/// // Any integer constant expression works, not only literals. +/// let m: NonZero =3D cv!(usize::MAX); +/// assert_eq!(m.get(), usize::MAX); +/// +/// let b: Bounded =3D cv!(15); +/// assert_eq!(b.get(), 15); +/// +/// let a: Alignment =3D cv!(4096); +/// assert_eq!(a.as_usize(), 4096); +/// +/// // Checked narrowing of integer constants, including in `const` items. +/// const SMALL: u8 =3D cv!(200u32); +/// assert_eq!(SMALL, 200); +/// +/// const N: NonZero =3D cv!(5); +/// assert_eq!(N.get(), 5); +/// +/// // The target type can be given explicitly. +/// let e =3D cv!(200u32 =3D> u8); +/// assert_eq!(e, 200); +/// +/// // With an explicit primitive target, the expression can use generic p= arameters. +/// const fn as_u64() -> u64 { +/// cv!(KEY =3D> u64) +/// } +/// assert_eq!(as_u64::<0x40>(), 0x40); +/// ``` +#[macro_export] +#[doc(hidden)] +macro_rules! cv { + (@cast $v:expr =3D> $t:ty) =3D> { + const { + #[allow(unused_comparisons, unused_assignments, clippy::as_und= erscore)] + { + let v =3D $v; + let r =3D v as $t; + // Pin `back` to `v`'s type so `as _` casts back to the so= urce type. + let mut back =3D v; + back =3D r as _; + + ::core::assert!( + back =3D=3D v && (v < 0) =3D=3D (r < 0), + "value does not fit into the target type" + ); + + r + } + } + }; + ($v:expr =3D> u8) =3D> { $crate::cv!(@cast $v =3D> u8) }; + ($v:expr =3D> u16) =3D> { $crate::cv!(@cast $v =3D> u16) }; + ($v:expr =3D> u32) =3D> { $crate::cv!(@cast $v =3D> u32) }; + ($v:expr =3D> u64) =3D> { $crate::cv!(@cast $v =3D> u64) }; + ($v:expr =3D> u128) =3D> { $crate::cv!(@cast $v =3D> u128) }; + ($v:expr =3D> usize) =3D> { $crate::cv!(@cast $v =3D> usize) }; + ($v:expr =3D> i8) =3D> { $crate::cv!(@cast $v =3D> i8) }; + ($v:expr =3D> i16) =3D> { $crate::cv!(@cast $v =3D> i16) }; + ($v:expr =3D> i32) =3D> { $crate::cv!(@cast $v =3D> i32) }; + ($v:expr =3D> i64) =3D> { $crate::cv!(@cast $v =3D> i64) }; + ($v:expr =3D> i128) =3D> { $crate::cv!(@cast $v =3D> i128) }; + ($v:expr =3D> isize) =3D> { $crate::cv!(@cast $v =3D> isize) }; + ($v:expr =3D> $t:ty) =3D> { + <$t as $crate::num::FromConst<{ $crate::cv!(@cast $v =3D> i128) }>= >::VALUE + }; + ($v:expr) =3D> { + <_ as $crate::num::FromConst<{ $crate::cv!(@cast $v =3D> i128) }>>= ::VALUE + }; +} +#[doc(inline)] +pub use cv; + +/// Types that can be created from an integer constant expression validate= d at build time. +pub trait FromConst: Sized { + /// The value that corresponds to the constant `V`. + /// + /// Fails the build if `V` is not a valid value for `Self`. + const VALUE: Self; +} + +/// Implements [`FromConst`] for primitive integer types and their [`NonZe= ro`](core::num::NonZero) +/// versions. +macro_rules! impl_from_const { + ($($type:ty)*) =3D> { + $( + impl FromConst for $type { + const VALUE: Self =3D { + const_assert!( + V >=3D <$type>::MIN as i128 && V <=3D <$type>::MAX as = i128, + "Constant cannot be represented by the target type." + ); + + V as $type + }; + } + + impl FromConst for core::num::NonZero<$type> { + const VALUE: Self =3D { + const_assert!(V !=3D 0, "Constant cannot be zero."); + const_assert!( + V >=3D <$type>::MIN as i128 && V <=3D <$type>::MAX as = i128, + "Constant cannot be represented by the underlying type= ." + ); + + core::num::NonZero::new(V as $type).unwrap() + }; + } + )* + }; +} + +impl_from_const!( + u8 u16 u32 u64 usize + i8 i16 i32 i64 isize +); + /// Designates unsigned primitive types. pub enum Unsigned {} =20 diff --git a/rust/kernel/num/bounded.rs b/rust/kernel/num/bounded.rs index d192610a687d..b5ab77fd99cf 100644 --- a/rust/kernel/num/bounded.rs +++ b/rust/kernel/num/bounded.rs @@ -13,7 +13,10 @@ }; =20 use kernel::{ - num::Integer, + num::{ + FromConst, + Integer, // + }, prelude::*, // }; =20 @@ -262,6 +265,21 @@ pub const fn new() -> Self { unsafe { Self::__new(VALUE) } } } + + impl FromConst for Bounded<$type, = N> { + const VALUE: Self =3D { + const_assert!( + V >=3D <$type>::MIN as i128 && V <=3D <$type>::MAX as = i128, + "Constant cannot be represented by the underlying type= ." + ); + // Statically assert that `V` fits within the set number o= f bits. + const_assert!(fits_within!(V as $type, $type, N)); + + // SAFETY: the asserts above confirmed that `V` can be rep= resented within `N` + // bits. + unsafe { Self::__new(V as $type) } + }; + } )* }; } diff --git a/rust/kernel/ptr.rs b/rust/kernel/ptr.rs index 82acb531b17b..7d75a537ecae 100644 --- a/rust/kernel/ptr.rs +++ b/rust/kernel/ptr.rs @@ -166,6 +166,18 @@ pub const fn mask(self) -> usize { } } =20 +impl crate::num::FromConst for Alignment { + const VALUE: Self =3D { + const_assert!( + V > 0 && V <=3D usize::MAX as i128, + "Constant cannot be represented as an Alignment." + ); + + // The unwrap fails the build if `V` is not a power of two. + Alignment::new_checked(V as usize).unwrap() + }; +} + /// Trait for items that can be aligned against an [`Alignment`]. pub trait Alignable: Sized { /// Aligns `self` down to `alignment`. --=20 2.55.0 From nobody Sat Sep 26 23:51:23 2026 Received: from BL2PR02CU003.outbound.protection.outlook.com (mail-eastusazon11011017.outbound.protection.outlook.com [52.101.52.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 39ACD36B922; Fri, 28 Aug 2026 09:16:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.52.17 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787908611; cv=fail; b=LDcsf5WrbKgziw6YU74rGmhtVoUVQYtWiXNV+89EdqCBQHje3bvu3Nfy+419qWfx94gnWjSFMDPF0XFKEPVvS+cCGcOxjacNTBHx6snIs0KYvMASD/x3oYuNNnK7+j5nb8np9z+1o8yKnLlAS9ZEThuRCWsUdvTdL35iUqhRKJk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787908611; c=relaxed/simple; bh=KWnRkOhY256fV7P/d/ktIpyTVlGh8XgfSkj23okavkw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=lOzsuX9X3K7PS9OAanlmf60U4XDREjcBda/lwjvgvTXFLiwP1IgIKYMxflBwo8ulJOWlX69RU2y6YNrPWYYIpAnb4tr+NCYYaLxhJr7dnShNgskmKLsPkmS2cN3IMSm/+1qA6FFjuUw3lnK0Au2lq7FArowv/BWooYUPxlg/y5o= 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=D9bdY6Kc; arc=fail smtp.client-ip=52.101.52.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="D9bdY6Kc" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tmxSlt6oTJt2FD0M4h/IM04HCi6e5YxQBjIcO6FZW9KmwQUiAL1KZ0+Zok7SlAC6bKzGNSI4PuJOC6Zh805AYK9/aUG9UtY7QG1Vp6fErXgj0JURhfYe+SPZhP22HeymlhN5inu01d4ZtnE6+vxxrynaX4fZE+kUyfbi88XF3K6cqiP2XyZ3162ybEn1mBYufTwqmKG7qMH23LhhJcTslNt9SrdZsV9LEXj2bZxGFxWRbnKoSoLWHRgfiBcEgp3pp5gaYl2Ow/UTmEQbr3tFZIXk622B1p6xoTTRob8wiDjsSpudx9S4MABKdfZKAo8xghPV6NxRJ9edYWvIC3DPJw== 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=TqkiUm6uxGVzouDoRMWCD5KlSPf5vU/QCbNSpKAMku4=; b=XkIiLwSp/surgZSY0Dk+e0kiR71RkIy8p869tIoKwhFONd40W8wD7JJ/zpsg570JAtsElI2D0XEXp5/ElLnsCz58mmCCaC3fSlxKBSNnaVdfQT3It7HzOK6aBbHhji6XPz+tTWbQAzvpTX/OQE6X/QhfBZ7z4s0aed56cjhqVGkv3cfms4pW60tNwjcXZJl7YBykIEcTr7M9zEOIco0+FLYogL8Z+QQTURG0/QQ2/yTFcHAS/0Dwq4rqa6RNt6xVhdflydcc8Zxv0Ko2MvOQXIeOqBnUxfgLnPK0HWTub6SBb92I3ko3+0BQ7K8GvZMqztYpha2UCzi5vVp34Xlk8w== 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=TqkiUm6uxGVzouDoRMWCD5KlSPf5vU/QCbNSpKAMku4=; b=D9bdY6KcR1FbaNPFgr96u6YcMy3t37isy/T5+G1zvfMfNWAxlqHeocenLa0ZVmvDymZKNEvDUrw8NJplBKMbABzssvS9qLjz2fd3V4IPbNtFoagF6dQa7vt7xCpTGJZSe/aCKZjq+QiSirYV0GNbwLQNS2E4G2TI4ShCfocu1QK9uNhrCBMtCFSIK6Bj1a13XAQukfgyPtok3vLP5sDI/wpwTgvC/Z9iQnRzuEnWdozoNnud/ptf0yxdx+D+QlIGarZJCii0kdnTnWivqtOmZJREnw6pAaVhZddj2jp15eT+C7gWCN+Fj4ACRX9zepyDfaPRzTbzB2IhY5URZuuikw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by LV5PR12MB9755.namprd12.prod.outlook.com (2603:10b6:408:307::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.10; Fri, 28 Aug 2026 09:16:47 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Fri, 28 Aug 2026 09:16:47 +0000 From: Eliot Courtney Date: Fri, 28 Aug 2026 18:15:57 +0900 Subject: [PATCH 2/3] rust: prelude: add `num::cv` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260828-cv-v1-2-48a180dfc4c8@nvidia.com> References: <20260828-cv-v1-0-48a180dfc4c8@nvidia.com> In-Reply-To: <20260828-cv-v1-0-48a180dfc4c8@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , 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: PAYP264CA0013.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:11e::18) To DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR12MB6413:EE_|LV5PR12MB9755:EE_ X-MS-Office365-Filtering-Correlation-Id: dd9f4771-586b-45f9-b36e-08df04e515c7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|23010399003|366016|7416014|376014|921020|10067099003|11063799006|56012099006|22082099003|18002099003; X-Microsoft-Antispam-Message-Info: Ru1VqYz1KS65kvB++UbKm3cI7R9yXrBEFmtq9T/t+oukJz66kfNK771V0XyhaN9nbfd7b78GEbq88N0P2yCIsJDAu7iCfkk0flZLnbezvTdM8puSDQkAuSQ570LmUmkBNk2Yso7fwiq7zIAgXOJeZnt73ijrRHwShgyS9gKjRmiBXD+xUJUK3OE8t9gvoEQy6acM368aCwhdrbtMlgjRxxAzMsFNQrSLUevQrD/o8vZq1Jl4uuby+m5bTfj5Bkszxe823TyqUkmeM0MVwF/IrQx/GCZWg4jTeNQ7W9XtpqeewFc8DWZrG7hqz4tZdXCGnf1Joskr1NEygubc9S3ueu61QHWDeEs6vCYNkiR8VTfNUkpaZBhs+fS62xoy3uYuIqb0UQwXJ9esr7KhjkC+3rVSQ65vh1aak9vCVoNJbsmeg6wvpAv6egqYLwlI1NGYAMz2pxOU4uRKydsNaEsBUD8CKJqozUTPc6V1XZvuC0zFKeyTFGcbZ5dVFi1D79PloeEX3lNVr/ssuCN3LGV/8YHL6apBmSgJz37XV+0kSatYdrYro2Ve/b32nhWhdzTBLrTs+4Kem9pXXEisfxjaJ/Gwjp3yxf1GUGwW2pxdAQEVJdjLS6MQsE+ADmDDWItEQzw5K22A2b5BF+E5a3jdqhymznc+HgxcWesRsYI3DrkKD3hB+CCX5P/Vf9fJVgETSV1e9sZNbly5qwSY+1DA3A== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(23010399003)(366016)(7416014)(376014)(921020)(10067099003)(11063799006)(56012099006)(22082099003)(18002099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bld0TUtTeGdLQVVRRk9sVUxhRkg4MGtSN09FaStBbHNDalN5aVphR2REUzh2?= =?utf-8?B?NS9jamFzbFZUTU5HMU5mY2NrSlZNcGZ1dS9ZNTBra2haNHNtWU9sTU9tZFRZ?= =?utf-8?B?aXZkaVlMd0JObWoybnJtYVJWNXlCTHQxT0s3K2QvcU43cHJQUGZPV2NtK3du?= =?utf-8?B?VlJadVg2UkFwU25rTHhZN1dZam1ndFVMZDFWWW93aHBONzRHUHhkSGNNend3?= =?utf-8?B?U1JpT1VvMmt5NWM4dTVVdWwzd3VnbXNQVnNWcWZxdjM5Y1RFNHZ1RmdVNmN2?= =?utf-8?B?MXg1M0RubWdKRS9RdzQyNGdTSWhlT0EvRG41MmdRM0pocHp2aWUzUExDUmhZ?= =?utf-8?B?dTJuOFZNSnM0cTV5SkpvUXhycFkySzdndjNHYVBUcVM0dWoyc3k3bTYwbysx?= =?utf-8?B?TEtBQytuaVlOanh1K0lZQ3g4bkU5TTduRitiWVVWeElFSWpCNlU2TkFOeHRo?= =?utf-8?B?cXllQTFCQ0k3NHluN3NBNkFOTzVKN1c2dldHTThPaHRKWFJ1L0RVWFRHbW9w?= =?utf-8?B?YllUWHExTGdlL2doMXB4QkRSbFUrazA5blpGTmNaQ3RjZGhHaTgxZTd3MlpB?= =?utf-8?B?alB4WjNMWXY5b1RFR2JTbDlDaGJyR25PaXZrUHR5eXlXeUtxNllvYTJrSkRh?= =?utf-8?B?djdUMjZBK3p1NnQ1Y3FCYjRGbkZLQ2FxSDZoSDNDUVhVTXozdnI2dnp0TWh3?= =?utf-8?B?N1NHVTBVS1k1TVhPNENaM3VENHlvUWsrdExnbGlHRENGaklvTlM0UFY4R3Jp?= =?utf-8?B?WG9CZ2NJT1hiQjhaSEY3QWxLTE5jeE4wTm9oRks5UlA3dC9ESFVXaGlpMFdM?= =?utf-8?B?emFZTm1iT2xwOFVJNEZidW5ZT1pVUmRjYzF5OUVUYjdyMVRhekNmN3dXL0Ra?= =?utf-8?B?TGJ3V3RLVXY0bjY3clkwN1VydnlrckFtQU90eDBqKzZuSk1FQlBrVTYvT21H?= =?utf-8?B?UndFYnByaHEyQlV6bUxXVVhtaHBDTEtrYnZMb2t0c1Ntbm0reG1XZkNwODZq?= =?utf-8?B?dHRLSGVLTWV6dlM5Z2taTWgrOFlRbnhtZStRMm5SL1gzeFAyK0VoNzhqZmx6?= =?utf-8?B?ZnpZL2pzS0tVVC8zVURVa3BkNWFkYkJnandSNEtPVGNrRmZJckxOTzdwVGxE?= =?utf-8?B?NkdlUmZ5T3h6dmVvZEdtQUJMUUNHNXV6TGYvaE1GUU9qZ216ZU9iTngrbnEr?= =?utf-8?B?K1p2dFhCeHhnckU5U1dMaDdpek5jWVBSSFNibTdzSmtHTlU3RWZtLzE3djd2?= =?utf-8?B?aGNnUnFCbi9kZFFjRG9WS2ZWUzIrR0VEZm1sWHp4ZHIwTFZVd3NSQkRaQU5u?= =?utf-8?B?eW5qUGpkQUxLU3Q1VzJOTkxUS2hjakxiQmswb1Q2TDBEVTk2MWtrM2h1V2tB?= =?utf-8?B?WWdGQ1N5dVJudVF4MkJYdVFTSHpIYkNHTGUyYjBhZGdKWUJjZW1BVUI0NDhP?= =?utf-8?B?dnpscGJTMXN6SkpjWnFJc1g1Y3hmdWRJSjBtSkdJWmQvay95MmJRMllFNVpS?= =?utf-8?B?S0FVVWVsNSttL1ZVUnpIRGZUNlJjL09QY1ZKMzVoMEhicXJQclZDVmtkd09N?= =?utf-8?B?dkpHd3ROUDN2aVg0L3FhYUE1eE1WbmNMc1gxMXkzRHBuU202UWpXRzR0TGtM?= =?utf-8?B?dXRvR3E2bWRMakNTcGhabFZ6T3hVUDNvclI3MkZzNmxYSmNPWW9ZSDJEaVVB?= =?utf-8?B?VGgyK29vZ0c3VkdmRnptT2hiUTZyQ2puWFdHaVo3aGN5cGFCWDc1MFIzK2Vq?= =?utf-8?B?dnFNYzhBeFlOL0hXODNOcTEwMXRtYUNISVZzTW1nN1ViWjdoWDdMVzJjSHh1?= =?utf-8?B?cHpZWWpNUzRkaFJheTFkeXFTZC96cTJyalJIcUhWbHFCdVYyTVpRRURIbS9k?= =?utf-8?B?RE1TKzRsdnFXV3ozbmZrdnZrY0tmZDhBa2dUR0ZSZ214SmpVdmZnYkdiSXd6?= =?utf-8?B?Lzl2VzBlcmh6K3YyZ1VNRHJIR0pDa2JuUjBmR1loTE5EUDBZclVkUTF3cjR3?= =?utf-8?B?ZTVWVGhJOUhHd2xReUgyR01GL3oyYVFxZkV2bCt3UWVnTTdGaGptSkdmTGJW?= =?utf-8?B?eEtvOVVvRmNhTkR1ZnZsbHBBVkg2cjFWdDRlR1Y0K2RqcUI5T1Nid1pTZlRv?= =?utf-8?B?T0Q5dEF0NGFkL0NvRzkrZjZDdWpOZjVtNE1pMFJrOTVTWDhCNzdtMWJsd2hG?= =?utf-8?B?Z05vOGtFSXV3NUp2UEpSV0gxb25mMzhmdmN3NVA3em1XYW9YM2YvUXVISmhN?= =?utf-8?B?TDVUUkhTZTQwSGlBQzJqT0dMcTBGWTBlenczak91K0hBVzNrbXpNZGNwa0c1?= =?utf-8?B?K3VhUGdLbmdsWkErZWorWUJFY0RoR0x5SWlQWEJCbzFQdHB6a3Q0RC80Smdn?= =?utf-8?Q?TRextKRIyzUdDAKp8TrYD6RUHhItzfRDCJPLwArXvTked?= X-MS-Exchange-AntiSpam-MessageData-1: TMfRcvMs/Nbk4Q== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: dd9f4771-586b-45f9-b36e-08df04e515c7 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6413.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2026 09:16:47.0349 (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: uZL2IKGqb8puqwLpylKiff8npKXOX72qDqxpRnQ6g+o8p94kEsT7r2P3DjsghtUZzFVtjzzmtvnBv1kNjn2H4Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV5PR12MB9755 Add the `cv!` macro to the prelude so it doesn't need to be imported explicitly to use it. Signed-off-by: Eliot Courtney --- rust/kernel/num.rs | 1 - rust/kernel/prelude.rs | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/rust/kernel/num.rs b/rust/kernel/num.rs index d9e4a089d128..6b9b84919941 100644 --- a/rust/kernel/num.rs +++ b/rust/kernel/num.rs @@ -20,7 +20,6 @@ /// ``` /// use core::num::NonZero; /// use kernel::num::Bounded; -/// use kernel::num::cv; /// use kernel::ptr::Alignment; /// /// let v: NonZero =3D cv!(8); diff --git a/rust/kernel/prelude.rs b/rust/kernel/prelude.rs index ca396f1f78a6..5facf8f7af90 100644 --- a/rust/kernel/prelude.rs +++ b/rust/kernel/prelude.rs @@ -106,6 +106,7 @@ Result, // }, init::InPlaceInit, + num::cv, pr_alert, pr_crit, pr_debug, --=20 2.55.0 From nobody Sat Sep 26 23:51:23 2026 Received: from BYAPR05CU005.outbound.protection.outlook.com (mail-westusazon11010043.outbound.protection.outlook.com [52.101.85.43]) (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 A2650396D0D; Fri, 28 Aug 2026 09:16:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.85.43 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787908615; cv=fail; b=KlYYuHc9Wl5sJbTTmtf2DgdUbUpx84zqtMLQJ2xVwLey3hzshgAN/v0/YnFYIdMGF4L9mQgzQnTWOKNYMJATfw8u3XSrrFOzZqJsL5eDlOdSkpULSll+Q3NmjgJjq6BV5jD1MrNI9ti/Fm6hmJC+ubrjX3PdGhAdb+4PZ8EyKUk= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787908615; c=relaxed/simple; bh=kK5Z6Sgyc6qyLfQVhxk2g3PpS9tldZer85KSd6xqtdk=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=JQPpcqCTfbCLzJvWF29hlrSwUzX71kVGd6quM8hFjwgV7xsSybPaUnHno+W1nSvHl4X17CanP1SzBtrQ7yh6wHou0ADq10LoGXdRQowYF/gJFnNLjXT5qEll0XtWGcAVP52P3EkElYmpRSyJXCLtRn2xZrrt1Ug1wJxed7Kb82I= 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=Tv2SAZQF; arc=fail smtp.client-ip=52.101.85.43 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="Tv2SAZQF" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Ala/3vF0efJNt94YlaIFaa41z/8jfPzmqCuYmDwWJLR6Wd59mnlOyP4+l0E3FZO3zaVTm5sTv/vM6SkEuTbAzU1/p7Fg80plbhk1perltnkRfpViBptV5xaoCNTauHEt3rT9rS2tPd+NF29PHFzMyZGG3+IVjg2R6UwfMzRssrTES9Sl/OiZlHiJBn1SuJG2HMevjvhgPxbSszvSMb/ib1WBRSbiAceMN8wB3tHE36IHAwEMBjqGng5DnTmRhZskQLyKC5rxq7CD/jC+mHDWFd/8GyclJHfYFcBDtGmSq0km9F1MZusA2bdn/tptR5nRESwe03VKYq+edvpma8/Zfw== 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=hpuYVw0GHvsi79crKGa9I42i3zElFHK1O8+CP3rzea4=; b=FC3A9/I43NaQMC059bFKVVMEWCdUqWZNv4Z0ZBuaF3ptmNqC7k/pYErnh915p7I0DNetEi8gxKuygj7TnjH9H5zVhId8sZDez+IRzlLkTakRdttihAbRvUrksNmJ6CSpi0hwPLlutKNTOM+M4MkSdIsB530YWrljBa8rztMQWmYVUmtV1TpE6DuKWBigelpOPbrj+yhq9iKEcxSpeakQ7/pbmDNYKy270/vxCMxkVrKMVPPtuaoftdzZIW663CJ02A6JVkje3btCypBhmnsRyWxHZALa19KXSe1QLbNiAKgomjnM4H2zTatEdkCx8kAZW5Kl2KgMF/fEJEQ+bWGM/Q== 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=hpuYVw0GHvsi79crKGa9I42i3zElFHK1O8+CP3rzea4=; b=Tv2SAZQF+TMWVCmfvW0sPeQL+91tiV4O+zqpP1pME02yPzsY9cbNxzgWXD46Me2FQKmqMx+5B46jCFGSSgs8p2TFwBXwxEVGKUaceKFoIKYnjTSwnCIaf9kWnyif0PbhvQdfYYHYC1HnoXAcFka14ISNXwobdHV7XNMliRoCQIH9J4+Bmnv71EJjjs7u2eJCU4Gth8uqHTesAWydYA0z983gsmDL4hMZnWI0bi0YIwzKaLCE1qq0fXqMJ1wYXwqK/vpj3eGM6D+D76JKhvwp2zvSYPVDD6Q9XkOCqOkM5AMEBuTeExg8rteSYzETMoKtAlHKQrLakCGVy1TuMrJ86g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by LV5PR12MB9755.namprd12.prod.outlook.com (2603:10b6:408:307::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.10; Fri, 28 Aug 2026 09:16:51 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Fri, 28 Aug 2026 09:16:50 +0000 From: Eliot Courtney Date: Fri, 28 Aug 2026 18:15:58 +0900 Subject: [PATCH 3/3] gpu: nova-core: use cv! for constant casts Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260828-cv-v1-3-48a180dfc4c8@nvidia.com> References: <20260828-cv-v1-0-48a180dfc4c8@nvidia.com> In-Reply-To: <20260828-cv-v1-0-48a180dfc4c8@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter Cc: John Hubbard , Alistair Popple , Timur Tabi , 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: TYCPR01CA0203.jpnprd01.prod.outlook.com (2603:1096:405:7a::12) To DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR12MB6413:EE_|LV5PR12MB9755:EE_ X-MS-Office365-Filtering-Correlation-Id: ad4e408f-540a-49ea-20a9-08df04e51816 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|10070799003|23010399003|366016|7416014|376014|921020|10067099003|11063799006|56012099006|22082099003|18002099003|3023799007; X-Microsoft-Antispam-Message-Info: 4LBqphHUYGOHPDcxOZezAECiYm/c22Np5TrPHDHTmRlW1piXkkFokANXvLQ2UmXyRdL+69FvlTI8JKPMxESF/5mi6+YqvK6R4COaueHYyitlRxJqvPNPfZXhRgfeBKvl3ujwHVJZHBzDeNAdckbjavzKCSfpvUjQxMrwv0BsBEMU8oQC/6YuuSgGj/G9CWqCFJay5mb8rgUpCwlVHigUfNWwEBCnOMJ515SAvy66UVA6CkPM+GtolJTefpHglj8uOIjNtAD1ir23EQSrQHo4fum7A2wwuayAmQPFfBG4jklX2nca4YDvLI1XZaQYOjRAl92cVg9nAc65AHrctfSJPwpfaYqMs6nF3mR/Nxoeh+cACe+BMUVhxbNma3mPaNyWsv9A6o6k2rpTMmWPN6i1gDMs/SS103aZ/PosCGHgAWmmmTRfzZWMHfZX13UmvSkBXsocQ+WfWApkacCVmX/eBEehl7KSWsiMdpPTXaTT854ahl9h+kYGlqg3q6kog3SuJgswRRJKPeaHIxEOV+xml4ffl4VkOxhoQosQyYrJHqoCocOy8r6iyxydJo/43D9TUXm4c8zG0ELGgPnBUC9Eu6OqodE0AIfs75Jo0MpgG+kTQE8haSwxxNokZCPA5gR2fLIjun9Ae1vef0YnALQ6pFcXd5wopb+1F+vqVlhqZHQn7GAvlkeu+2Mu3d69vvcwwvs9k66S+yuIqiRLbQtgvQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(10070799003)(23010399003)(366016)(7416014)(376014)(921020)(10067099003)(11063799006)(56012099006)(22082099003)(18002099003)(3023799007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Y1ZhN1RLUGlIUWI4ZnZlZ1hQWk53WFBId0FHdTR2YVJDZko1K21wSFNQQUJj?= =?utf-8?B?UTlWdFZtS3pIa3I2OGN1Y1IzcXlyVmVIUFJhSGllNXlXdmF5SnZYNnhhOFlC?= =?utf-8?B?b0dYWXN4Y1dhNTAvTHgwSmpUVE9rWlh1N0djQk83SDF6KzVaVFRUNVNCcEg0?= =?utf-8?B?Nm9zL1c5eG5saUNEOVZjM1dZWncrd3lPNEVOWVhNN2hwaXh1RWNsSURITkcy?= =?utf-8?B?cmRxTDFJVmN5MGxjaUN3QXNJbWNPOVFwejBFVGVzWjJxUkRKcHlkTUc1ZVB0?= =?utf-8?B?ZytRUkxVZ3lpUUFTR3M5LzJNN1BpQlh2OEw3Ujdob3NTeEpneFNDS2JBam1z?= =?utf-8?B?T3Z4MWJCWGErYTJYSjNrdVNVWmVtaktERnYvN1RuVDhGTGNBNXliQWxob09z?= =?utf-8?B?UlNRUVRobkthVHl1MjRlV3BLVlB1aVJLUHlTZHFoZWxoWkpXdHlUS0RiKzhM?= =?utf-8?B?N0Iwc0Q3bmk5SHVPdGpVemxwb1ZWcGpEdWNNSXNpU2wvSXRObFhsN3JhUU5t?= =?utf-8?B?b3pHS2lGazdVQmxkYjA2aVdjZmVEZ05SdDRVN3hGZXlZWFFwNjJEUVBiU1VH?= =?utf-8?B?aVpUZFRiNkd6b1FKejRYQ3pJUzk4dDJRSC9mL3NOeDJMb3NuK25WVE9QOUZn?= =?utf-8?B?Q3U0TkNxVnRBYkwyNWptcEgvQmJXQlNiTHArTXgrbzNuaHNkNU9vZ2M3T1FK?= =?utf-8?B?TXMzRGVDSnJGVVkvVTRpYlZZa3U5c1dIR0dPd2FvbXlNVUp5Q081NkpGNkE2?= =?utf-8?B?a1M1aDB3UW1ZOUFoeTNBR3F6T3hka2llTmkrSHZzUjUrY091YUJ2cHhzLzhW?= =?utf-8?B?cUtPUnpBK2pyVWJabGRIWkxaVmpXNjZCMllONVQrS2J4bU9TeHZnaHYxdWFh?= =?utf-8?B?cjVTeTdERHpmUjcxcUw0c2tWNmZTb3dsUVJPZjFOSHUxWmUvNzN3ZytVNG5z?= =?utf-8?B?alpmYXM3MkdBVU52MFZnd0VtcEpWSnpxdEhMcU9WM2JZcnV0QzI1amVVbUVz?= =?utf-8?B?Q2E5bFp4RDh4aHpJUUtCblRuM2NuVlJKVzdlNHpWWGwvR3lkMnNWOFZRZm92?= =?utf-8?B?ZWVpbloxYWZUTUhCTUV6dzBVUE9TVjB3RURMSnRsLzE3U1dXd01jTWE0VXFk?= =?utf-8?B?R2lMbDJoSVBJc052RUM0aHpiOVB2Mk5ycGFHcU0rU0Y4bjFWN3VKTitSZ3o5?= =?utf-8?B?TmhuMHBhSTkyR01YaFZ6Q3BKa3gyWjkzT2hLYnNNR2pKWWkyY2p5eFZ1YitY?= =?utf-8?B?MjhRc0k2c1NreityVGpFRDhGanFybDlaaXBnc1dCSXRoZ2tRNElQZytQeGNx?= =?utf-8?B?RHhoZGRHdVlNTi9yZDBDWGZVVU9ocW1xcjVyMEhkMU9CclFLb3ZRVUpzNWhk?= =?utf-8?B?N1AyM21aNDFMOU5pc1ZCUC94OTVRVlhzTnFySVdISnFxMnpUZGlEd2w1elN5?= =?utf-8?B?RjRmVEM5dmJIcnd3TGVmR1Y3SGVFTzh1NWhnZXFsV0dYeEVXSnJYUkZrQkRH?= =?utf-8?B?Q21YclhJeFNvSnNoY056eVVxL1FwL09tVmVPYm8vMlVYaWFPK2liK3oyVlZL?= =?utf-8?B?VHpiVkpGeThoK0V1Zmo1dUJwNDB5MXhQa1dTWHZSSWdnSGV0WFo5b25VSFU5?= =?utf-8?B?eXhHWVBqV0paek52T1lEVEl0M3g5K3R3OTdLYVo1akU2bUZHeXN6UHFIRmlS?= =?utf-8?B?WG90YktyMTN1Ni9qZFFmY0c1UmZYaEtZV3VqclkvWUNkM0tlVlVpb1ZhbjVw?= =?utf-8?B?NGNHazFURjFma2NvRlJ1NGFoM1BwVDNxMTMwL3oyK0VXMHNnTnNzZTg3elM4?= =?utf-8?B?d0tUbXVObnljWjFkTmNpUmRTc2tqeGJCaE1Ha2dZTzl3bUExQ1NUeXV5ZjZ2?= =?utf-8?B?NjBZSnZCeHhCcGt5R3NkSzk0ZkxxMHVQaDN2SnFPUVQ2VjZXdTZuTEIrVjdZ?= =?utf-8?B?aUdMQVl0cWpaNDQ2SGlaRGxVMkNOMGUvVmYvSXp0SEkwcXllem0zL2FLcVVn?= =?utf-8?B?QnZNQjBUMkw3KzgzUkJQandtTHhZSDVXY0lkU2g0UEdQbE5yWmpqUkZNUE5m?= =?utf-8?B?T3ZhTWd0MWFHS0hiT3hFaXRFRy9kaWV1Ymh0eTJmc2ZIOFZvdkxpblZZVmgw?= =?utf-8?B?bis0bU9aTWdHZitPUDVCcHdsT1pBMTZVc3laeGk1NFl2V1BONmJQeFpsK28v?= =?utf-8?B?cTRNTGxudlpMbUltTkRzRVJoZW9RRDVJUEZFNnJibDlOWTZlSFNGSHcxL2Vm?= =?utf-8?B?SC9UTHlGSmVmNUgxTXNteE1KLzZnbG5FaVY2cStBL1dTakRkbmtGUXVJaHpm?= =?utf-8?B?SFpuazlJbVRaU3gyaFZ3dS80UTNGem9SWUhaeFZZbGh5WDNwcDU5M28yalZW?= =?utf-8?Q?ahYlikqenw0KTV/L2bgGOBvRwLlpQhEi73QUCsCPahEEA?= X-MS-Exchange-AntiSpam-MessageData-1: tYpo5yo2p39Asg== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ad4e408f-540a-49ea-20a9-08df04e51816 X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6413.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 28 Aug 2026 09:16:50.9064 (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: tM7C8scmfj1whye951sAOjVPapgeaHPmvT9RMONFu7/np3ND8qUx3y49X9LGe9M9zH1e893s1UQIi86n8fWNYA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LV5PR12MB9755 The new `cv!` macro allows safe casting of constant expressions in a const context. Update code in nova-core to use it. Signed-off-by: Eliot Courtney --- drivers/gpu/nova-core/falcon.rs | 7 ++-- drivers/gpu/nova-core/fb/hal/gb100.rs | 8 ++--- drivers/gpu/nova-core/firmware/fwsec/bootloader.rs | 7 ++-- drivers/gpu/nova-core/fsp.rs | 7 ++-- drivers/gpu/nova-core/gsp/cmdq.rs | 11 +++--- drivers/gpu/nova-core/gsp/fw.rs | 39 +++++++++---------= ---- drivers/gpu/nova-core/gsp/fw/commands.rs | 2 +- 7 files changed, 28 insertions(+), 53 deletions(-) diff --git a/drivers/gpu/nova-core/falcon.rs b/drivers/gpu/nova-core/falcon= .rs index dfe4d2e6f82e..e07537346ec5 100644 --- a/drivers/gpu/nova-core/falcon.rs +++ b/drivers/gpu/nova-core/falcon.rs @@ -20,10 +20,7 @@ }, Io, }, - num::casts::{ - self, - FromSafeCast, // - }, + num::casts::FromSafeCast, prelude::*, time::Delta, }; @@ -510,7 +507,7 @@ fn dma_wr( target_mem: FalconMem, load_offsets: FalconDmaLoadTarget, ) -> Result { - const DMA_LEN: u32 =3D casts::usize_into_u32::<{ MEM_BLOCK_ALIGNME= NT }>(); + const DMA_LEN: u32 =3D cv!(MEM_BLOCK_ALIGNMENT); =20 // DMA transfers can only be done in units of 256 bytes. Compute h= ow many such transfers we // need to perform. diff --git a/drivers/gpu/nova-core/fb/hal/gb100.rs b/drivers/gpu/nova-core/= fb/hal/gb100.rs index a53d8b435dc2..0bf00d381607 100644 --- a/drivers/gpu/nova-core/fb/hal/gb100.rs +++ b/drivers/gpu/nova-core/fb/hal/gb100.rs @@ -11,10 +11,7 @@ }, Io, // }, - num::{ - casts::usize_into_u32, - Bounded, // - }, + num::Bounded, prelude::*, ptr::{ const_align_up, @@ -84,8 +81,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() }>( - ) + cv!(const_align_up(SZ_8M + SZ_16M + SZ_4K, Alignment::new::()= ).unwrap()) } =20 impl FbHal for Gb100 { diff --git a/drivers/gpu/nova-core/firmware/fwsec/bootloader.rs b/drivers/g= pu/nova-core/firmware/fwsec/bootloader.rs index d1fb7d2d7480..d637cc4ce312 100644 --- a/drivers/gpu/nova-core/firmware/fwsec/bootloader.rs +++ b/drivers/gpu/nova-core/firmware/fwsec/bootloader.rs @@ -15,10 +15,7 @@ io::{register::WithBase, Io}, num::casts::FromSafeCast, prelude::*, - ptr::{ - Alignable, - Alignment, // - }, + ptr::Alignable, sizes, transmute::AsBytes, }; @@ -134,7 +131,7 @@ pub(crate) fn new( let code_size =3D usize::from_safe_cast(tlv.get_u32(b"CDSZ")?); let code =3D blob.get(..code_size).ok_or(EINVAL)?; let aligned_code_size =3D code_size - .align_up(Alignment::new::<{ falcon::MEM_BLOCK_ALIGNMENT }= >()) + .align_up(cv!(falcon::MEM_BLOCK_ALIGNMENT)) .ok_or(EINVAL)?; =20 let mut ucode =3D KVec::with_capacity(aligned_code_size, GFP_K= ERNEL)?; diff --git a/drivers/gpu/nova-core/fsp.rs b/drivers/gpu/nova-core/fsp.rs index b9ca298dc97f..e15d0af95499 100644 --- a/drivers/gpu/nova-core/fsp.rs +++ b/drivers/gpu/nova-core/fsp.rs @@ -11,10 +11,7 @@ device, dma::Coherent, io::poll::read_poll_timeout, - num::{ - casts, - TryIntoBounded, // - }, + num::TryIntoBounded, prelude::*, ptr::{ Alignable, @@ -287,7 +284,7 @@ fn new<'a>( }; =20 let version =3D hal.cot_version(); - let size =3D casts::usize_into_u16::<{ core::mem::size_of::() }>(); + let size =3D cv!(core::mem::size_of::() =3D> u16); =20 Ok(init!(Self { header: FspMessageHeader::new(NvdmType::Cot), diff --git a/drivers/gpu/nova-core/gsp/cmdq.rs b/drivers/gpu/nova-core/gsp/= cmdq.rs index 658d0a9b2cfb..4a471efe237c 100644 --- a/drivers/gpu/nova-core/gsp/cmdq.rs +++ b/drivers/gpu/nova-core/gsp/cmdq.rs @@ -23,10 +23,7 @@ Io, // }, new_mutex, - num::casts::{ - self, - FromSafeCast, // - }, + num::casts::FromSafeCast, prelude::*, ptr, sync::{ @@ -165,7 +162,7 @@ fn read( #[repr(C, align(0x1000))] #[derive(Debug)] struct MsgqData { - data: [[u8; GSP_PAGE_SIZE]; casts::u32_as_usize(MSGQ_NUM_PAGES)], + data: [[u8; GSP_PAGE_SIZE]; cv!(MSGQ_NUM_PAGES)], } =20 // Annoyingly we are forced to use a literal to specify the alignment of @@ -238,8 +235,8 @@ unsafe impl FromBytes for GspMem {} impl DmaGspMem { /// Allocate a new instance and map it for `dev`. fn new(dev: &device::Device) -> Result { - const MSGQ_SIZE: u32 =3D casts::usize_into_u32::<{ size_of::= () }>(); - const RX_HDR_OFF: u32 =3D casts::usize_into_u32::<{ mem::offset_of= !(Msgq, rx) }>(); + const MSGQ_SIZE: u32 =3D cv!(size_of::()); + const RX_HDR_OFF: u32 =3D cv!(mem::offset_of!(Msgq, rx)); =20 let mut gsp_mem =3D CoherentBox::::zeroed(dev, GFP_KERNEL)= ?; gsp_mem.cpuq.tx =3D MsgqTxHeader::new(MSGQ_SIZE, RX_HDR_OFF, MSGQ_= NUM_PAGES); diff --git a/drivers/gpu/nova-core/gsp/fw.rs b/drivers/gpu/nova-core/gsp/fw= .rs index 61064b6a251b..880764c2e5b1 100644 --- a/drivers/gpu/nova-core/gsp/fw.rs +++ b/drivers/gpu/nova-core/gsp/fw.rs @@ -19,10 +19,7 @@ io_read, io_write, // }, - num::casts::{ - self, - FromSafeCast, // - }, + num::casts::FromSafeCast, prelude::*, ptr::{ Alignable, @@ -57,7 +54,7 @@ =20 /// Maximum size of a single GSP message queue element in bytes. pub(crate) const GSP_MSG_QUEUE_ELEMENT_SIZE_MAX: usize =3D - casts::u32_as_usize(bindings::GSP_MSG_QUEUE_ELEMENT_SIZE_MAX); + cv!(bindings::GSP_MSG_QUEUE_ELEMENT_SIZE_MAX); =20 /// Empty type to group methods related to heap parameters for running the= GSP firmware. enum GspFwHeapParams {} @@ -110,20 +107,18 @@ pub(crate) struct LibosParams { impl LibosParams { /// Version 2 of the GSP LIBOS (Turing and GA100) const LIBOS2: LibosParams =3D LibosParams { - carveout_size: casts::u32_as_u64(bindings::GSP_FW_HEAP_PARAM_OS_SI= ZE_LIBOS2), - allowed_heap_size: casts::u32_as_u64(bindings::GSP_FW_HEAP_SIZE_OV= ERRIDE_LIBOS2_MIN_MB) + carveout_size: cv!(bindings::GSP_FW_HEAP_PARAM_OS_SIZE_LIBOS2), + allowed_heap_size: cv!(bindings::GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS2_= MIN_MB =3D> u64) * u64::SZ_1M - ..casts::u32_as_u64(bindings::GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS2= _MAX_MB) * u64::SZ_1M, + ..cv!(bindings::GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS2_MAX_MB =3D> u= 64) * u64::SZ_1M, }; =20 /// Version 3 of the GSP LIBOS (GA102+) const LIBOS3: LibosParams =3D LibosParams { - carveout_size: casts::u32_as_u64(bindings::GSP_FW_HEAP_PARAM_OS_SI= ZE_LIBOS3_BAREMETAL), - allowed_heap_size: casts::u32_as_u64( - bindings::GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS3_BAREMETAL_MIN_MB, - ) * u64::SZ_1M - ..casts::u32_as_u64(bindings::GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS3= _BAREMETAL_MAX_MB) - * u64::SZ_1M, + carveout_size: cv!(bindings::GSP_FW_HEAP_PARAM_OS_SIZE_LIBOS3_BARE= METAL), + allowed_heap_size: cv!(bindings::GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS3_= BAREMETAL_MIN_MB =3D> u64) + * u64::SZ_1M + ..cv!(bindings::GSP_FW_HEAP_SIZE_OVERRIDE_LIBOS3_BAREMETAL_MAX= _MB =3D> u64) * u64::SZ_1M, }; =20 /// Returns the libos parameters corresponding to `chipset`. @@ -682,12 +677,8 @@ fn id8(name: &str) -> u64 { id8: id8(name), pa: obj.dma_address(), size: u64::from_safe_cast(obj.size()), - kind: casts::u32_into_u8::< - { bindings::LibosMemoryRegionKind_LIBOS_MEMORY_REGION_CONT= IGUOUS }, - >(), - loc: casts::u32_into_u8::< - { bindings::LibosMemoryRegionLoc_LIBOS_MEMORY_REGION_LOC_S= YSMEM }, - >(), + kind: cv!(bindings::LibosMemoryRegionKind_LIBOS_MEMORY_REGION_= CONTIGUOUS), + loc: cv!(bindings::LibosMemoryRegionLoc_LIBOS_MEMORY_REGION_LO= C_SYSMEM), ..Zeroable::init_zeroed() }); =20 @@ -715,12 +706,12 @@ pub(crate) fn new(msgq_size: u32, rx_hdr_offset: u32,= msg_count: u32) -> Self { Self(bindings::msgqTxHeader { version: 0, size: msgq_size, - msgSize: casts::usize_into_u32::(), + msgSize: cv!(GSP_PAGE_SIZE), msgCount: msg_count, writePtr: 0, flags: 1, rxHdrOff: rx_hdr_offset, - entryOff: casts::usize_into_u32::(), + entryOff: cv!(GSP_PAGE_SIZE), }) } =20 @@ -947,7 +938,7 @@ impl MessageQueueInitArguments { fn new(cmdq: &Cmdq) -> impl Init + '_ { init!(MessageQueueInitArguments { sharedMemPhysAddr: cmdq.dma_addr, - pageTableEntryCount: casts::usize_into_u32::<{ Cmdq::NUM_PTES = }>(), + pageTableEntryCount: cv!(Cmdq::NUM_PTES), cmdQueueOffset: u64::from_safe_cast(Cmdq::CMDQ_OFFSET), statQueueOffset: u64::from_safe_cast(Cmdq::STATQ_OFFSET), ..Zeroable::init_zeroed() @@ -969,7 +960,7 @@ impl GspAcrBootGspRmParams { fn new(target: GspDmaTarget, wpr_meta_addr: u64) -> impl Init { let params =3D init!(Self { target: target as u32, - gspRmDescSize: casts::usize_into_u32::<{ size_of::() }>(), + gspRmDescSize: cv!(size_of::()), gspRmDescOffset: wpr_meta_addr, bIsGspRmBoot: 1, wprCarveoutOffset: 0, diff --git a/drivers/gpu/nova-core/gsp/fw/commands.rs b/drivers/gpu/nova-co= re/gsp/fw/commands.rs index 201594fa437b..60b0355d1d2e 100644 --- a/drivers/gpu/nova-core/gsp/fw/commands.rs +++ b/drivers/gpu/nova-core/gsp/fw/commands.rs @@ -82,7 +82,7 @@ pub(crate) fn new(offset: u32, value: u32) -> Self { =20 // We only support DWORD types for now. Support for other = types // will come later if required. - type_: bindings::REGISTRY_TABLE_ENTRY_TYPE_DWORD as u8, + type_: cv!(bindings::REGISTRY_TABLE_ENTRY_TYPE_DWORD), __bindgen_padding_0: Default::default(), data: value, length: 0, --=20 2.55.0