From nobody Mon Jun 8 04:25:46 2026 Received: from CWXP265CU009.outbound.protection.outlook.com (mail-ukwestazon11021080.outbound.protection.outlook.com [52.101.100.80]) (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 C1A8E3E9299; Tue, 2 Jun 2026 14:18:05 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.100.80 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780409888; cv=fail; b=JmWE6uK3fzrl6+7xSdiaYQeazL+3jo639x+axVwgs5IKPZCVTwtu7z3XAfR1GRClQmoMQuqBaifdTB++OZ3+g921CGe0F6sBQYcB/e7zZ3KVnDvm0wCnLgnkYLp2MfcbExFG+6MJJo/yvqn1+oX5WpTeFB1kDDcNBciSqdmPRA0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780409888; c=relaxed/simple; bh=g9OtVD15PZdi1rykkPPp2c6JTPHue348sNKr+bbfSiY=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=HiozqoRWHOxT7yi1lMKjHpAT9BbpFpdrfl/25f8HOPqCyyTq4u6yA51oSXzZyd7i4z8bfPe6Ydm6jZU+BjbBVyU9Ek/uGSZe/aVN1PYO/eV4lDuYTS1zlql/r6SRXQvciomsNc1aumv2G2jSckM7cFlNii3f68FIOyyaNSK3ay8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=garyguo.net; spf=pass smtp.mailfrom=garyguo.net; dkim=pass (1024-bit key) header.d=garyguo.net header.i=@garyguo.net header.b=j1siBBjF; arc=fail smtp.client-ip=52.101.100.80 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=garyguo.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=garyguo.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=garyguo.net header.i=@garyguo.net header.b="j1siBBjF" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ehqcGu9ZFVkPh7NRJJ4Dpp+vFWpnwNzwDQboS4zZ0vUL1imDNTmb5ezVoEjFpAAeiX0TqemCqh+UWjmLCkRtarl3W76hjTN2U6oNgQw2OXX42E2dlewNR8WuhVJ0KPGPBjb7cIPzxG/QyE/gxePd0ZtJjTBYbw5v6da5AXfdyoufcEeisnhY+WowBk+NR/BXB5h9HkQjV1p3qvRr9fwdUPjCnWY6+VbSL+4M9RSf9knrU85sposfLcMTYIdSycMig81jIkYlalTuxGbU9kKPLVpO6fhW6l6/ld4Bq0sbyjsCHMCbkGDHASA+GJ6w6uoRqzCZdQOg6BCeT2r/91xtiw== 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=lzPUAs5MBpx8tth380XTpOt4FWUkDAjeEAs2cl0quBM=; b=f814kXzyGJstceaRsj8CV5v3zWpGIp8NFcWsaBwqLHP45Lt5Exrc1OAlcGcef8+YJOSZvxK2eXSn3Na+kqu2EJv3ni4m0+7ISUQAMS/KBDYi9bQhMtni/mdTL7mu+RfXkYe7Oedmxh5NwfiPe1NZIELKx7vysij0mSnY+EHJq/TY6pSmakGfg0ku00LH9rJtQTeuHIEIEPAWV/Ob/5xHwqDbAWDRL4KtQBA07Ck9gFM2yGSXAqGTqMjffFIwXGPJE5TD4VpU4OOn3DaNdvmzI9DeDQotrJFdm/OZ070SSvewA9rUAzNGa3l5zaFNymSqShnCapOMJp+8SSn2WzTf5A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=garyguo.net; dmarc=pass action=none header.from=garyguo.net; dkim=pass header.d=garyguo.net; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=garyguo.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=lzPUAs5MBpx8tth380XTpOt4FWUkDAjeEAs2cl0quBM=; b=j1siBBjFmB4vNOozGOu7DTeaMT8c7sy8wqps33qGVzuRDYFBNU6ViJLcaZvKQ+lqzEOtTpNpnrXIvSZRwoaLa8d1o1Fz06rLfh4d2zzYPcU3qKE7aycES95y8JYMnxth6cq1EVt/MM970sNw1qe3N7i4wW9mQytdFew3Dn8TO0c= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=garyguo.net; Received: from LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:488::16) by LO2P265MB3626.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:1b5::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Tue, 2 Jun 2026 14:18:02 +0000 Received: from LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM ([fe80::1c3:ceba:21b4:9986]) by LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM ([fe80::1c3:ceba:21b4:9986%4]) with mapi id 15.21.0092.006; Tue, 2 Jun 2026 14:18:02 +0000 From: Gary Guo Date: Tue, 02 Jun 2026 15:17:52 +0100 Subject: [PATCH v2 1/6] rust: ptr: rename `ProjectIndex::index` to `build_index` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260602-projection-syntax-rework-v2-1-6989470f5440@garyguo.net> References: <20260602-projection-syntax-rework-v2-0-6989470f5440@garyguo.net> In-Reply-To: <20260602-projection-syntax-rework-v2-0-6989470f5440@garyguo.net> To: Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Abdiel Janulgue , Daniel Almeida , Robin Murphy , Alexandre Courbot , David Airlie , Simona Vetter Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1780409881; l=2897; i=gary@garyguo.net; s=20221204; h=from:subject:message-id; bh=g9OtVD15PZdi1rykkPPp2c6JTPHue348sNKr+bbfSiY=; b=Sa9uZs1AhC6pjwEtfrdWVEzvHowTaLkiMfCateb8ZlWvssfdUv4ZE7b17TZmN3NQdUCt2PaTu 9Pwd9fp7CoMDierKsVMhmoEmr7cXX23rbEs8NIOb7msptYFFxEK1sXH X-Developer-Key: i=gary@garyguo.net; a=ed25519; pk=vB3uIX95SM4eVrIqo1DWNWKDKD2xzB+yLLLr0yOPYMo= X-ClientProxiedBy: LO4P123CA0539.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:319::10) To LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:488::16) 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: LOVP265MB8871:EE_|LO2P265MB3626:EE_ X-MS-Office365-Filtering-Correlation-Id: 55b80ff5-bcaa-425d-b68b-08dec0b1c173 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|10070799003|376014|7416014|1800799024|22082099003|18002099003|921020|6133799003|5023799004|56012099006|3023799007; X-Microsoft-Antispam-Message-Info: cfG95mv2t7CRmeHQoty4b/y7ktZfJk8RSA55oo/CExHnEq+bJRiR5rNhFAFMybWKeHZ3mtbQUFKO0LwMVTW2A0IWVK4Q/hqtU2Cu114bmMqeiftxkUtsSCOEMmYbTc0OAn3cI1Lhj3nM17ee/oCJTHf8X09SrhcLELXecLc7imy4sEYsrWxfO0srru/IsS6PgAzIudBU9zS+yp6WrwijZ5KtOqVJQTN0B957qjqZdlJVnC5fQySOE7dJEiNb52zjiTtR3EPYKouhcB0+FKvT5mWkyJwxK5vonHzBVIpUZ/vFifyhHpzFLGZVP324k3+zxcWK60Z1Cc6dNxCs+m5lbMEf+51VnwWN3QlvHUb2OuYiJNz9OnuBvz5ROphD01T9wBVbuiP6VWjFq9ZGfEJMuxppyPFfUPBe1sTQpo22quMRN4aqo5M+XfcfO6z1MIzIOoPD8m6T3slrZfKY4F+8j2sdNb6it8mvc2b/vOh5J53WKdkqAy4OGgF0fiezMuXiICgcrLJM2yE7ArZErgP7bgRnRbYNz5X/mz1hpWfHzikDl2zFYOmnRfzsDPK8/ye75PZ0g/09Jf7xcEAr+z8tI2o5CcG5nZJaiK4Da9AT6lPx0lelpv4psaQZwvJQ64OfEv4BjUS3LAEkqFlU9cMqM1OwuIXIc9LTL1ARlSOOfGWJsW5xV0Nea9/EXXN45OVCfdgjGYy6o+4T0sMMvw8XOuuE8I4Wm8FFpaNhOO904gw= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(10070799003)(376014)(7416014)(1800799024)(22082099003)(18002099003)(921020)(6133799003)(5023799004)(56012099006)(3023799007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?ZkZmRkxBQldrU2oxbjRDd01QNktNU0RQUHBHQWJTUkNzcm1FcjJHcG1oSzVm?= =?utf-8?B?QS9QaGd0c3k1U3JySSsrSExnRERKbnZCWGtqWFZqWEZhTEtoNkNFcHNNalJZ?= =?utf-8?B?ZytzN2RTazhscEM5YjRid2NCdFVpUVEzTzlMZGxGQW8rV2dMWmdodVNQMzlh?= =?utf-8?B?L3pEVk9vZ3BaU0ZzWEZhNmlDSmVSeHFEeFREMTVwZ0s3SGh0NHlKZW1xRFdF?= =?utf-8?B?L25wUkVuMDBZaE9tYng4VTg2NzUzYnBDMDVMa0ZOOWcvSTYxS0tOOUs1dEIv?= =?utf-8?B?bkxBcDF5NVRMeXI0dkEyL1RaM0pHN0Vra0plYnFJVEIvamxkV2pha0VRY2pH?= =?utf-8?B?SkNsbWFSbGdwYlFQZ01jbW5Ib0JDMm5oMzRmMWE0VW96UTZ2Sk51YmhlV1Nk?= =?utf-8?B?MXFJSlJrZWFRRkc0K3V2Znh5czFjb3RjVnBHTXRiV3hPNllzOWsweTYzWGlq?= =?utf-8?B?WG8wY2xXT1R6NzcrZldUNDJXQnZaOTk5Q3htMlJRN2tSTFdqTjVSTkV2blRC?= =?utf-8?B?MUFWeE5BdEF3TU0xTG9XSTNwb3RvZlFRNlZiNzYxb1J3Zkp4TjJ0clVEbmJS?= =?utf-8?B?bWFEYkpJTlRuUWZnTGdKenV2bUpaY0VHMm1PWVBueGgvVElXVitkRU9JbDk5?= =?utf-8?B?TUQ5SkFReHBSMldvSXl5TXY2Sy85SFhObHVBVy9lUmNXbG9OM25Bcm5FcGJJ?= =?utf-8?B?Y1BIYjQ2dkt5NFJ1YjYxempWcTA0K1JnUDNjc0pvSWhuYzFDMDh5R1dwME9m?= =?utf-8?B?b2NhNGx1czE0Z2NUTit0NkJBZnBTUkNabFVXeG1kdkUwd3dUQXVhNHRtTWkz?= =?utf-8?B?Z3V2L0JDaFUwMlM2ZlN1Q3Y4S2hTOGhwM2lYTlIvNnZOWHBmMXJQZEVNampk?= =?utf-8?B?eHViTUVsR3h2Rk1uNVF2OU1xZW0vUFVNMzRtZDB2NVcyeWFLamdzTnpjbHNB?= =?utf-8?B?ekd5dFc3VmJOMHhreGhVQnpnemtwRWRBakY5Z0lzUGdpQ2k5dktVL3FLZWNX?= =?utf-8?B?Z3pFQWRwYkl5czIxOHozdFpUV0VDQUJtK0cyL3duY2JEbjRmYk5mRUR5Y0dN?= =?utf-8?B?cnRnL0JRZ1FVVUVDeU9PZFc5a3dEUHRNWlJITDQraG5hNEI0MlkvbW1NMjNS?= =?utf-8?B?NzJwODN5NWFFRVZUUHVwSlNzUWduUFRLM0hqQzVibFhpNkRWendtTVVjbUNu?= =?utf-8?B?RENCSHo3UHZKUXJ2eXdwb1c1L3IyNFdibVlPbXlySFZFeXhDbkplWDhXV0hk?= =?utf-8?B?dWMxdUQ2T0tGYU1QS3EzNVdWejlOdzZQQUQ5WS9Gdm9OeXg1WklYL2JxMXZm?= =?utf-8?B?elBaaTkzelJzdWhGMWZEUC9iNFVla0p3TTNhMmNQRWt2ODZtRnI1bHdYWHF4?= =?utf-8?B?d2VqS3lCK3BpdG8zN1dFcm4rWTZ6c083VFc5TGppekZBQWV6NTRFc3NLMUlv?= =?utf-8?B?M2dNUWoySlhvSjBNSllGSWxzSFlTUDNwMDdNUGluZTJzYVp1RjVNVnc2Vnor?= =?utf-8?B?d2JRbVlOTU8wL0E5UjQwR2FJVldZeGFid3JiM08zNlJ2SjZMYXZ6TUdzWUFi?= =?utf-8?B?czZCRG9CSU5lSXFUYThTQnJyYVRsQXVTNFphVXlMSkNhZ0pCMmUyVUc3ZlBz?= =?utf-8?B?QnkxbkgyN29FMVRmZlFvdEFWK1c5bWhMd3piTHhoQmF5VFJLSDhOQTBQSkJD?= =?utf-8?B?RWE3a3B1c3VDUEwvSzd3V2U3VXh5MUIrOTJ1ejRsNWkwYWhqZ3U2VGJkMU5t?= =?utf-8?B?MHZ0Q21hSEpqdjQ1QXhrVzZ4VlFlNTJYb29aaEJJVDVsdE53NGF2RzFTSWx6?= =?utf-8?B?KytVS3B5OVJ0Sm5PeWtQaERWMFp3OTFhSVBhRDJFc2w2bnIrZ01kRDZmMmlY?= =?utf-8?B?VVU2YUdKc01DVys2d0M3dXNESGc2bjhTYU5BTlAxMmJZZ1BSVVFOckRaTFcx?= =?utf-8?B?VVY4Mmd2eGRTbC9ER3V3dmFZa0pKd21YTFRqZDlMN2UxSE9hbC9lVTJHTzJo?= =?utf-8?B?OTJ6OUVVZWpKWktGeG9seWpOMmpnMWFISnJTMVorT1E3ME5vTVVFWTA2L3pZ?= =?utf-8?B?bFphajZjVlhKb0xLYmhjajVoaHdsWEFVUndqeHVCWXNWaHVEeWVtNk9CS01s?= =?utf-8?B?WTRuTWJHZ2NTd21vU0dLdW9DL0N4UnQ4VkNyYW5QbFRsZjNJbjF0dFNZV3VD?= =?utf-8?B?MWpUaEZ1VlFWQ0VIYS9DMC9GUEhNTHphbWJjYUF5bmNmRnhIWGpUQVFqN0FK?= =?utf-8?B?NUxSajl4blh2NFBpM0Eyckt0L2lScUs2SkRMOXRBUFpMVUlPT1l0bXNRSHM0?= =?utf-8?B?cWRHemtJb1Y2bktFMHlNdHc5cjZ2bjVXRGp5TElVYVdFMGJxNUh1UT09?= X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: 55b80ff5-bcaa-425d-b68b-08dec0b1c173 X-MS-Exchange-CrossTenant-AuthSource: LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jun 2026 14:18:02.1082 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bbc898ad-b10f-4e10-8552-d9377b823d45 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: Pt/sqalNRCvgwEvfuMKlm/dnNoy8YiXl1xwWDIC+wcDnNDaVmcwTx8Ysm7VTdYi5+7nJm30gT55yVWDNl/w52g== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO2P265MB3626 The corresponding `SliceIndex` trait in Rust uses `index` to mean the panicking variant, which is also being added to `ProjectIndex`. Hence rename our custom `build_error!` index variant to `build_index`. Suggested-by: Alexandre Courbot Link: https://lore.kernel.org/rust-for-linux/DI5LLN2V3XCS.34H4CG99N4MPA@nvi= dia.com Signed-off-by: Gary Guo Acked-by: Danilo Krummrich Reviewed-by: Alexandre Courbot Reviewed-by: Alice Ryhl --- rust/kernel/ptr/projection.rs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/rust/kernel/ptr/projection.rs b/rust/kernel/ptr/projection.rs index 140ea8e21617..fbe172e493c2 100644 --- a/rust/kernel/ptr/projection.rs +++ b/rust/kernel/ptr/projection.rs @@ -26,14 +26,14 @@ fn from(_: OutOfBound) -> Self { /// /// # Safety /// -/// The implementation of `index` and `get` (if [`Some`] is returned) must= ensure that, if provided -/// input pointer `slice` and returned pointer `output`, then: +/// For given input pointer `slice` and return value `output`, the impleme= ntation of `build_index` +/// and `get` (if [`Some`] is returned) must ensure that: /// - `output` has the same provenance as `slice`; /// - `output.byte_offset_from(slice)` is between 0 to /// `KnownSize::size(slice) - KnownSize::size(output)`. /// -/// This means that if the input pointer is valid, then pointer returned b= y `get` or `index` is -/// also valid. +/// This means that if the input pointer is valid, then pointer returned b= y `get` or `build_index` +/// is also valid. #[diagnostic::on_unimplemented(message =3D "`{Self}` cannot be used to ind= ex `{T}`")] #[doc(hidden)] pub unsafe trait ProjectIndex: Sized { @@ -44,7 +44,7 @@ pub unsafe trait ProjectIndex: Sized { =20 /// Returns an index-projected pointer; fail the build if it cannot be= proved to be in bounds. #[inline(always)] - fn index(self, slice: *mut T) -> *mut Self::Output { + fn build_index(self, slice: *mut T) -> *mut Self::Output { Self::get(self, slice).unwrap_or_else(|| build_error!()) } } @@ -64,8 +64,8 @@ fn index(self, slice: *mut T) -> *mut Self::Output { } =20 #[inline(always)] - fn index(self, slice: *mut [T; N]) -> *mut Self::Output { - >::index(self, slice) + fn build_index(self, slice: *mut [T; N]) -> *mut Self::Output { + >::build_index(self, slice) } } =20 @@ -287,7 +287,7 @@ macro_rules! project_pointer { }; // Build-time checked index projection. (@gen $ptr:ident, [$index:expr] $($rest:tt)*) =3D> { - let $ptr =3D $crate::ptr::projection::ProjectIndex::index($index, = $ptr); + let $ptr =3D $crate::ptr::projection::ProjectIndex::build_index($i= ndex, $ptr); $crate::ptr::project!(@gen $ptr, $($rest)*) }; (mut $ptr:expr, $($proj:tt)*) =3D> {{ --=20 2.54.0 From nobody Mon Jun 8 04:25:46 2026 Received: from LO2P265CU024.outbound.protection.outlook.com (mail-uksouthazon11021105.outbound.protection.outlook.com [52.101.95.105]) (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 466F93ECBF1; Tue, 2 Jun 2026 14:18:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.95.105 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780409894; cv=fail; b=VRX73rHntU0nbM76JSqNZSz5JtQbsFQdKmxijXMwWBOoCknYSyNqwqzr14u1al+du9V9lLuMVSg2/gmWkXXc/93zU2Vml4SyJ92CLt8i/8+QMLty7Y3i3+m79pINOOQD1K4jg3Tc0EiS45Msb7oSJzpUDFiVM6iFl8Yp4GhqXlw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780409894; c=relaxed/simple; bh=hr04Tt1QZvtf3ZStThFAxQPZm/WEXIYt5H2AG4sQ6kE=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=IHMOLHmZs5SEKCLx+lrUgecxiu2YwSBRXy20ioVxUrRdDo18Fa1znCSwd7GOxFESG4TvAFcubK8dtS/kZmcim48YiXDcsLKyEacmy3AfH91Qu1N5mGn5N+/2iEbo+VcxPhDao/9dt20ZIPewk6/gvpXlVhhPNo0WRQc5/3CZjIs= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=garyguo.net; spf=pass smtp.mailfrom=garyguo.net; dkim=pass (1024-bit key) header.d=garyguo.net header.i=@garyguo.net header.b=do+jdc8P; arc=fail smtp.client-ip=52.101.95.105 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=garyguo.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=garyguo.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=garyguo.net header.i=@garyguo.net header.b="do+jdc8P" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=yoosyG9XhHQGxv95DAZYf6kp5RqX/sZWFoZhnMQQ56wVzSSVU1GyLz03WUx4o1UiVCICo1wtQHp4cCM2afbjwgvwz2OCzJ/nTXi8oSTHJT058gkFCoh8uZ6qznMfX4p/kcKt6snhB7zw+VRNYn3RXGjYbyOIOfRzf6B9FRhq1f80LpnBZ6LUJQj82v0TMO3xHXWLElRipevGk+7LYVNmJiJjg9yonKda+UKAWtNSjyt/AaDiAd2EcSYei9F75Uc3yE/gUxdBOB3SF0rDUlqfAdL+i1ocFGTJo51Qghr+jKaV8RwoM2/rsssRr4/5XJz8y3FTHe7ZFxAulzqUUOKeWQ== 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=c0TacVsjqtHn6L22DUpGtY9yQ/xAOVzmc3UVIs0/rn0=; b=ALrjlEPQ0CJZsKyUCpMBQlVLCbgfFW8pU/TAij2MsLYLxml1OAvcODGvzwxyAn3s4wL+mo98vvuJdc5OEMscu21PoatevrQRsCh70WW83XFkuef2fiDVCSM65TAqZWmFGwL79uHiVM6hQXH+RQu/rBl6q44+QvKvh9DZg/23kODp69dTzvNUXwONCKpzMoJGEmzsAPJcc7T8pvowQzg5FKx+/QMQhszFwPYb/X8Zq2koq8d7Ah/fHqnSbGGsv4pOw02S50vrgq/+s4hqs5hUHNgkLcoFHyHItahEGibYkdkipnimBwP6gI8VC3v+DVSwwHTCdy263puxpamfGu5V5g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=garyguo.net; dmarc=pass action=none header.from=garyguo.net; dkim=pass header.d=garyguo.net; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=garyguo.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=c0TacVsjqtHn6L22DUpGtY9yQ/xAOVzmc3UVIs0/rn0=; b=do+jdc8PoD9rHUCNlHTQvI+QM/fpTp6mLewJU+1xS5T+QevEqvpdxHlmJG7FCrmJawWwBir35blUPB0DehPNZHtZzrfpqpIfL4E7D3bDYBZURa0nLq4l86BfGVDqk2ffR/G0WcR/NfRCxGfFVn3f/wkpq3wgAyTX8w5KB0zmzco= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=garyguo.net; Received: from LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:488::16) by LO2P265MB3626.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:1b5::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Tue, 2 Jun 2026 14:18:02 +0000 Received: from LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM ([fe80::1c3:ceba:21b4:9986]) by LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM ([fe80::1c3:ceba:21b4:9986%4]) with mapi id 15.21.0092.006; Tue, 2 Jun 2026 14:18:02 +0000 From: Gary Guo Date: Tue, 02 Jun 2026 15:17:53 +0100 Subject: [PATCH v2 2/6] rust: ptr: use `match` instead of `unwrap_or_else` for `build_index` Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260602-projection-syntax-rework-v2-2-6989470f5440@garyguo.net> References: <20260602-projection-syntax-rework-v2-0-6989470f5440@garyguo.net> In-Reply-To: <20260602-projection-syntax-rework-v2-0-6989470f5440@garyguo.net> To: Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Abdiel Janulgue , Daniel Almeida , Robin Murphy , Alexandre Courbot , David Airlie , Simona Vetter Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1780409881; l=1018; i=gary@garyguo.net; s=20221204; h=from:subject:message-id; bh=hr04Tt1QZvtf3ZStThFAxQPZm/WEXIYt5H2AG4sQ6kE=; b=nDRSXfcKJlczdRlmRmi24bZpHI+UVay7eR/s256qMwh8egQuYJ1A+HKu3PlnF0DID4D1ISLNy i1+rfgReU4nAf7dYd8/DQffByMPFi8/+raTT0KXMe3wJ/1jGIf1Sec0 X-Developer-Key: i=gary@garyguo.net; a=ed25519; pk=vB3uIX95SM4eVrIqo1DWNWKDKD2xzB+yLLLr0yOPYMo= X-ClientProxiedBy: LO4P123CA0539.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:319::10) To LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:488::16) 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: LOVP265MB8871:EE_|LO2P265MB3626:EE_ X-MS-Office365-Filtering-Correlation-Id: 27848689-0b6f-4330-71cf-08dec0b1c1a6 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|10070799003|376014|7416014|1800799024|22082099003|18002099003|921020|56012099006|3023799007; X-Microsoft-Antispam-Message-Info: R865n9AWB9niYLZkWGAL6g8zHVhF3RvmR2lU+WjJ4jV+4ISvsylAFDTy8d7RRC80TKZu19fbW/6kOXoEcA1Ex1If8xpFFyIZZmdOdCRfK1/fZmMNTa8ID4Okp/FPqLuI2tP2L6rAigxjyqhhrZC5Zz5kHZNJ5kiQmzPL6YM+zbYiPbde4ftBNelvZL9FXm+RPXRAtLJDGFBCk+6uCbOgqdYnyaYxUUNZH+MpRD9klFeHjXeLbzm4eUi3TNe5DWQBd1OBsUg7qEX0z6i7weakWjSbKb8ooDc79eWPNYuNH8fmAJUjRKnVh7+bX0NdUlgUWiy+/G3SZ5eOCn+/LlAGjhBDlJxE1LB5rTRxHBj4N4rRAba6U9tDnmk/0eU82KjfyJodEmvbGul37yr7L6jHiKzF0VUU9/Q1su0K5BL7wZB/CMUijz2xYMcd3Jqe6zbiYEhtJNSZI3qxTLGZC1p2Vs59U/6PpwubpW3mmGlsZiSHEzW76or4u3I7rjiOa3onKyn6Rj+2inHNcZVxcoTWYIourZSy9zSVqrsLtj7rT4x9SCvaG8PzLcJ+dtHRjiSsvO+Rdk0jXd6uRgphsclSOE9/RYnmO3JDAwjhO/LMMI8OFFgmo3M+7ecGJEKWCH+TusSe0Sbic63+Et0Gbdi96DhQ8WeX0Ho7yfif/zrhlxm/HYhVaZQb9/oLOt6ikibYwEkcWcfk4cJW6hsUoPOD2wXpOlXEgeufK/VxuOASdzig15586Eu7x3Bv+cJXyhiN X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(10070799003)(376014)(7416014)(1800799024)(22082099003)(18002099003)(921020)(56012099006)(3023799007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?a1AwUE8xT0hsV3ZNTjQrYW9GZXQwMFFJVHR2dXVESFEzQzVVV3RHWG1UR2Jq?= =?utf-8?B?a3JkLzBhQlUxdXpJM2UrTGNHY2NrVUIzZWxoT0JSaEUrdE53bUNlMTVzZE9u?= =?utf-8?B?ZzIySGc5WUpxelgwS3VwL2dUb3RKVHF1b2ltRXMzM2QyeHd2QlhVMFYrNWxq?= =?utf-8?B?WERxOXU3ejBXZkY1QnNTa2t1amJDSFJMdEpadmRzQXN5V3VsUzJEcVA1clQ4?= =?utf-8?B?cGd2MmxNUUdYa0tRczVabmpSOVJXTC8reUZmcGkyNzQyM2lzY2p5b3JkbGpI?= =?utf-8?B?WU5qZnBSalpVaEVOWUFSeGlWOFRBb2g0NHBEdjNkOEVsK0RuVVErakxmblRz?= =?utf-8?B?Vkh0eVJ0bXViV2N3VUJTcUo1Mm5rRndXTnhraVdDVmNWemhtQXNmQzZUV3pX?= =?utf-8?B?S2M3OFhaamhOUnM4Zkd0S294MmlkdlVYRXZmaDlUOFVTQlVPc0xwdURlSlVv?= =?utf-8?B?ZXIybTlOOSticlhWc1hiRk5LRW9HRS8wcVVPd1F3UHB3ajlOOFl2U3pMdDlK?= =?utf-8?B?Z2E0aDFoK3I5eU9yajRDanpmaHJUbGxwZEhhTWVPbGhTWVVVazA1VW4vSUpt?= =?utf-8?B?bkRhN01NVW0rWFhtamNtcC9ncmtvU05mK2VDd0c5UWYrM01DbG1HT0Y3aTJC?= =?utf-8?B?dHhEQW9sK2hXai91ZzV0UGRnWUJlY1EyRE5BWk9nb3E4aDRSa053MnUybmpM?= =?utf-8?B?NzUvM1Q2N2RDTGd1cGZlSXU5WGdMdWMraTkvcEhqRkZiMTZwYTViNDVVZ21H?= =?utf-8?B?UXVqT1N4OGgzNzFBNUxhaHpEQlVXYUp3LzZrQTlvenJJNTFCd1o2T2VjRFFs?= =?utf-8?B?Nm5DaEFhK2tGOUV1aUo1c2g5NERUWTh1Vldmc28zQm80NFlrd2JMNEJCN3Y5?= =?utf-8?B?cXBHakY0dFVsTWlPVUkvT0Q5MDBvRDAzNTdod2pYUWt2WmdGVlRjbmdzUUgw?= =?utf-8?B?WFdSZ0hGZGV3SmdDQ3NmSzhRL1NIRlozL2x1QXd1NmtGb3NqN3l6c0RwNTZV?= =?utf-8?B?c2lHNkVCK1hCSTdqRTBRRTFVWWQ1UHdWUG9HaTFJUFNkOVlRZ05yZWp6SHNT?= =?utf-8?B?YXlHbzVUcjVmVTAxYURYMTdTaS9ueWNUeWxCK2E0bDlHbTd5MjlBY3Z6Tjg0?= =?utf-8?B?cXM0enVVbjRERjYwc2ZQQk5Xd0pGeTVUNy9UMVFjbW1YQTNrajhMT2NRaEt5?= =?utf-8?B?b0ZuQitWbkxuMnJpZVR0Qy9SNFhPd2w0WlFxdng5MUo5cXdSakVxS2tuVlB0?= =?utf-8?B?d0dpc2duTk96NGx5R1FIUS9VcE0wL01nSlczcVBLWUhZL2ZKOStYd2xyN3N6?= =?utf-8?B?bkExdjA1ODlOcUgzRHpDVlkwdXNVSDd5cmlmeFYreXByd3oza0lsbU1PbDN1?= =?utf-8?B?Vk5pUE5iOGFVMk1nbnA5cFVnWTZZT3JvNFU4Nm8xeWNOYUZ0SE9wVm9oNmVH?= =?utf-8?B?SzhIVi9lRTBnNFE4K0hxeFc2OGs3WUVoMnNPdVE1Z3pMc2lSdmdmT1ExY2dG?= =?utf-8?B?VnBMTjJCK0tLU2FyaVJzb29mK3R6d2R4S1dVMGJLblBEZHVkalZ6eURBakl0?= =?utf-8?B?N1NnVXhHSzF3ZVVEZXErVUhiOHFQVnFTalhzTGY5OU05YUFmbHlCMEgvWVRr?= =?utf-8?B?UnFCdklyZjU1MjNLZXYxNzI5QWluc0dCQTFsVWpPSjU3dFNORHB3TXhjOG5s?= =?utf-8?B?UGRXZ0pjb3FNaEFyaHFReXdBa1hSNitPNklaUjFyNEN1TFlsZFhxcFdQQktG?= =?utf-8?B?OTh4dklhMmJJV2hRaXp5dUdyV2t2aTVjR2J6T1Z1WXZWWGZoMlpSaHJ5TVlp?= =?utf-8?B?OHBJNmRacWRIcmp2aHJ6Z1F4Q2RDRHB0cC9GZXBSZEVxb2ZhVThaR0NoNzNS?= =?utf-8?B?RkUxRXIwRWg3S2pEN0l1T0xLT3FqUFpBbWNrcUZ4MDNzMmFqQlUwc0ZKZ2VP?= =?utf-8?B?MGppT1VKY3NweWhoaVVBL3J6aWtoSzhiNG5uOEROMlRnZThTQ09sdWFjVWRp?= =?utf-8?B?THd6Z2gyaHRoVVFoa1RWSG5SVnJYQTZCdE9ZcTNaZ1M3YW1UUHZKekg0NVdE?= =?utf-8?B?ZnZnd0lhZFlLd2xiZ0cxMUlNQkVJTGRtV3NMc3VMVTN1cnlQNlJRT1N2b0Ez?= =?utf-8?B?UnBkK1VlbzFLdGMza2tjaDArVkRyc2Z0N255SWJOQnpITTlMZWF4b1RTeThK?= =?utf-8?B?WXM4WWhRenZQRlBwTUNJVWk2a3dTN3ZrWnY4MVFDeVdJTWJMMWpNMlFJN0gw?= =?utf-8?B?ajVzQkVCbjVrOXg3U1kweGQxVUg5d2dzNWI5Wkk5amY3SzI2dTkzdjAxaytN?= =?utf-8?B?MHZ2TDJFbHptSGl3M0V3a1VxdTQ3b1hGL2FuOVJmMzhtang2Y2hrdz09?= X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: 27848689-0b6f-4330-71cf-08dec0b1c1a6 X-MS-Exchange-CrossTenant-AuthSource: LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jun 2026 14:18:02.4646 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bbc898ad-b10f-4e10-8552-d9377b823d45 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vhPNhPpX/S5rgTc/MBp14RBu2Z+uS9FbupG0uWV3rCd90p4mJ/6Y3Q4TNyVCR1RP6DECw5dx4tR5YiG31YEXLg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO2P265MB3626 Use `match` to avoid potential inlining issues of the `unwrap_or_else` function. Suggested-by: Alice Ryhl Link: https://lore.kernel.org/rust-for-linux/aeCKlut-88SbNsyW@google.com/ Signed-off-by: Gary Guo Acked-by: Danilo Krummrich Reviewed-by: Alexandre Courbot Reviewed-by: Alice Ryhl --- rust/kernel/ptr/projection.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/rust/kernel/ptr/projection.rs b/rust/kernel/ptr/projection.rs index fbe172e493c2..1b54616c6cbb 100644 --- a/rust/kernel/ptr/projection.rs +++ b/rust/kernel/ptr/projection.rs @@ -45,7 +45,10 @@ pub unsafe trait ProjectIndex: Sized { /// Returns an index-projected pointer; fail the build if it cannot be= proved to be in bounds. #[inline(always)] fn build_index(self, slice: *mut T) -> *mut Self::Output { - Self::get(self, slice).unwrap_or_else(|| build_error!()) + match Self::get(self, slice) { + Some(v) =3D> v, + None =3D> build_error!(), + } } } =20 --=20 2.54.0 From nobody Mon Jun 8 04:25:46 2026 Received: from CWXP265CU009.outbound.protection.outlook.com (mail-ukwestazon11021080.outbound.protection.outlook.com [52.101.100.80]) (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 19F273EAC8D; Tue, 2 Jun 2026 14:18:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.100.80 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780409890; cv=fail; b=tzQzUXIf9wupjjE2M8SV+aZvYyUXFNYZgTKPOTUbRq5GUsEUf5I0fMnY9IeawjxV6s2V15cv015thUQRvfedLrxeP/TvsrSNLEEBlpiotm/7hcYPpvkKEX4QWHplqIVjaYcJn/rsZvTwHASDRCakgwrPrKlfcOfnjcBKndPoV0k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780409890; c=relaxed/simple; bh=aj3FeKvKcEc1vGR+Niu8f/ESQZCTUXhY9uiOqqrE1UA=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=JzqNjG/xynSVVQjeT4BYYEqXBZbwZ1hX3wh42H/ytuyuMqMB82YWdTuh5Wcq3E8PiqLOE+RzhyvyT6BUzBUbB0QaxyiBqXY6xkGocbTZsKrVtLyOfJAl6OAlmb+xtkNz158Jf1cytMZt4KnpjNMhxPFnIOD1iDhNBf3A7UAjQ1s= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=garyguo.net; spf=pass smtp.mailfrom=garyguo.net; dkim=pass (1024-bit key) header.d=garyguo.net header.i=@garyguo.net header.b=F/WGxHPP; arc=fail smtp.client-ip=52.101.100.80 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=garyguo.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=garyguo.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=garyguo.net header.i=@garyguo.net header.b="F/WGxHPP" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TxfPPYV9wX0C40drTnBUpaSjhPYuZ4AQPaEF1uOv6/T6+8fe6rQ+VG0kCpPh/PSoiBQEZm/5bgpXq2YyB6nMU+QRLL3q+2mtX0743S6BcH6dxv6DmAwtRIydFZAnqM4nDU7J9clZVGz+xqBn22I21Oo3thkUhMGDvy3oSwiNoynihgAEbdCfShYJRt4j/EaKPxdw688+bETeFLWHAVb2Jt0TbApUPFbpookeUjjFGLcvFA8k9YP/rHJoBdDWLRYcniGz6U7KtAevgCQ5i9eP2B8dAACzvxfJpZsOUYp2iDuPilmRwz3jxxAISEtHacr8bn9FNTB5lMajR0U2ucPbmQ== 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=0/9OJSQmC538YiQWyHWAepxZMctulom/DGqoo7YlVVE=; b=Ox9uVy3ICZil3B5r1EWKa1z+KwZywoTFUvXvlkKp9pfBDKFkC/847r7Df/qsMzv2qpu0Av2qm4QREu7YiBmoG/f2Vg7QuqGjrs6QfPqH5aOMxJ2+nbB2leo38i23Afy1mIpKxaB/FudQQBT4Wisl2N+7npw+WBuixV5cciT4OV1QIO+AYLoPYWBiuANPw6vIOLRW08w1Prl1V7hK7waEocXcOy1jt+OEj5pm2o/CjMJe0cZ+RVOrF7CEcUKiBLCiMALKuKJCuO+gNDE5nAvZSIdv6ilPhnLHK8Hvzzj/MptyAF6qBP53fJlN6B4UT0KjTEe0nIer9fHQ7kxn06ms5Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=garyguo.net; dmarc=pass action=none header.from=garyguo.net; dkim=pass header.d=garyguo.net; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=garyguo.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=0/9OJSQmC538YiQWyHWAepxZMctulom/DGqoo7YlVVE=; b=F/WGxHPPsO+8xrRWCX5sxyn4Ec2yW0tSlziY+zNoXfwqTVg8n8OoJ6Z5Qllu8fdepJSLX470MMJMO6VXpJVH6kb73j/ejshqFM7eDav3jet0w4a8K6q26E+JAf0u1rZCFFWUu0hXjHqmetUZ1hkbuLWDiszuxTcZIAMwk18VptQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=garyguo.net; Received: from LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:488::16) by LO2P265MB3626.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:1b5::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Tue, 2 Jun 2026 14:18:02 +0000 Received: from LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM ([fe80::1c3:ceba:21b4:9986]) by LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM ([fe80::1c3:ceba:21b4:9986%4]) with mapi id 15.21.0092.006; Tue, 2 Jun 2026 14:18:02 +0000 From: Gary Guo Date: Tue, 02 Jun 2026 15:17:54 +0100 Subject: [PATCH v2 3/6] rust: ptr: add panicking index projection variant Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260602-projection-syntax-rework-v2-3-6989470f5440@garyguo.net> References: <20260602-projection-syntax-rework-v2-0-6989470f5440@garyguo.net> In-Reply-To: <20260602-projection-syntax-rework-v2-0-6989470f5440@garyguo.net> To: Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Abdiel Janulgue , Daniel Almeida , Robin Murphy , Alexandre Courbot , David Airlie , Simona Vetter Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1780409881; l=11093; i=gary@garyguo.net; s=20221204; h=from:subject:message-id; bh=aj3FeKvKcEc1vGR+Niu8f/ESQZCTUXhY9uiOqqrE1UA=; b=3kGhrx1x43fdMWlorEifAyGjw9r3F37oGIgiFlrXWyf2pXAXwdf4KX8IM/bt9wPSSH9gxbXpa kHzwWn68HExBRRsXI+ZXZfVRLnCdKwqs90DHc6VOK4dpWMbzrROBUap X-Developer-Key: i=gary@garyguo.net; a=ed25519; pk=vB3uIX95SM4eVrIqo1DWNWKDKD2xzB+yLLLr0yOPYMo= X-ClientProxiedBy: LO4P123CA0539.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:319::10) To LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:488::16) 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: LOVP265MB8871:EE_|LO2P265MB3626:EE_ X-MS-Office365-Filtering-Correlation-Id: 4223d8a9-deeb-49f4-704b-08dec0b1c1df X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|10070799003|376014|7416014|1800799024|22082099003|18002099003|921020|6133799003|5023799004|56012099006|3023799007; X-Microsoft-Antispam-Message-Info: 8tWhrurZkpi5OQtgFO1xJ0al0A5xbsiuhz14Oow9RrUYCttWCkQz8DzJ+t7BUquMRalCbs6D7NWcwgbH2Op+9z3EoO3Zfav4biD2EcX1VOhGCPe/XUoiGqaD5fHX/E8GAGMpTSeEY2EsJC1S48d1KwPiWDjtEMkm3yUem3seeWScBXerEbG7MfggdxPXtkhGH1gSf45BsDKbXdcVdG/LDHOQuxekAJTGhrNDBWO9gxOb0ykK1aE1yiBR4y1kYiVnic8yqnCjX+qSLaKGJv54SdcOso6Au5YHvk/Kv6B/HZ8TCo+Pvi31XPdLxtmk1TZz7Bk/csYq9bPk1P9ZsiaWf7J/XRwvGEukHZSKIQTXuBE0Z7KuUT5ei02MYLNnPT5Ivsj2jcpqIQ81tbODtClVY5+nziyv19m9hkQ50pbKatgPmoZfg+ocn+4JAi49dgiJtCLt2NQzhnsuAjhQYBJpep7QpFcA45WMZVdee51vpqI+pT8vKG/10rd23BMpvrFr5xw/o1CHZ0QrITQ1X5ukH3kQJiKpJ0FcsYm+YiTQs0c2dvIW4sJD2Xo6yaGP+UzwQ+loHEzlIg5T9MVCP1ZcphaIlpFMYTxgP/2I9GAtvTXPzFPS4gky928pC43SpATnQ8Gnrzs3NM7/RjX75I/p9dg2k7hulfhCUovJs8cTpirxXk5XOhkfdRwQsZDU1qiB1fdl2bqRMgnBBFMe/3croI+p6UZx4rLCbC1TVIKDa5g= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(10070799003)(376014)(7416014)(1800799024)(22082099003)(18002099003)(921020)(6133799003)(5023799004)(56012099006)(3023799007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?YTFsNzJLZVNIZnp0Vmh0ZlBlZVlZMFRsdzg4UzRkMFF1MmQrS1ptUDV4Z1Vi?= =?utf-8?B?QmwvOFJDMXIyTGhSZ3lLZDRLT3Y5bmw0eG1UK1dhSzVBaXN5cVA4Zm5yMmln?= =?utf-8?B?d3hxcjBhazBIZXNhUzF0MmlWN1B1TFlVZkVvaEcwMm01elpLMmdTQmhYOCtG?= =?utf-8?B?aHNsVkJ0MW9qQXU5S0I4MEJBeVdoTzMrMGNaRzd0d3hqbkVyT2srWThWeUlN?= =?utf-8?B?Qk15N054Y1pURllLWG14UzBjVUdOZ1BVVUcyOWpoZDNHRjdQd3pwQTEzYmFq?= =?utf-8?B?T0tMMWZpRVFHRkd1bi9vaE5xd0hBeXdRNlNyRlRJQ1BoL1JkcUM4RzV6R1lD?= =?utf-8?B?VTFEREFHcC9CQkFZZFNtM2V4TnRsSC9LNC9YK1FMemI3Z0ljWWt4NWpFTDFr?= =?utf-8?B?THJoaUhoNW5Bb3hNa1ZGQjV1aHBBVjQrNkxlNUw5UWU4U3F2dVNyM0UyVlVi?= =?utf-8?B?RFFRUnJGcWpqT0p2QWN6em1hNWozelBwdGR6UUxFVEoyQ0owU1JWRDRTd0I4?= =?utf-8?B?ZzMxcHZjQ1JGdHZlcmtqTWx6ZjcrUkxWbU0rQWZJMFdONDRpYkpUZ2lzcWY0?= =?utf-8?B?YjJuOXNNaEoxa0E1NWNEVWlqMEtwMGxhN3pJZ2lqWFdjbE8yNW1vcjRYYlZo?= =?utf-8?B?c1YrZnJMZDgvRWY0akJZc1FqVVYrNFZyS3VmU3ViM21JaE5Ea0VOS2dPNWY5?= =?utf-8?B?V0JYSjYxdTdwQmg5cUdUVlcxTDJDaTdhanJ3SExCdXJVekNEbEg5Y0p5Rm9F?= =?utf-8?B?R3Y1YlB6N1ZxZ0Z3c2luSFRrbllqa0wvbjM4ZzRMTWl1dGluN3ZVT1hwNzdn?= =?utf-8?B?RE05RUw0ZGN3VWswN0p4THRBeldBTk9JS280MkVGeWV1VE5zRXJsWm0rUWdZ?= =?utf-8?B?ZUYwUmxmdUJhZVRjMWorOE5Yak8rZmh3dklwUGR1QU9vWnRGcnJ0THJSZEpB?= =?utf-8?B?WDA1UXZwY28xQUU4bkNJMk1EUU5NNXJ1SGZsT0tXcHc2cVVrVnh6d04wZG1T?= =?utf-8?B?b2QzTWkyM1pLZkd6TzFES0ZVdGk5Q1JVaUtBVjBidXA2L1R1cWxCNW5YZjNN?= =?utf-8?B?UUtESWJiQ3QwRGZQa2ZmaDBYeWdYZXg0N2cxQllERFJPWlpQTjVUUDFCSWJ6?= =?utf-8?B?WFJ3dkxvbUg1WnBDeTJTMmVmTWd2OTZRdmpJN20yMC9aaVd1Zm42S3RLN3g4?= =?utf-8?B?VG1hQTF6SUpVTWFaOFhleGUxcWx6YVljWGlyVXNkQ2dzejc4eU0vdGNlTWdl?= =?utf-8?B?REdqQVM3OTRMZkxhb0k1KzVuSkw3NlIxM2kxakY3VkNIQjZ2ckhYY2pqcm5H?= =?utf-8?B?MVVGb3pKdlJLTUgzMDNVWXRIN1VKT3FPQ0xJaEg5UUF2L2FYQTU2S0RPTVRD?= =?utf-8?B?SXRCWGQ1amF3NEg5SnVMUVhtbmhCWDNOTXdwU2tnb2crTjU1U0RRYkFFTXpV?= =?utf-8?B?K1VHemxmaEZkYUt5UENnMG56dzFEN3o5cjB6VWpkK2JwUnhxWFh5WFNnQ1Rq?= =?utf-8?B?bWpEcFB0aFh5N2pzbTVEY0J0WkdvQVZGT3ZKc292S0M4OFNXVDk4bkxmckVJ?= =?utf-8?B?VWs1Q2phNHZyZlhuNXhvOVV3QnZiejlMeXBCTHB5UDhwVEZIeitXczlYTmty?= =?utf-8?B?QVp0UTUxNmE0VTQ3eXIxZmk0b1Jjam92ZlNuYTJ0cjVsRFNKMEo2c2ZJODFh?= =?utf-8?B?eWRrYjRZSWFtRGwvNkxuNUpZbnRTc0wzYTZRRUgxUHJ0dVBxK2R1TmlFWkx6?= =?utf-8?B?cFRIaVRoY3ptVmJNVTF0cTRXUWdNdXVyY0lKYWtjRHRSWUVWbG5RcmV1Sy9Q?= =?utf-8?B?cXo0M01ldFdFMDlrYkFWVXlzK0JDRnBtTnlxenp5VmpWQWtRc1d0TEJkYjFI?= =?utf-8?B?QWJiZk5taHNhMEFNa3hBTnk1cEJqWkxtakZvV3N1Z1NHMkJvYXdKL3hLSGZT?= =?utf-8?B?QjFxcHdBRFBsZGpMeFZpZ1lhRnhIK3JCcXdNMkR5L0RlbnEvNlVWU1FOd3ZV?= =?utf-8?B?TGNqeE45V1FoL0hxUTN4M0NySFlTMHF0NjBROGJOMHJPay84ajVSN2J0L2ZZ?= =?utf-8?B?SEhsblZWZVFZbTJKTHhNK21qeTBpaEdGL1RqZzZkNG1QTlJVNWl6U0s4OTFE?= =?utf-8?B?UlZKNUNDajYwWFhnZkQzQVpVR2NBRStTOCtUOVJ0UDJiZzV0YktqaGp0SGdn?= =?utf-8?B?OHM4eUpDMjhEWFFnZGt3OFNTUS9tRVVobXJjU1pwRjNiY3FETW12bEM5enFQ?= =?utf-8?B?VmpEL1FzLzc0Q2ZiZnpOTHRZbTVMRnhGVU5ZZGxrbDF1ZzBjZ2hnVmkvNUJu?= =?utf-8?B?N0ZQR09mekViWXhjLzdXeEdiaGtvcUZqWlpsdDA3ci8ydEQvYWlhUT09?= X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: 4223d8a9-deeb-49f4-704b-08dec0b1c1df X-MS-Exchange-CrossTenant-AuthSource: LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jun 2026 14:18:02.8180 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bbc898ad-b10f-4e10-8552-d9377b823d45 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: DryRsQPPr30X/H/Kh+M3Caq53eQuUAMrEIjNmvk6sB4PQFDnmCoRRfzN0f8YR/NFSQDtj2IwJafOit7qA1SGXg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO2P265MB3626 There have been a few cases where the programmer knows that the indices are in bounds but the compiler cannot deduce that. This is also compiler-version-dependent, so using build indexing here can be problematic. On the other hand, it is also not ideal to use the fallible variant, as it adds an error handling path that is never hit. Add a new panicking index projection for this scenario. Like all panicking operations, this should be used carefully only in cases where the user knows the index is going to be in bounds, and panicking would indicate something is catastrophically wrong. To signify this, require users to explicitly denote the type of index being used. The existing two types of index projections also gain the keyworded version, which will be the recommended way going forward. The keyworded syntax also paves the way of perhaps adding more flavors in the future, e.g. `unsafe` index projection. However, unless the code is extremely performance sensitive and bounds checking cannot be tolerated, the panicking variant is safer and should be preferred, so it will be left to the future when demand arises. Signed-off-by: Gary Guo Acked-by: Danilo Krummrich Reviewed-by: Alexandre Courbot Reviewed-by: Alice Ryhl Reviewed-by: Andreas Hindborg --- rust/kernel/dma.rs | 3 ++ rust/kernel/ptr/projection.rs | 96 ++++++++++++++++++++++++++++++++++++---= ---- 2 files changed, 84 insertions(+), 15 deletions(-) diff --git a/rust/kernel/dma.rs b/rust/kernel/dma.rs index 8f97916e0688..ff69739eae35 100644 --- a/rust/kernel/dma.rs +++ b/rust/kernel/dma.rs @@ -1207,6 +1207,9 @@ macro_rules! dma_write { (@parse [$dma:expr] [$($proj:tt)*] [.$field:tt $($rest:tt)*]) =3D> { $crate::dma_write!(@parse [$dma] [$($proj)* .$field] [$($rest)*]) }; + (@parse [$dma:expr] [$($proj:tt)*] [[$flavor:ident: $index:expr] $($re= st:tt)*]) =3D> { + $crate::dma_write!(@parse [$dma] [$($proj)* [$flavor: $index]] [$(= $rest)*]) + }; (@parse [$dma:expr] [$($proj:tt)*] [[$index:expr]? $($rest:tt)*]) =3D>= { $crate::dma_write!(@parse [$dma] [$($proj)* [$index]?] [$($rest)*]) }; diff --git a/rust/kernel/ptr/projection.rs b/rust/kernel/ptr/projection.rs index 1b54616c6cbb..e46877a208d9 100644 --- a/rust/kernel/ptr/projection.rs +++ b/rust/kernel/ptr/projection.rs @@ -26,14 +26,14 @@ fn from(_: OutOfBound) -> Self { /// /// # Safety /// -/// For given input pointer `slice` and return value `output`, the impleme= ntation of `build_index` -/// and `get` (if [`Some`] is returned) must ensure that: +/// For given input pointer `slice` and return value `output`, the impleme= ntation of `index`, +/// `build_index` and `get` (if [`Some`] is returned) must ensure that: /// - `output` has the same provenance as `slice`; /// - `output.byte_offset_from(slice)` is between 0 to /// `KnownSize::size(slice) - KnownSize::size(output)`. /// -/// This means that if the input pointer is valid, then pointer returned b= y `get` or `build_index` -/// is also valid. +/// This means that if the input pointer is valid, then pointer returned b= y `get`, `index` or +/// `build_index` is also valid. #[diagnostic::on_unimplemented(message =3D "`{Self}` cannot be used to ind= ex `{T}`")] #[doc(hidden)] pub unsafe trait ProjectIndex: Sized { @@ -42,6 +42,9 @@ pub unsafe trait ProjectIndex: Sized { /// Returns an index-projected pointer, if in bounds. fn get(self, slice: *mut T) -> Option<*mut Self::Output>; =20 + /// Returns an index-projected pointer; panic if out of bounds. + fn index(self, slice: *mut T) -> *mut Self::Output; + /// Returns an index-projected pointer; fail the build if it cannot be= proved to be in bounds. #[inline(always)] fn build_index(self, slice: *mut T) -> *mut Self::Output { @@ -66,6 +69,11 @@ fn build_index(self, slice: *mut T) -> *mut Self::Output= { >::get(self, slice) } =20 + #[inline(always)] + fn index(self, slice: *mut [T; N]) -> *mut Self::Output { + >::index(self, slice) + } + #[inline(always)] fn build_index(self, slice: *mut [T; N]) -> *mut Self::Output { >::build_index(self, slice) @@ -85,6 +93,16 @@ fn get(self, slice: *mut [T]) -> Option<*mut T> { Some(slice.cast::().wrapping_add(self)) } } + + #[inline(always)] + fn index(self, slice: *mut [T]) -> *mut T { + // Leverage Rust built-in operators for bounds checking. + // SAFETY: All non-null and aligned pointers are valid for ZST rea= d. + let zst_slice =3D + unsafe { core::slice::from_raw_parts::<()>(core::ptr::dangling= (), slice.len()) }; + let () =3D zst_slice[self]; + slice.cast::().wrapping_add(self) + } } =20 // SAFETY: `get`-returned pointer has the same provenance as `slice` and t= he offset is checked to @@ -103,6 +121,18 @@ fn get(self, slice: *mut [T]) -> Option<*mut [T]> { new_len, )) } + + #[inline(always)] + fn index(self, slice: *mut [T]) -> *mut [T] { + // Leverage Rust built-in operators for bounds checking. + // SAFETY: All non-null and aligned pointers are valid for ZST rea= d. + let zst_slice =3D + unsafe { core::slice::from_raw_parts::<()>(core::ptr::dangling= (), slice.len()) }; + _ =3D zst_slice[self.clone()]; + + // SAFETY: bounds checked. + unsafe { self.get(slice).unwrap_unchecked() } + } } =20 // SAFETY: Safety requirement guaranteed by the forwarded impl. @@ -113,6 +143,11 @@ unsafe impl ProjectIndex<[T]> for core::ops::RangeT= o { fn get(self, slice: *mut [T]) -> Option<*mut [T]> { (0..self.end).get(slice) } + + #[inline(always)] + fn index(self, slice: *mut [T]) -> *mut [T] { + (0..self.end).index(slice) + } } =20 // SAFETY: Safety requirement guaranteed by the forwarded impl. @@ -123,6 +158,11 @@ unsafe impl ProjectIndex<[T]> for core::ops::RangeF= rom { fn get(self, slice: *mut [T]) -> Option<*mut [T]> { (self.start..slice.len()).get(slice) } + + #[inline(always)] + fn index(self, slice: *mut [T]) -> *mut [T] { + (self.start..slice.len()).index(slice) + } } =20 // SAFETY: `get` returned the pointer as is, so it always has the same pro= venance and offset of 0. @@ -133,6 +173,11 @@ unsafe impl ProjectIndex<[T]> for core::ops::RangeF= ull { fn get(self, slice: *mut [T]) -> Option<*mut [T]> { Some(slice) } + + #[inline(always)] + fn index(self, slice: *mut [T]) -> *mut [T] { + slice + } } =20 /// A helper trait to perform field projection. @@ -211,9 +256,12 @@ unsafe fn proj(_: *mut Self, _: impl FnOnce(*mut Se= lf) -> *mut F) -> *mut F { /// `kernel::ptr::project!(mut ptr, projection)`. By default, a const poin= ter is created. /// /// `ptr::project!` macro can perform both fallible indexing and build-tim= e checked indexing. -/// `[index]` form performs build-time bounds checking; if compiler fails = to prove `[index]` is in -/// bounds, compilation will fail. `[index]?` can be used to perform runti= me bounds checking; -/// `OutOfBound` error is raised via `?` if the index is out of bounds. +/// The syntax is of form `[: index]` where `flavor` indicates the= way of handling index +/// out-of-bound errors. +/// - `try` will raise an `OutOfBound` error (which is convertible to `ERA= NGE`). +/// - `build` will use [`build_assert!`](kernel::build_assert::build_asser= t) mechanism to have +/// compiler validate the index is in bounds. +/// - `panic` will cause a Rust [`panic!`] if index goes out of bound. /// /// # Examples /// @@ -231,17 +279,21 @@ unsafe fn proj(_: *mut Self, _: impl FnOnce(*mut S= elf) -> *mut F) -> *mut F { /// } /// ``` /// -/// Index projections are performed with `[index]`: +/// Index projections are performed with `[: index]`, where `flavo= r` is `try`, `build` or +/// `panic`: /// /// ``` /// fn proj(ptr: *const [u8; 32]) -> Result { -/// let field_ptr: *const u8 =3D kernel::ptr::project!(ptr, [1]); +/// let field_ptr: *const u8 =3D kernel::ptr::project!(ptr, [build: 1]= ); /// // The following invocation, if uncommented, would fail the build. /// // -/// // kernel::ptr::project!(ptr, [128]); +/// // kernel::ptr::project!(ptr, [build: 128]); /// /// // This will raise an `OutOfBound` error (which is convertible to = `ERANGE`). -/// kernel::ptr::project!(ptr, [128]?); +/// kernel::ptr::project!(ptr, [try: 128]); +/// +/// // This will panic in runtime if executed. +/// kernel::ptr::project!(ptr, [panic: 128]); /// Ok(()) /// } /// ``` @@ -251,7 +303,7 @@ unsafe fn proj(_: *mut Self, _: impl FnOnce(*mut Sel= f) -> *mut F) -> *mut F { /// ``` /// let ptr: *const [u8; 32] =3D core::ptr::dangling(); /// let field_ptr: Result<*const u8> =3D (|| -> Result<_> { -/// Ok(kernel::ptr::project!(ptr, [128]?)) +/// Ok(kernel::ptr::project!(ptr, [try: 128])) /// })(); /// assert!(field_ptr.is_err()); /// ``` @@ -260,7 +312,7 @@ unsafe fn proj(_: *mut Self, _: impl FnOnce(*mut Sel= f) -> *mut F) -> *mut F { /// /// ``` /// let ptr: *mut [(u8, u16); 32] =3D core::ptr::dangling_mut(); -/// let field_ptr: *mut u16 =3D kernel::ptr::project!(mut ptr, [1].1); +/// let field_ptr: *mut u16 =3D kernel::ptr::project!(mut ptr, [build: 1].= 1); /// ``` #[macro_export] macro_rules! project_pointer { @@ -283,16 +335,30 @@ macro_rules! project_pointer { $crate::ptr::project!(@gen $ptr, $($rest)*) }; // Fallible index projection. - (@gen $ptr:ident, [$index:expr]? $($rest:tt)*) =3D> { + (@gen $ptr:ident, [try: $index:expr] $($rest:tt)*) =3D> { let $ptr =3D $crate::ptr::projection::ProjectIndex::get($index, $p= tr) .ok_or($crate::ptr::projection::OutOfBound)?; $crate::ptr::project!(@gen $ptr, $($rest)*) }; + // Panicking index projection. + (@gen $ptr:ident, [panic: $index:expr] $($rest:tt)*) =3D> { + let $ptr =3D $crate::ptr::projection::ProjectIndex::index($index, = $ptr); + $crate::ptr::project!(@gen $ptr, $($rest)*) + }; // Build-time checked index projection. - (@gen $ptr:ident, [$index:expr] $($rest:tt)*) =3D> { + (@gen $ptr:ident, [build: $index:expr] $($rest:tt)*) =3D> { let $ptr =3D $crate::ptr::projection::ProjectIndex::build_index($i= ndex, $ptr); $crate::ptr::project!(@gen $ptr, $($rest)*) }; + + // For compatibility + (@gen $ptr:ident, [$index:expr]? $($rest:tt)*) =3D> { + $crate::ptr::project!(@gen $ptr, [try: $index] $($rest)*) + }; + (@gen $ptr:ident, [$index:expr] $($rest:tt)*) =3D> { + $crate::ptr::project!(@gen $ptr, [build: $index] $($rest)*) + }; + (mut $ptr:expr, $($proj:tt)*) =3D> {{ let ptr: *mut _ =3D $ptr; $crate::ptr::project!(@gen ptr, $($proj)*); --=20 2.54.0 From nobody Mon Jun 8 04:25:46 2026 Received: from LO2P265CU024.outbound.protection.outlook.com (mail-uksouthazon11021105.outbound.protection.outlook.com [52.101.95.105]) (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 4C2163EB81C; Tue, 2 Jun 2026 14:18:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.95.105 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780409892; cv=fail; b=U0dR0oKeXAsppJQZf1PO/Lkz/9BKz4+d4LUYkQ4y+8NyZoobsOe3UwjBM+3FuUMU5Wd0KTNyU3usgZgSROoP8Rtrq0FOwo1pdgXURGE89vyOHF6ATpEYWXu0VVWqovOtyqBWjwGc0g/BX1bpaxGUimo9YuLSKcwLUUKNnuFLNBw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780409892; c=relaxed/simple; bh=eRDG6w0FISL1J7oUyssmle3iwxwHtdHrnBtOIHtu7r0=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=Se5TVwZjoT31VjFUDN/1Sq5duSgDIlm66JJanIiBbHFeKeSWYeRWpKiwkNlz7bRzWui1GFEK4FyF0g6CLvC/rXwKL7xobmDBfeZzbHLV0wPKuF8wz3u4ei0Nk+OOLnvexo3bwfZvsXnH/r/IfGG3QcnyoLc4rk/PcVCkEBkt4D0= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=garyguo.net; spf=pass smtp.mailfrom=garyguo.net; dkim=pass (1024-bit key) header.d=garyguo.net header.i=@garyguo.net header.b=FQLB3WAL; arc=fail smtp.client-ip=52.101.95.105 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=garyguo.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=garyguo.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=garyguo.net header.i=@garyguo.net header.b="FQLB3WAL" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TsNA/NoUVw9K0xyFgtXx60xf4uIpblFgj7AuKcJzp7VgDK1OXsPcMde3HHb9dNc3UZSc03j+PfbTdbYH/THaodWd8ZZSH732EiZDEGlLvqta3urA5eA4DWgUtZBigCWJl9/CHM4+umWHeIOP5YFoVe185om+DsUcvHZg9VRBLp7ilqRibO64zJY4VuYBGRT/rzZoLZJW6qVjJ0HCt0m93rg9J04HskViTXyQvjSk3OXQvIQTC56R7auSJxbjS/STFuianQ0z93sgJeeu5TVW/NTN5pVi7nUMIUEAqtxP95goMSepoYuO5qQVH6qcUdEqMweOhif+RwO3Zc3JyNF0Vw== 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=amOcFwqBcNigusJB60iddNNFuPbFU0aR8/CY4+6FsHg=; b=jMC9fqBOrpcRd5gip9FcX6Osek6xI0w+Dq/04HduXuA2Y6JBGcC+5JUW8sRs26plT84gmT3urm6Y2Rpwu6WSMVV3Rx3Na5ziytEwVQMQ0y4amsjzCkAZdUvfGZi88KdAjkK/sjF8tx1ACwy2dlbvGN8yM0G22itstfH3OKj234yvVGuieoS3+yVU2GDFwZuUNXnY2J6eWs3bXkFNtCaQxFbe8ER+5KVLBl9wZhz4j73nV8/6EHvPmboFrkPlRKJpyg0IWspptjbUy13bPoO5SqeGLKk5N4P3dSjgJEq4z73qhYWl0u2hxaHSTBsG/rT2I33dc4svdacw21yYllAuNw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=garyguo.net; dmarc=pass action=none header.from=garyguo.net; dkim=pass header.d=garyguo.net; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=garyguo.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=amOcFwqBcNigusJB60iddNNFuPbFU0aR8/CY4+6FsHg=; b=FQLB3WALvVMPEvHIZjyaOUBzxw8pveA0JoEBy3G4Fm0Bgg5jOfJQVWsJ7iQpPTCOTJnVXh3BOvR8QuR2yjr25CTtiYAHPm28Dujl9SbFbY7XAyLcBpjiXcW1SGXggIPqo8J2ZKAwniwZLSq6Y5MiuMOx/H7P5HtVbT8fesJR9yE= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=garyguo.net; Received: from LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:488::16) by LO2P265MB3626.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:1b5::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Tue, 2 Jun 2026 14:18:03 +0000 Received: from LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM ([fe80::1c3:ceba:21b4:9986]) by LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM ([fe80::1c3:ceba:21b4:9986%4]) with mapi id 15.21.0092.006; Tue, 2 Jun 2026 14:18:03 +0000 From: Gary Guo Date: Tue, 02 Jun 2026 15:17:55 +0100 Subject: [PATCH v2 4/6] rust: dma: update to keyworded index projection syntax Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260602-projection-syntax-rework-v2-4-6989470f5440@garyguo.net> References: <20260602-projection-syntax-rework-v2-0-6989470f5440@garyguo.net> In-Reply-To: <20260602-projection-syntax-rework-v2-0-6989470f5440@garyguo.net> To: Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Abdiel Janulgue , Daniel Almeida , Robin Murphy , Alexandre Courbot , David Airlie , Simona Vetter Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1780409881; l=3143; i=gary@garyguo.net; s=20221204; h=from:subject:message-id; bh=eRDG6w0FISL1J7oUyssmle3iwxwHtdHrnBtOIHtu7r0=; b=bDEmQdmBwzFjNJd3dT6mVlNN0oU21+/fr/Qaia5keIGW9AiHzyXoyD4X+CxKJP5JDsO191uhc R5Q/stAIC/OCy6wmv5r1Ekxn0SG7wzra2LQd6Ubds4o7VeFspfIKPW/ X-Developer-Key: i=gary@garyguo.net; a=ed25519; pk=vB3uIX95SM4eVrIqo1DWNWKDKD2xzB+yLLLr0yOPYMo= X-ClientProxiedBy: LO4P123CA0539.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:319::10) To LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:488::16) 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: LOVP265MB8871:EE_|LO2P265MB3626:EE_ X-MS-Office365-Filtering-Correlation-Id: 66bba71d-83ec-438f-cc35-08dec0b1c215 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|10070799003|376014|7416014|1800799024|22082099003|18002099003|921020|56012099006|3023799007; X-Microsoft-Antispam-Message-Info: obKb9TOl3i8RWKAjZojS5+DWVMzt08HBNh5dMZlPySqMTrOXKfdqaXg7wqNKrc3JVf+xa3VM5ATjcYHuJTZ3ctLLuy4Ovkk6+RdJJ1qjNAmxXBz8II0DiKMtlSxp65BXs5NHtYcf1Trlul0MPA9zV898bUqDd6UUYuhYilKN5538T1sE3olo0k441/F9ayjH7wQKODoklfUpunXmIxeBChPE7eU3U7n/vczc2QfqBIO+F5c6z6jRHM3zJR8u5JbL/9mkKPIYUjiC+eAQ1qlBtvHgBSKSAdAL9OZa/mD0fYMMGPx0seSbSGF5B2/vRSH4D3kGBbDeuZunEVeyj9jFrtxqCoPy41/aoHKMyvvD6Q2MvI9/i/BeKviAM09ZqK3N3ZOSt5IUIjT+pjQAelFiPoSlVt3cZPFhKEu2UMNAzsvUGf6fNbcdpX8u5sp9ZdQ5mNG1q6bDN7vm5xvoeO15jdNtC/6/9yGTkG8TbhcydJ9Y17eWLJfwHqn7wKJTP2yW8702XX0m8Kv+j8EqChF4YU+lYvjL3rDUG53S55uiPYxb5UP79rl6xm2cdsuZNz6VvLK8dNW4ta+9q/zA5XuN67Di2agjqUNSyeDu4YfXH5BCqp0xLrX5nRJD+4HcsLL6i++RS7UrEraSAKaSt1vrPjcKdj5vA/kSVoJ01uHxQtgdwLAfArrt1pAA9vDPEFHFK109GzkOviAyajEjN4EAKjAuJZf3IeuJDbXyRSVlbsI= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(10070799003)(376014)(7416014)(1800799024)(22082099003)(18002099003)(921020)(56012099006)(3023799007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?M2xnMVZ6MFpibCsxNmE0Ky9UT0hoU2tEb3ViN2hxZFo2ZnBxRks5L2I3Q0dO?= =?utf-8?B?S0tkd0RKenZ1Rjk3NTNKYmtSVHAvSmhGdVpnQVNnRWtSNEtiTHliWXZuczlL?= =?utf-8?B?WGl2V1pmRXNHVm1WZ0hmRGNZakUrY3I4Z1RzbGZ1N2xMQjBUbUxMczVsRUoy?= =?utf-8?B?S2ZEaFVVanN4VnhiY3VWNzZNL1NRdWNITVBPOVNsaEJ1MkhsVGk1bGZQMktu?= =?utf-8?B?ZCtzRlpZNmFaOXNKMXpZY0NpRnltOWJpZm5Fd1VuYUxqQWt6VzR4b3Q3KzA1?= =?utf-8?B?YWhGZFQ4cUZ5eGJnYlVsTEpiV05mUElNZ3pnMWkzZlFOREhZZ08vSU5IdGJ3?= =?utf-8?B?MHlSMzJxbllCUVNvQlpKK1lzVWlWdGZTOHZhMFphYkh5ellIaUVIR0F5eTho?= =?utf-8?B?TmFIRmRSQVBXRDliNnpGNzNqLzRkMTQ3aC9ITlZrZExpOHlkYmRMVEpuTmFO?= =?utf-8?B?djFFSGxIbjRWWllLVGhxejhha29pMnZ4bzdzekd1eWYveEphWWNsRi9NNUlN?= =?utf-8?B?WkZ2UHlXZ0liUFVCUnVpWXNXWTdrL2pCaGlPQ3dKQVNMU1Y4dm9LSXJTMkxu?= =?utf-8?B?T0tKdWpLZFlDdVdlNnJkZFE2NFdoZDFMMzFtR0doMFUxdDd0clZYM0NEUWhJ?= =?utf-8?B?aXk4ZndnK0N6eWFVR21HaXZqeSs1VStLQWE3aElyUlFKbk5QYmRFRWdFSHAx?= =?utf-8?B?bXpTSzV1UlFWVWVoR2FZWDJPQmpoaFFyTkZvVTQyNWpCOGY0ZUZHL0JuSUxq?= =?utf-8?B?eDludkZMTHlKUG1iRXZLU1JtYWdpd0ZnMytiZnVNVTl0NFYybCtOdnVkTmZN?= =?utf-8?B?VVNteUZGeWtyVkx4WWhUOEU0dGtVTHJCc1FaOGVDVk1TTjQ5eHNBTk5nakNY?= =?utf-8?B?RWg4MGV1RkhuUDd4QWVYaUlpZEY4U0RBanlXdnU4LzZjMzJEVzZIRW1OdCsw?= =?utf-8?B?ZzlnQiszSnpseUNUK3lSYkJvNEE5aGJOb1N2OTRLemhkZjUyQWFyb21RNUd3?= =?utf-8?B?L0xTaGphQ3Y2dDg3YWlNZUl6anFhSjdnTmFhbHpFdXFjWGFIbjY3VFVFWnV6?= =?utf-8?B?WXVIaWlGR3VBYy9YU1VUTjhjaVNJYlhZZlR4enJXNVRmdXpoZCtLUE54MTla?= =?utf-8?B?cDB5aVg5RDYzMURSc3ZTVGRyb25WMGFNNFRYVFlCVGtGdWxyUnZGMkVWamlD?= =?utf-8?B?QlltS3QrQVRoUW5GeXpXRmg3ckw0NjlyU0s1MG1lcEZUeXE5SlRyY0FVVjFv?= =?utf-8?B?NzAwUlFZUk40WTN3UkR5V2VpUERPL09UVWM2eWY2MEl5L3hBQ0tYMWk3azNJ?= =?utf-8?B?TnByTWN5azhhSnMveWZiOWtZUkJGZStNYktXMDZHQ3pJL1hCSE10eHpEb1Ez?= =?utf-8?B?QzVUOHZpZTJ4ckZOT0hOUmpEd3R1R1QycVhnbmliUDVxODVjZithL0ZRYXB6?= =?utf-8?B?Z2E0UUhkZ3J3RFpiWHVuZUMxV0V5OWhaVDlZQkRmZGhNalUyd05TQmNQeDFa?= =?utf-8?B?K2wzYXAxMTR4WUhISmZRems0Tk16b0J4cGFtZGlpZ0dMcHQ4RWd5UlZGTGt1?= =?utf-8?B?ZllTOXRqdnVMZEhVU2M4akZydzhoOVlPOEhCVytkK0paNUs1WHMzL042UldW?= =?utf-8?B?S0l5aFBRYTJDdUZpdms1eXVzL1RRSGJMOWVrb2lFTExvdTB5QTk1NTU2OHdi?= =?utf-8?B?R1BIbXZXVy9uWjVJK3BXVGJacGQ3cWVBNnBDOFRnV1FxSk9XQjRFLzJieHZ1?= =?utf-8?B?Y21uYjRjbGZ2YzFSdk1EMVRUUXlUbXlxV3FEVUtIVmwzN0ZwWWtya0RreVR5?= =?utf-8?B?MnY2Z211NjBpWU1VdWhJeGZNZnkzVURCeUdMa3RTSmZsb1p2ZDF0NDdsTWJE?= =?utf-8?B?MXl6MGZvbUZ2UXNORXh6ZzFxelZ4VGJIdStmQmpMTG1ybXJSajJHMUxHbDJ5?= =?utf-8?B?eXBZdjJWSHNlSWdCRGZ2bVdhOEFyMHRja1drdFNOZVhxd2wxL3BKa2pUcXR4?= =?utf-8?B?Smoya0NOVWRjanRwcDFpK3hSMlZkNXRLUi83YWgvMHZzL0F5UDZVekpzTHoz?= =?utf-8?B?cTVIMmowRC9Fd0tkSkhmU1poWUV2L1R3U3luRUFNYnlqVCtkVXZMN2gxekJy?= =?utf-8?B?WC9lNGFKS2N6R2dTLytCVXh0ZkNkczRORVg0YnNueDMxRUswZytYTmFFb0x3?= =?utf-8?B?RHlFOU16c29yZnJJRE9qRGJVVVRKdENuSjZpUCsrY0Q5bzZGVzlqb3hhN2hl?= =?utf-8?B?TDVOOTgzU2E2NHRTaDFpSmtQa2VJNEEzbUFUMWYvREVIcGttUTNQaUNkS3BE?= =?utf-8?B?WElwclBYRXVSOTA1Yk02UXlpaTBiZlVXSGsybXRyajJjOHBacTlQdz09?= X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: 66bba71d-83ec-438f-cc35-08dec0b1c215 X-MS-Exchange-CrossTenant-AuthSource: LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jun 2026 14:18:03.1764 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bbc898ad-b10f-4e10-8552-d9377b823d45 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: IyjqzSdpCSePrDDaCIiB4BmaDuPUVBEeL+XALyovPKJTR+9vfPLRF+OUQjUFsj/BCpiwUKYUS4bLYyu5afOptw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO2P265MB3626 Demonstrate the preferred syntax of index projection in DMA documentation and examples. A few `[i]?` cases are converted to demonstrate the new variant. Reviewed-by: Alice Ryhl Reviewed-by: Andreas Hindborg Reviewed-by: Alexandre Courbot Signed-off-by: Gary Guo Acked-by: Danilo Krummrich --- rust/kernel/dma.rs | 8 ++++---- samples/rust/rust_dma.rs | 12 +++++------- 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/rust/kernel/dma.rs b/rust/kernel/dma.rs index ff69739eae35..79125ee012a9 100644 --- a/rust/kernel/dma.rs +++ b/rust/kernel/dma.rs @@ -1152,8 +1152,8 @@ unsafe impl Sync for CoherentHandle {} /// unsafe impl kernel::transmute::AsBytes for MyStruct{}; /// /// # fn test(alloc: &kernel::dma::Coherent<[MyStruct]>) -> Result { -/// let whole =3D kernel::dma_read!(alloc, [2]?); -/// let field =3D kernel::dma_read!(alloc, [1]?.field); +/// let whole =3D kernel::dma_read!(alloc, [try: 2]); +/// let field =3D kernel::dma_read!(alloc, [panic: 1].field); /// # Ok::<(), Error>(()) } /// ``` #[macro_export] @@ -1189,8 +1189,8 @@ macro_rules! dma_read { /// unsafe impl kernel::transmute::AsBytes for MyStruct{}; /// /// # fn test(alloc: &kernel::dma::Coherent<[MyStruct]>) -> Result { -/// kernel::dma_write!(alloc, [2]?.member, 0xf); -/// kernel::dma_write!(alloc, [1]?, MyStruct { member: 0xf }); +/// kernel::dma_write!(alloc, [try: 2].member, 0xf); +/// kernel::dma_write!(alloc, [panic: 1], MyStruct { member: 0xf }); /// # Ok::<(), Error>(()) } /// ``` #[macro_export] diff --git a/samples/rust/rust_dma.rs b/samples/rust/rust_dma.rs index c4d2d36602af..5046b4628d0e 100644 --- a/samples/rust/rust_dma.rs +++ b/samples/rust/rust_dma.rs @@ -77,7 +77,7 @@ fn probe<'bound>( Coherent::zeroed_slice(pdev.as_ref(), TEST_VALUES.len(), G= FP_KERNEL)?; =20 for (i, value) in TEST_VALUES.into_iter().enumerate() { - kernel::dma_write!(ca, [i]?, MyStruct::new(value.0, value.= 1)); + kernel::dma_write!(ca, [try: i], MyStruct::new(value.0, va= lue.1)); } =20 let size =3D 4 * page::PAGE_SIZE; @@ -95,16 +95,14 @@ fn probe<'bound>( } =20 impl DmaSampleDriver { - fn check_dma(&self) -> Result { + fn check_dma(&self) { for (i, value) in TEST_VALUES.into_iter().enumerate() { - let val0 =3D kernel::dma_read!(self.ca, [i]?.h); - let val1 =3D kernel::dma_read!(self.ca, [i]?.b); + let val0 =3D kernel::dma_read!(self.ca, [panic: i].h); + let val1 =3D kernel::dma_read!(self.ca, [panic: i].b); =20 assert_eq!(val0, value.0); assert_eq!(val1, value.1); } - - Ok(()) } } =20 @@ -113,7 +111,7 @@ impl PinnedDrop for DmaSampleDriver { fn drop(self: Pin<&mut Self>) { dev_info!(self.pdev, "Unload DMA test driver.\n"); =20 - assert!(self.check_dma().is_ok()); + self.check_dma(); =20 for (i, entry) in self.sgt.iter().enumerate() { dev_info!( --=20 2.54.0 From nobody Mon Jun 8 04:25:46 2026 Received: from CWXP265CU009.outbound.protection.outlook.com (mail-ukwestazon11021080.outbound.protection.outlook.com [52.101.100.80]) (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 A3E0E3EDAA7; Tue, 2 Jun 2026 14:18:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.100.80 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780409895; cv=fail; b=KNnSf1ocNCOKYxV7IrFxH54DrIltSyDK/d3izCvn7AMz4dMoGbZxW9EwEVi5cDDQgnrVZ3Knqm1vjm9wWA7VUXcfF1aQMKZaZfuaUKMbXc/jZQL4Ps4wtCejAe+aYF9G8FOIPqAmFufo12WgJGcpy+snjLitapZAZt0QR7Wl8Pg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780409895; c=relaxed/simple; bh=2S4LA7wmS4606LlO4moCawDT8voANZGuazZhpD5ppxE=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=oV6AeY0nbXK/YXbbZcE3nV1tSkEvhlGKK+hxccO9hGiUfZIS6EjR9Q6ZjRCzW7Ia7UZc/K7XqNxiWC5DMWS9zz+Q2ecItHl4u0MP3X+xJBXNHqjrvs02LB/F6gaPR5hvpCnhOaf1IAv3Y8+p2w5BuEoH7kEAb6jAijol5KN7t+c= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=garyguo.net; spf=pass smtp.mailfrom=garyguo.net; dkim=pass (1024-bit key) header.d=garyguo.net header.i=@garyguo.net header.b=HCIfNjhQ; arc=fail smtp.client-ip=52.101.100.80 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=garyguo.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=garyguo.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=garyguo.net header.i=@garyguo.net header.b="HCIfNjhQ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=ewrYNTs7gJruZkvEwSrwG0zcovjxKa4EyqMCYP/9Mfl/ohsjrrSA6T/uisoYWQnHNWpnTnRlwzh06dhCt0JBub/923RKAhX7gxk2eISORCla9n0PzZ0yjKDfgFFAOuTmXxC+QlHTR7t0bIeG70IBmXYj9AjKXxBE2tr+kIJGfAnSUJxtXAKN0bJ8/whaFFVUTQfDivZm/mDK8StFgY4NHAm8/GO7c5gJqpNtKHwCNSASWo+DGpcH3H5YllZEeh0V9Bom1bHmVx98naFhZfSAvSSGqoa090PW29LNNR7xMPbdn9+jNKorZDDvg5YwO/Bu31Q7gBr996Ea5p+7IjkZPg== 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=v4zZMK/7h4iqLlD+baFLT1XgssBJzfQJQok27mit+Uk=; b=QvjBDumY4vBgyptqLuApUovY/CWhv90vWp/g4xvM2pfA5dQWy8Eyyl45MlqaC1Km3HpSlquSxAVtMFzo1CgnFrXYy+n81tGsntdkpCzYwofyvgw7YeLXVu3beN3KvYeqev0F6DsQw2qpxUzmKI+cHH6BRsXfc5ZICFRtI50bQsYxBixFKqFoqbuAL9HJ/oxzBXuTh/5aUXOvmPeWzziEEmpWeXiwE+MuFP3wMhDoFyo1IboaspYT1v49pV/sckVf93CVqzUSt5QPBc05tX3UljOB9vfbrGSrt6yLOKKJAs+o2EzSleZoURLAalG7M3ENyoWq+rhnBPNfQ61hwiPhVg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=garyguo.net; dmarc=pass action=none header.from=garyguo.net; dkim=pass header.d=garyguo.net; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=garyguo.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=v4zZMK/7h4iqLlD+baFLT1XgssBJzfQJQok27mit+Uk=; b=HCIfNjhQB3v8TasynnwawWJffKY4jdg9eV92XdWhqi7/uUVODw0xKRxC8Q1b960KukxkVvn9/24SfemVa0WrUqPfleD9NtNJiZKemaVZe5znLu+Ff5xklh5tUD5wuo27VL7SZxpes9rrcy4Zf5opRjRKn+AuBNd41NtgRydUEXY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=garyguo.net; Received: from LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:488::16) by LO2P265MB3626.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:1b5::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Tue, 2 Jun 2026 14:18:03 +0000 Received: from LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM ([fe80::1c3:ceba:21b4:9986]) by LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM ([fe80::1c3:ceba:21b4:9986%4]) with mapi id 15.21.0092.006; Tue, 2 Jun 2026 14:18:03 +0000 From: Gary Guo Date: Tue, 02 Jun 2026 15:17:56 +0100 Subject: [PATCH v2 5/6] gpu: nova-core: convert to keyworded projection syntax Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260602-projection-syntax-rework-v2-5-6989470f5440@garyguo.net> References: <20260602-projection-syntax-rework-v2-0-6989470f5440@garyguo.net> In-Reply-To: <20260602-projection-syntax-rework-v2-0-6989470f5440@garyguo.net> To: Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Abdiel Janulgue , Daniel Almeida , Robin Murphy , Alexandre Courbot , David Airlie , Simona Vetter Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1780409881; l=1991; i=gary@garyguo.net; s=20221204; h=from:subject:message-id; bh=2S4LA7wmS4606LlO4moCawDT8voANZGuazZhpD5ppxE=; b=rcXroriMVp/pN0IugLWraGESUJKTQzB7Fchd0FzWIvFtuKhBjwOnm/HbZp+GRrND1jyo/WzGL cI+4YYklXcuD3urxMcKPVufVSQdVYeyHiibEQIK1g6/sHF6i3a1Skes X-Developer-Key: i=gary@garyguo.net; a=ed25519; pk=vB3uIX95SM4eVrIqo1DWNWKDKD2xzB+yLLLr0yOPYMo= X-ClientProxiedBy: LO4P123CA0539.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:319::10) To LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:488::16) 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: LOVP265MB8871:EE_|LO2P265MB3626:EE_ X-MS-Office365-Filtering-Correlation-Id: d8863c59-f29f-4cf3-337d-08dec0b1c249 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|10070799003|376014|7416014|1800799024|22082099003|18002099003|921020|56012099006; X-Microsoft-Antispam-Message-Info: b4pl0XfI6r8FfvP/XwYZListUoSfSLdytfJGctjVwFL/dIlMp8LotcX755lKh5HqFyl4vmu3XhLXG/HSgyOz0HVV9prY6JuArG0WSbBUaoBDPFm2zEhVeHOv4P+ebQD6iS17O+vHEOmBV7Y854ZWVwJIARntH8ujSN/NzBnpbJ+mKBZZuLSn90wRfsecW+5OTrv1BXamcNv4D/5oDYHFVuCLIct00GVY4dP9nVwG0vU1gPmiTrwsvEJRThKgFMEcmYxfMJp/aqlT/8YjEMNyoTD6/IsA/1Hg0m0s0lzE5AqBWYYzWsHVGCGWQeO2IvwmELBCf6xR6xyDviu0O1iG3eKSMlId7GV1Mk3ddYlHWGZi030jPpK8Zb5Lu/tlr/2ohQwJFrRlNaUGCY9J2BEMTd4pBvvkfstHPYd+yQCnDQR00YWNa1XqnAz07J0wHUesN2R7+4N+N0PbdIYP+Y4EWTwllOsS4T/kXq6YcYhgJA1hbyyU1JU2JUCkXLJc61mTyqkW3pfFu+AHIzjC62u4l7MrU+Yyz7brUEkr6KQoIds7Pc4ojgJL0/ZLQY6Pv89MVDXLRMeUU8oE4lpT8XkrpOocgdJu89gNRenRZufLOWk/LAS6CevUT+zdiC+aWnWxGNnhBvMw+ks/Ls0zPjY+bYAZgV9gVLdgcRX6f718rU8O6Vo5Shm5ce23jFGlqmoPzlg8d73JoyBKWiamHyriLtJSlN2D7joRTmhW3HHNijk= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(10070799003)(376014)(7416014)(1800799024)(22082099003)(18002099003)(921020)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MGFhT2dnNWNRb25nWUlwVFBFUnh3WWcvK1E1Zll6cXBpNjdYMFozdGYzaTZH?= =?utf-8?B?V0RkL2dwekRPMGxpKzZoRi9NTDE4b0NsSzF4WFJFR0gyZmhheDR5aWhYdVZq?= =?utf-8?B?UE1IMmRnbWM0bmVpeDVSc3NYRFFvdGJKV0RsOE5jUDZPZE1XL2NGMUthcDFT?= =?utf-8?B?V3pKZHRaWEorc1lWOTNhY05YVXNPeS93SW5vWHVQVUxWeHdhcE40a1ZmNXB3?= =?utf-8?B?ZzJFRXY3UTJ5cDRYZEQwWFowemZncUV4ZjR5N1QxaitHZzJMRTBBdjd6T2dW?= =?utf-8?B?cUFhRnViaFdDL0F3N0NTSHFGekt1ZWtlVUdXaU52a0REeVhzTnQ4VHduNlRj?= =?utf-8?B?cWhIMGFIQ0tib3ZMQ213aHNNQ1U1TmN5U3k4dDlwQnRQN1NsRXNVbjZUaUYv?= =?utf-8?B?ZFpVbzZ4L1ZBQkN5cDVPT2VRUXRNQ3R3T2d6Z044dkhQRE5DOEFhaUU1L3lu?= =?utf-8?B?WjlrWE5IRHhFT1hzbmE3OFlXaVJVVHlLeVg2cUxLalJ2NUZMZ2NZZUhHQ2Zm?= =?utf-8?B?K2tLRjdLSE52N3UrSDlSbkFxOWdHTmN1V0pLdU9BbnR0OUdGeFZmb2MyaW96?= =?utf-8?B?LzIzL3NXR0xSSFFiL21iUjZQMy9rdG80M0owQk5uZ2VOc3I3dytEQVFUL1Mw?= =?utf-8?B?a0tBRjlqOUlRL091aDNxSERQS3VFT0I0andPTGEzUVhwcU16b2RQRmxVam9u?= =?utf-8?B?Q0ZJSGJoTVhNdWdEQWpBVFoyR3U2Um9wSUszZkIxa1NEa0lyQytmbVVXQW00?= =?utf-8?B?bTNiR2dlOFNmaFRUbHdQc2tENFR3a1R4Wi9rbGgwaHdYSDc0cFRUeDg2SEc2?= =?utf-8?B?emlwa09Ha1FXSWRrZDlWUzR1YkttVU5Kb3hQcG9tTTlyNTE2VlNhMncyajc5?= =?utf-8?B?SHZDSjR4SEl5ejBKUHZRYWkyUU9xT3hQSnByZUxhWjFnZHhueklDelFtNy81?= =?utf-8?B?RHBHK0cxUTBydWkzcTdGT29XZjBuYzhDd0lOTUxZcFM3L29teW1tVzVFUlVq?= =?utf-8?B?aGRMRlExK1FTcFdqRGxHYkJBTUpBTmJrejlCM2RGZU5ONXFqTU55dmFFajV4?= =?utf-8?B?SVBSMnI2dEZJYndLNnlKODFRczk0WmNYb1FxdFlSb1ZZamN2MGwxVk0rSHQv?= =?utf-8?B?a3ZndWlkWlFHMk1QZTRRVGNGUE5ZYW5IYU05bUhOMi8vc2QvYnZLZG4zaDZ6?= =?utf-8?B?TGlldDJzMm5oUkFvYW9sRU1HeVpTSmI3T2lRV0l5U0pqRkM4WUtsdG5XVkhS?= =?utf-8?B?TG5OSWdEWVUyTDRudEYvVWd1SG84d1YxVm5UMVI0bUVVRnN0VTQ0TW9UMURW?= =?utf-8?B?YmZ5anpZUVpLNFhyWDRMejRJZ29ibFpyZm1kRFpUQm5DMkh3T2pPM1ZhQTJH?= =?utf-8?B?cllCK1prV0FOSHhXSHNGRDhDSXBSNU9Qd3ZlUHV3QTZQTmRsOTdBZTZ0Vnd6?= =?utf-8?B?R0dzZFhycjYyTXNjM0pWSDVRbXEvR2poYkpWUkNVZEp4NW9UU1haeHkxalZJ?= =?utf-8?B?c0ZXOGxjN3dzSmJVYjhCMzd1eDl4NWdCWko5QWJJM0V0UC9xK3pDY1FydENa?= =?utf-8?B?NGZxdzlFTFhwZUQ4N0FIOFRxbFNpOGE3enlMV04vNldqTk03NGdDTVpTNjJW?= =?utf-8?B?QUVQOUpiQjc1RjlNSFE5NklvZVZEdHQxQ2t4cnJKWUQ5MXZCR3NFR2xtRi9z?= =?utf-8?B?N1h0VE1yZlNDSzRwNjNvYVRJT29CMnI4Q0F5K3J6M004aEVreUhLSENta1dD?= =?utf-8?B?b1hHbWdkcWNIV0RMbHd2ZnJyZjc1bFJ1Ym1mMkNoVTE3Z0ZEQTd2Wkw0dE83?= =?utf-8?B?ZEhFeW5qNHF4aDlDRThlNmlnVGJ2ckNoSUVaRlh1dUVzS3ZCRXExakMrb2w1?= =?utf-8?B?bW93MnA0SmZ5cGpxaXd3RWdrbDJNZE1ZcDl6Z0s2TUJoeEFhTXJEdHNvS0g0?= =?utf-8?B?MnYzOThZTStGc3ZBMHlhMFN5bzdhdGh6YTArSTc5ZjFBcFdvbks5SUZ5L0Vn?= =?utf-8?B?dFdyMC9TMDNpQ055Rkl4K0tHWHF5RmxhelhLOVZXVU9JS2xpN2JVTEVvZ2Iw?= =?utf-8?B?eEdHS3RQSXdTNzlobjR1UXhOazVTVmJBeTNwY2Y5YnNSY282RGFTQzNlbDIv?= =?utf-8?B?WFZ0LzgxR2JYYXByMDljclFGSWxCU0FOdTN6ODJFb0hDS0NYeHpyV2VLenhB?= =?utf-8?B?ZUhubksrdFNTOWpmZG96aWpTZHFUcTFEWURqN3ArTGJTWmhHaktlZ2RsYStL?= =?utf-8?B?RXZoYmlxSTdzd0p3YmxhTGlNczJLNWVwNDhmd3luOG9zQmxhNTlHamE1YThQ?= =?utf-8?B?K1R4alZsYTduR3pBK0p1YVl4U3FXVWpsaHdaZGhVTWdOU3lEb3U0UT09?= X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: d8863c59-f29f-4cf3-337d-08dec0b1c249 X-MS-Exchange-CrossTenant-AuthSource: LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jun 2026 14:18:03.5176 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bbc898ad-b10f-4e10-8552-d9377b823d45 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: tqy6R1oAh4H7U3kJPZeflwZi4jjhofRd7PAsy+uOodNEQvMGq0Pyf7K97iDUyCY+zDywQz+xQslpYBwuyI6tBg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO2P265MB3626 Use "build" to denote that the index bounds checking here is performed at build time. Reviewed-by: Alexandre Courbot Reviewed-by: Alice Ryhl Signed-off-by: Gary Guo Acked-by: Danilo Krummrich --- drivers/gpu/nova-core/gsp/cmdq.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/cmdq.rs b/drivers/gpu/nova-core/gsp/= cmdq.rs index 275da9b1ee0e..1c9b2085f5e4 100644 --- a/drivers/gpu/nova-core/gsp/cmdq.rs +++ b/drivers/gpu/nova-core/gsp/cmdq.rs @@ -237,7 +237,7 @@ fn new(dev: &device::Device) -> Result { let start =3D gsp_mem.dma_handle(); // Write values one by one to avoid an on-stack instance of `PteAr= ray`. for i in 0..GspMem::PTE_ARRAY_SIZE { - dma_write!(gsp_mem, .ptes.0[i], PteArray::<0>::entry(start, i)= ?); + dma_write!(gsp_mem, .ptes.0[build: i], PteArray::<0>::entry(st= art, i)?); } =20 dma_write!( @@ -260,7 +260,7 @@ fn new(dev: &device::Device) -> Result { let rx =3D self.gsp_read_ptr(); =20 // Pointer to the first entry of the CPU message queue. - let data =3D ptr::project!(mut self.0.as_mut_ptr(), .cpuq.msgq.dat= a[0]); + let data =3D ptr::project!(mut self.0.as_mut_ptr(), .cpuq.msgq.dat= a[build: 0]); =20 let (tail_end, wrap_end) =3D if rx =3D=3D 0 { // The write area is non-wrapping, and stops at the second-to-= last entry of the command @@ -322,7 +322,7 @@ fn driver_write_area_size(&self) -> usize { let rx =3D self.cpu_read_ptr(); =20 // Pointer to the first entry of the GSP message queue. - let data =3D ptr::project!(self.0.as_ptr(), .gspq.msgq.data[0]); + let data =3D ptr::project!(self.0.as_ptr(), .gspq.msgq.data[build:= 0]); =20 let (tail_end, wrap_end) =3D if rx <=3D tx { // Read area is non-wrapping and stops right before `tx`. --=20 2.54.0 From nobody Mon Jun 8 04:25:46 2026 Received: from LO2P265CU024.outbound.protection.outlook.com (mail-uksouthazon11021105.outbound.protection.outlook.com [52.101.95.105]) (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 3B56B3EBF13; Tue, 2 Jun 2026 14:18:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.95.105 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780409895; cv=fail; b=Cg9Rq/JpAWXXqTBPred1vG663nQ+7wc+AQ0xGnZ0rg1pFy6pqvarTrYTPbGlLVW79V7hWLJSt/w7e8kxZxgejosGJ4MF19TjCd+fIwzm9Ekkt0MMvG4p5Z63g7m7JQ2ke1bFwgrU9HNYF7h3NVdq3rEfBGIMxSD7YCSEiF286Mw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1780409895; c=relaxed/simple; bh=CV6fecl3K//iogdhcwiyQ4Gnw7+4d47B/J7XKNvOqN4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=SSnN2Ql8wOTq4Ena1wElyLGSL4JKmXr61hUYbHrILGZDPYPchmMr+XWy8Ig2QSAlTbvFW74nnwebtpZa8JUUYEVqkQXwOQUMK0oFIbem/IUGUN+qyNWtNqNh76vGmWUnxYJbZVD00J2Hb6WpqRKk8Zc2uNZzSausL84bMavi9K8= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=garyguo.net; spf=pass smtp.mailfrom=garyguo.net; dkim=pass (1024-bit key) header.d=garyguo.net header.i=@garyguo.net header.b=NKU5C3aO; arc=fail smtp.client-ip=52.101.95.105 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=garyguo.net Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=garyguo.net Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=garyguo.net header.i=@garyguo.net header.b="NKU5C3aO" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=qp7LvyEuiuz0Jb7JWwCKJ+D1tJWapEudepeuUkWjXsH8ceapjfNA0tLYBVZs4bvjUjZylbndJXkZdGvxaRdZ1gK1Cl/TFhWXiDjNmtrtagrziiepQPn614jM+QhNVOSOASOLpmjlxvrLoBm4JsP5tpVAo7eMS5pRfFMx6ult8A02XZfXrKPQU/c5Hq/p/s5AIj5v0kmY9dKVe8mWq3ID4n//BcXfhZgjzvV0wo72vQdTY/8rxHAog4cUm4SeKtFk+8oLvOO+9xcr8YNXt+mQlabBnMaaPLkHB8Ahk3ZJNzvesQuIvd9yf19Tp2jBg2F2hTpYkTxod3Ssmah2t16scQ== 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=DCgVTp6ziaB07DuFA6ZyqGvR5MD2tBPLZOrUaIyMTFs=; b=EUwg1BY1Z6RygN5vFABtIvnZdTKzrCJo4LoBkyqTtYX6xRaVn+loVTpyer+YOj4nLRHMY0m7ZvBfZunHh6aPQGh3hYGXaAlNgA/vPaejgUqzxAzCo4+1huzzYtLEKwg8OXjeNaJhQr/gKPiExcNofEpr6et6oIJ4nPspRIwK6MrepADGL0w3SnSgJXSHRqn24+1zFn9Z4AqwL/PWlJ3jINL9Su8ogGAWE8vo49FnsApWpurcLB+XdHtPtqtAZXaJIndnIFcqyNRllItsJ9vyKaMVs4DocvjMf4mX5lMvJvppQv9N8CJOMB9iNp4ZRNQ+GoGV2FMmQnpouQ3Te1W0XQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=garyguo.net; dmarc=pass action=none header.from=garyguo.net; dkim=pass header.d=garyguo.net; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=garyguo.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DCgVTp6ziaB07DuFA6ZyqGvR5MD2tBPLZOrUaIyMTFs=; b=NKU5C3aOHmm8heOFXppRRHNU5ers00u7Vsa6Z8lDq8bQDDbYeQKcwu8hRhWXYG82LoaZRa0Yhnfkh14oP3fXzmrMuKu1xrgZEPns75rbptOEWOjg+RsUOA3YyV8/aGjm2Ah3w2jsaKC24zxK0tEXRabx+kZlzgL72LTFL6wvpEw= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=garyguo.net; Received: from LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:488::16) by LO2P265MB3626.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:1b5::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.92.7; Tue, 2 Jun 2026 14:18:03 +0000 Received: from LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM ([fe80::1c3:ceba:21b4:9986]) by LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM ([fe80::1c3:ceba:21b4:9986%4]) with mapi id 15.21.0092.006; Tue, 2 Jun 2026 14:18:03 +0000 From: Gary Guo Date: Tue, 02 Jun 2026 15:17:57 +0100 Subject: [PATCH v2 6/6] rust: ptr: remove implicit index projection syntax Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260602-projection-syntax-rework-v2-6-6989470f5440@garyguo.net> References: <20260602-projection-syntax-rework-v2-0-6989470f5440@garyguo.net> In-Reply-To: <20260602-projection-syntax-rework-v2-0-6989470f5440@garyguo.net> To: Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Abdiel Janulgue , Daniel Almeida , Robin Murphy , Alexandre Courbot , David Airlie , Simona Vetter Cc: rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, driver-core@lists.linux.dev, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1780409881; l=2040; i=gary@garyguo.net; s=20221204; h=from:subject:message-id; bh=CV6fecl3K//iogdhcwiyQ4Gnw7+4d47B/J7XKNvOqN4=; b=uoQmTZpLvUGUcNHpmqat0UOAjCY66+VsIO71REUi+OjZd5BT7tC0MtTcXKC6gHIV5IIw1V9NQ WOFXeaoPV59ApMq37L7hWoqLyz47qk/W3aJJ4OpsMWkmm8C2BFHkSNJ X-Developer-Key: i=gary@garyguo.net; a=ed25519; pk=vB3uIX95SM4eVrIqo1DWNWKDKD2xzB+yLLLr0yOPYMo= X-ClientProxiedBy: LO4P123CA0539.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:319::10) To LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:488::16) 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: LOVP265MB8871:EE_|LO2P265MB3626:EE_ X-MS-Office365-Filtering-Correlation-Id: fc85f598-9d2c-4ba8-2de7-08dec0b1c27f X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|10070799003|376014|7416014|1800799024|22082099003|18002099003|921020|56012099006; X-Microsoft-Antispam-Message-Info: IHKyooawQtGgO4t/xEafp9JR/mPtVJ7gqHlz5OVPb+qtnSFHFrPwQGEQpsv51i+e62CiPzYi7hsJk44JthAF/PqDh3zFj5++VwSx1GCxU6ASt2JQ/1lgDT0u+fp39yYLiumpWP7F+PP9atkrjZkjcOiMbPtT+3ppufrzq7W5+Y5rY//zwBxWZ7PvVt19UhUyK1sO2jy8Eur0H5Xfk6WNLTviQUx9+BHiSN/OifOA3sDyzolMFkwAcgPGkvwcj3A0ghGTGs25i/3mtEmcLSjxcbj8UqVqnoNn9nxwiLBX8nysdC9HNzRwc1ivS15QGYIWgtwHqZE9DEwx+GhurroLuXJXc2rI5eZECKzrx0ULzSMsr0CFM+tFROIJa6BXFcm3fc/SfcWk24Ntvsbr3LjdOF0KTxURc7EIJ+DmSNzXXsc/0mveP5g0fv6wHa1qrFZ/zCz1pinmoZbroZ+Vbw7NPDDdS6xvG2N9O2NUMX9BEnfsYakxCe3mNHGeqNTN+8VtM/lRtWXwjztUvYvXZmQez8qioM3dUIwKnlMS8pjoFnZpxo15zXuSKEZEOiYQZy8A3c/7iM7rRSsvF9+m4lPuM5X604diqKJzYDIZ6lOD5l/KOukFff/WuibuubdQj4njqIdW1sIC1/cXDff+9FxenSOVIb5+n3e26UM7JR0bCuMdmrGPLvAMpgS2EUmOf+K7GH+7U+XSVAjJnH9NTBq04+iC8uark+WGG4OaLu9g3Nk= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(10070799003)(376014)(7416014)(1800799024)(22082099003)(18002099003)(921020)(56012099006);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eUtaR3RFZVRWMEw5R3dPTlZUTHpxZzJuUExBMmZFU0pFaFZFUldXOXBhK1FV?= =?utf-8?B?U2pVTTNTeTBINlRGTzh5WnlsK2lXYVd5RXErLzkveXFjNXpJTkNTZTZMSjlG?= =?utf-8?B?Rk0zdGdQbGdqVkVCM3JEbjd5aHA0eHh6c2x2TmU0c0pYK2FZUk4xTDF6THpy?= =?utf-8?B?SytLZjVCYmYzNnNOWkhCQUlOQTgzSHRXNUljV01KSzB0YTM1cytWd0UwaXlt?= =?utf-8?B?YTY0QVhKOW5PTDk3alRZeVpXbDlyOUZiOThhbmVnLzd0NzhucjBPZ3lTQUtJ?= =?utf-8?B?UU5qcGp2eUJDdTFMUzdTRkMyM2ZscW1LZExvYVE3dm5Sd1hPQnc2NWNKV3Zn?= =?utf-8?B?Y0pueDRFdUVOTmxGajRXbGtxeDZSYldyMVFtQ3NKejFOdVpZVWp5cFpNbHJI?= =?utf-8?B?aTA3aTVJeGdrZHRGeStvYXJvVklVeHlRb0tIdnRMOEsyUFRXTWFFaExrWnFK?= =?utf-8?B?MzVpU3JEWFhJeGNWaTMwdkhIZ1Facm1raHVWTW1iUS9QbXdibDlpK0tIZXJn?= =?utf-8?B?ekYwRENrWGZQT1RJdGhZQStKTU8rN08vemhCN3BsbnMwMnhLbjg4bTRTK1Bl?= =?utf-8?B?K1hPcXdBQURFNEVsMFpNWjliTHFIelFFWm1GSnI0TnRwZzRWQnBsQlhSZDk3?= =?utf-8?B?ajhVRU12VE9QUnhzQ1pLbDhRS2pRZzNaTEhOQ1Q4MU1XWDhtc0J5VjdCL2Vl?= =?utf-8?B?RkpNMlM3MVBsSjFMVnl5a3VxOGJZTjBNa0dNZkVTekZiclRlZW5QY3VUMjF5?= =?utf-8?B?a29BSmV0T3ROc3NoK0xPbmdzZEdpalZ2cDVTWlNTbTNnNk1CLzhVdmN5MXky?= =?utf-8?B?QnhZeVVRMGRoblQrOXlJditJN2RrZm8vYVRmM1dLZFUyNzhJZzl3cUF1Tk1F?= =?utf-8?B?RW1kL08yR3pKYmJ2SCtEaWVPOFIrTDJIVjNRRTlHcmxWZDB5RE5IV1lKV21S?= =?utf-8?B?eXA0L3YrQjJyNm91STJUQ1R5eDQ1d3dGQXZPdjdqd2wyak44ZzB5VzhBa3pR?= =?utf-8?B?dDJUNVZlbDQ3YkNMU0NreFExRVJQN3ExcFFFb09Ld1ZHR2JuR2JrR0RMa21t?= =?utf-8?B?dVdpQVltWmJUZTRNaG9ZcGFuY2RWNElrbzZUcWRZWGpDNWZIOXZVYzM0b3V2?= =?utf-8?B?Q20wU0I2MUFsUEtDQmpRZ1Q2dTFxVEtad1hDNkJRN2FPdmdEMmFSUlNJUWVS?= =?utf-8?B?eG8xV29EbElQYnJ4b0dXNENQKy9kR0NUMVpTRC9EdmlGMjR3QnUxU2tORGdZ?= =?utf-8?B?SVRrcnhnNS9CQmJsY0xLUWVFckN0UlZYakp5a0RBbFRPMEJlTnhFd0IzbFd1?= =?utf-8?B?ZUd2bGN4eG1wd1pQWkFpRkF6SENpd0lYOTdsSEZQeWwwOEVUSXJIUDlXOG44?= =?utf-8?B?NkMvWXJ2UU15TThrMUthRGJ1UlBUOFp3ZjhlSVFxaE03QzZPdFVNY3VZVTRN?= =?utf-8?B?NmJiY3JLcDBIUlduOGUyWThsbVRJTGw5czBDVk9yQ1FLSFl1cnFzbWV4WW1z?= =?utf-8?B?ZllQMHVyU1JzQ3huQkZmWDdNY0YzbVdtTHpnR2hiTEY4emNqcVJ5cFprNG9p?= =?utf-8?B?WTBVNHJhRUZUSkhudlJCRm9MeWhZdVhsVzhsZ0NzQUNsa050VzZiZHh0WlZ6?= =?utf-8?B?Vzc2T3krejFURS9mV01CRUluTkZTVE5JSWJneXh5VTlXelora1hUaHZrZXR4?= =?utf-8?B?VlR4VENvTTI0dm9GM3ZlOVhTK2RwVG5UcjdEVTZnWnlUN2FMbDl4MWkrWmcy?= =?utf-8?B?KzZuUkE0cUYwTzJVR3BVeHlTWWFKS3NKZ3dOZGVKZXhqbHhyNk14V1BzZCtQ?= =?utf-8?B?ZWp3OXMrN0RiZ1VxRUpCclhxRFdMbEZzY2c5Z0VjYUx2djVwYmJ4UXRKNDJ6?= =?utf-8?B?RnpaWHplSUhBdVVuYWZIY0k5Rnl4bWNWdFVOSTJuZGx2VEwzbnZPVTJPT2N3?= =?utf-8?B?L3NoNmVKaEFxYmVvdnFScUFqZmxzNWVKdnpZbVFnbCt4TkhQaVpIWG1nMkpM?= =?utf-8?B?Vk85ZittTlQ3SmVZQjNOQmZpOUx6d0tYZVpnYkdiei9CdU4rRGlMWGdXRHhB?= =?utf-8?B?ZU5ENzIxcFZvQzhtWURwSXFpRDhOYVorMnc4NGtKR1N3T2tiNzZBQkxFSzll?= =?utf-8?B?M3owOXRTczM3N0Z3cjJnSzloQ0loNjhpNDVRRGp0bVdndzE5THR6ZTRaWnpk?= =?utf-8?B?MWl5RXNVaERHYlVFMnZET2JvTmc2RHVBemUyTXMrYnpRcXQ2ZzZjelUydG53?= =?utf-8?B?QS8rMi8xQ09PT2MyV1VIZ2FRandJbktobXA1R1RiQUdxRDc2YTZnTEkxUDBj?= =?utf-8?B?T2FEcXMwWkpjOEVobFVUdUJzYXNyTWRLeUNWeVBXd1pCaWM4RktmQT09?= X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: fc85f598-9d2c-4ba8-2de7-08dec0b1c27f X-MS-Exchange-CrossTenant-AuthSource: LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Jun 2026 14:18:03.8701 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: bbc898ad-b10f-4e10-8552-d9377b823d45 X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: wxuq9sgo5aoL0oc37r8LZoSmmPGUKU2e3mwXOdLiqnKuGVMURw2qjBJIp3CrduDa70MO9WP5j5apWMZxnsS49A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: LO2P265MB3626 All users have been converted to use keyworded index projection syntax to explicitly state their intention when doing index projection. Reviewed-by: Alexandre Courbot Reviewed-by: Andreas Hindborg Reviewed-by: Alice Ryhl Signed-off-by: Gary Guo Acked-by: Danilo Krummrich --- rust/kernel/dma.rs | 6 ------ rust/kernel/ptr/projection.rs | 8 -------- 2 files changed, 14 deletions(-) diff --git a/rust/kernel/dma.rs b/rust/kernel/dma.rs index 79125ee012a9..200def84fb69 100644 --- a/rust/kernel/dma.rs +++ b/rust/kernel/dma.rs @@ -1210,12 +1210,6 @@ macro_rules! dma_write { (@parse [$dma:expr] [$($proj:tt)*] [[$flavor:ident: $index:expr] $($re= st:tt)*]) =3D> { $crate::dma_write!(@parse [$dma] [$($proj)* [$flavor: $index]] [$(= $rest)*]) }; - (@parse [$dma:expr] [$($proj:tt)*] [[$index:expr]? $($rest:tt)*]) =3D>= { - $crate::dma_write!(@parse [$dma] [$($proj)* [$index]?] [$($rest)*]) - }; - (@parse [$dma:expr] [$($proj:tt)*] [[$index:expr] $($rest:tt)*]) =3D> { - $crate::dma_write!(@parse [$dma] [$($proj)* [$index]] [$($rest)*]) - }; ($dma:expr, $($rest:tt)*) =3D> { $crate::dma_write!(@parse [$dma] [] [$($rest)*]) }; diff --git a/rust/kernel/ptr/projection.rs b/rust/kernel/ptr/projection.rs index e46877a208d9..c6e9dfbc4f9a 100644 --- a/rust/kernel/ptr/projection.rs +++ b/rust/kernel/ptr/projection.rs @@ -351,14 +351,6 @@ macro_rules! project_pointer { $crate::ptr::project!(@gen $ptr, $($rest)*) }; =20 - // For compatibility - (@gen $ptr:ident, [$index:expr]? $($rest:tt)*) =3D> { - $crate::ptr::project!(@gen $ptr, [try: $index] $($rest)*) - }; - (@gen $ptr:ident, [$index:expr] $($rest:tt)*) =3D> { - $crate::ptr::project!(@gen $ptr, [build: $index] $($rest)*) - }; - (mut $ptr:expr, $($proj:tt)*) =3D> {{ let ptr: *mut _ =3D $ptr; $crate::ptr::project!(@gen ptr, $($proj)*); --=20 2.54.0