From nobody Tue Jun 16 03:48:31 2026 Received: from LO0P265CU003.outbound.protection.outlook.com (mail-uksouthazon11022121.outbound.protection.outlook.com [52.101.96.121]) (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 C77F5386C25; Wed, 15 Apr 2026 19:58:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.96.121 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776283093; cv=fail; b=IXPIU39+7x+D5TwgZYwh6saxhvr5AkxGWLK5yrPQ/0S+YKkvUG5fbVLcJvuxtt0r03Ov/SImQxSRIPeLw1ICAYZFIrGtrTMAG72KkH3BZVgBOcRIU+E0r+30Tn5b7vkhAST9DG0G0lgEP81tW7pq7bJA9H4OilBeyEWzYAuRK1c= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776283093; c=relaxed/simple; bh=MOjbHddF+m9qiX05U6dx3Wp0/wpA5Unrwl+MI6qb0cQ=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=imawgbgUXjmBb6ZQ8Xx341qPwoqwYrQThekl8k6hFZ/7S0mAsYI3eLzTunOeaH5/eal08840rMC3mj6mwNd2V151e8/cn00l1Whkwr5BheemjF27LMS6nkJSPg3Rylzc0QeZV5T8TLzZwpRXakv/toR2xfgU727vZ7M06CgvYUQ= 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=cbqrHZsu; arc=fail smtp.client-ip=52.101.96.121 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="cbqrHZsu" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bqKyx3tps78lKZGeaZtQlfH9tXg44GBlIwG/D+Puf9A8k1IihrY+j3DhkVt9otz52QuBem96eQeVbO2fSzLyHyeoa/yeItzcD4JmU6/f75ZcFdU4cwlF9WSofPmG371zt0ORw5tFlhL2fbLv7weziFpeYCe0jhVOV2njWDyCCsjIYzA5NIiBcz6aqeytCsU43qa5Gw+G2BLQdFbXQLvX06p9g9TENC2sLsrx3BcshF1oPqixXYvvAiUkenpoiFMUFezZcgJrS+h6SKSmrUwhUXAjz1urvONe0mmzY5LgsdI36T8yzGmLtgKNwzir+kCRnXZdGaxxSJpmWJ9JojnOOw== 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=CkuGSN8Tzs9O7o8HsV+r4BP4flEu/cuHTywGn45uTPw=; b=YbitpMC4v0qwGO5X9VpEqh0AAmN/RurXUbjFbUIncITBfyKdvD7wZ/6kIxI6tqTJMNBAIVYRqyM/TTlr5UidvWYkY2rXm0CxQY0w/QnM5T7pINUMAsIm9GrXxtr1iD7zgHMgUenEv8ymVapbfQOUZYhrRArBIBLvC+ekq/yjd2gG5/U6OyyT2G2mxwEcC9eMhilTES/1HGBHeizeQCiPzEusHUn2PyEyc9GEQf6kLZHS+/8SsxcjMiqg2K/TdVvTRRbwcnmBf4JPfq/KFxpkJ/OdG+rHJQKJUeBRhAcdWAJvW6sXBwPrRDdC5+wHVR+c3pcXyOQOEnRDiCDBwRfZxw== 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=CkuGSN8Tzs9O7o8HsV+r4BP4flEu/cuHTywGn45uTPw=; b=cbqrHZsuKZKGwxp7tXgx5lWmVc/nml2JOh9yaxwfMAhgzmjDDicLnZUXCNCQ0Yj0XpipJ0MpSvN8mnWvuqVMlNWKgL2SqPqKUp1Ca1wgTesc0WqyZmo2T6xtVAt0lYfLWz7b4M4BLVKI0eOQULEK48EQ0UtPoY8jklOXors93Ac= 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 CWXP265MB1910.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:32::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Wed, 15 Apr 2026 19:58:06 +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.20.9769.046; Wed, 15 Apr 2026 19:58:06 +0000 From: Gary Guo Date: Wed, 15 Apr 2026 20:57:12 +0100 Subject: [PATCH 1/5] rust: ptr: add panicking index projection variant Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260415-projection-syntax-rework-v1-1-450723cb3727@garyguo.net> References: <20260415-projection-syntax-rework-v1-0-450723cb3727@garyguo.net> In-Reply-To: <20260415-projection-syntax-rework-v1-0-450723cb3727@garyguo.net> To: Danilo Krummrich , Abdiel Janulgue , Daniel Almeida , Robin Murphy , Andreas Hindborg , Miguel Ojeda , Boqun Feng , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Alice Ryhl , Trevor Gross , Alexandre Courbot , David Airlie , Simona Vetter Cc: driver-core@lists.linux.dev, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Gary Guo X-Mailer: b4 0.15.1 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776283085; l=11209; i=gary@garyguo.net; s=20221204; h=from:subject:message-id; bh=MOjbHddF+m9qiX05U6dx3Wp0/wpA5Unrwl+MI6qb0cQ=; b=D65/MEx+U5dO0JrbYBlVLwxcIIJ3wDDUeuXmUH/9nJg6HKzRGNiIytAwyiwNcgKNRmhRLzsAW BV5blrxEQduD9YEl20l6W+vUeASKEilF5hLNyq8IjCImKFEF3OclSnW X-Developer-Key: i=gary@garyguo.net; a=ed25519; pk=vB3uIX95SM4eVrIqo1DWNWKDKD2xzB+yLLLr0yOPYMo= X-ClientProxiedBy: LO4P123CA0276.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:195::11) 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_|CWXP265MB1910:EE_ X-MS-Office365-Filtering-Correlation-Id: 3c11dfcd-115e-4f05-9ae7-08de9b294f64 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|1800799024|366016|7416014|376014|22082099003|921020|56012099003|18002099003; X-Microsoft-Antispam-Message-Info: 8Ola3aaNpsQZKJpB4aEpwriAqVgSCl9rLTpIElK63x2LBIRokI2SRYGZl2ks3JtzlfqTdVfo+E1ZwI1pkynTuHo5XOY1GgCTbueKWG1Hjh8H6wtIwQr6x1j7xBjet/erqeXz9urBe9LAYuOWuNhHo2ZH5JcL8xiXeSxRITjdhG/r9qgpD7Hh6fhOZEIarCarOfg/FVowfp27uxcgTxS8B3DsXpNzvO3cDpJNQjgebNWT1xLzLiKaaFhlui1qRKGQRsZPfx7a57xxWs31BcuOfddLg/6KzxMnoEJU74/7Fzx0d5EX8wPyM7ELfy1r8MEMc0YcYsI4/YxQ7A6R8blBwnh5eXl2IH5T/2xZfroo3ED7af3ylaGw4lF0BU2uHXTuHPtSPLWfi6z0lLcfnm01xmGgn0/0h+QiyTReK8q4bQWbT3uAu1/MzfeVWQZ80ri2RAAUHOFnuW1f3Jh3axSmQSBRoEbkZNCT9yvFO1ExXe2TYGUNK9Avb3QmB5XYOZXZSH71BzwtilP0uuhZskiMkSUjGEid6ZUTQJw0GjoFTPX9ET+4a8xD8Sg/tlp67UEGQuWlkBpDpvPnAHfXZ7m0OE6g3wrHLvbKqXO/iwdsRdIA3h6Y5zMbNtxGQHgVE4BoRKSvPgLa8gqDqF4brgDtL+ryVgNLr5+DmOef7XO1tKA2tyd8hPK12P8uLkQFsekVd99f0Og49W7Jq4o8VCMTBowwzNmC2eayzqdS/DPBlsE3Z6e74zhxq1BJ1CMgTG2ZoihfpEI/OnhO2XBhrn3t7A== 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)(10070799003)(1800799024)(366016)(7416014)(376014)(22082099003)(921020)(56012099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?N09PSVJJblFBUHZka3o4SUNlQnM4UTd1RG5DencxVi9tcVZRdHJ5eHVUZU9F?= =?utf-8?B?WGFsTTE0aE8xTXdGR2cwNEp3b0pmcEZ2K0FNaWJuMW9OWFA1b05yTnowV3Rr?= =?utf-8?B?b0F3TTUvcEppVFo0UHBEZGVZUGh1OWxnWGhaZ09oZ3A5U2NTaFRxYTNlZXZK?= =?utf-8?B?NW5QWE0wMUxQUHl5Z1NBdWZTYzhsd1BiR1RXYzdIWnVhdmFPMmx3aVBDY0Iw?= =?utf-8?B?RWdNcW9WbjRUd3VEbkEyV0lRK0NLdUMxQ01mclBxb3VVRXZyNkR3S2QvY1ox?= =?utf-8?B?c1U1VHo3ZDFHOFhyejRhQWVpYXJyeGd1OFgxS1ZMZ1hhcVVwbEpOTE8vSlF4?= =?utf-8?B?YVArMUc5ZVN1ZWljWUFBblc4UWxNekYxOGtjVmlIbGlPcHRVVkZkYkFlL0pW?= =?utf-8?B?dXFzWHBQd3RLRmZBRS94eEg3WjMvQ2Nyd3VMM0NzNy9xeStyV1hBYWxuVEYx?= =?utf-8?B?QXU0THFXMW9pbE1kUHhueHF4ejNiSU1ORldsQ3hOMzc2VDd4c01taFF6Y3VT?= =?utf-8?B?anVmcDdzNmQ0cVo1a0xkMW5vZTFyeThPRFdTbm44aDMvMC9QSjNOckkzZHlq?= =?utf-8?B?SWVNeVg3MDBtZngwK2tLU1dUSzJLTjdObDFpT0FjVnIrcVRESFVQNkJXY0Rq?= =?utf-8?B?NzBkV2tiS3N3UVF1Sll6cFQ3ZEdkWVpOM0FUZG9kVzJEK1VSUUhEZGdST2RY?= =?utf-8?B?cEFzeW8zNU1DaFFUNHVIWGV6QW9SWGUzTzlJa1JDNjRRb2IveUFLQ2NFSHFU?= =?utf-8?B?c3U3RGU4QVF0NkJvYlJSSmpySXFxSkZlcFpIZk8xRGZTU005ZnRXbUVyZVlj?= =?utf-8?B?T3hvWi8xL0xDb1VtMmxkZERTTXNyUEJkODVCZjFlckI2Ny9QTW14VnZHdFlU?= =?utf-8?B?aHp1QUVqdGd5THYyV01BdDJDR2lJMWQ5eElYaUI3QThFS256NnVMSU5RK1h0?= =?utf-8?B?aFBXbFl4SVJwL1dwYm9mT01raWRYMUNVSmc1aGhBb0hTQUp0RzI5VXpwNSsx?= =?utf-8?B?L1VpaGh5L2xRcDFJU3l0ZnBiTm9XdDJhN1BOZTZmVDRTbmZBSkZDQ3NJZUZz?= =?utf-8?B?K0lJRDFncmxEUmd4cGZXTit5QysrNGpXd3diSkN6N2pJOWlhUVFxSUZqTk13?= =?utf-8?B?ZWx3ZHk1d3I2NmNobU1NMDA4MzMvUU5sZElwY3JjUHRkaVBEVlZ1VmZNZkNS?= =?utf-8?B?Q0t6cWtwcEhMTmJ3TXNnamw1MjVDY082cEIwb2M0T1dhVkVTK01ucTR4UTFW?= =?utf-8?B?aFlZNlV6aWsrcERJdnlrMDVHYURLUkFybGpJVjdiV0JDNkNiRGxwendLK0Mr?= =?utf-8?B?NlA2ZGtuUm1oeFpibzRadXJPL0JReXVSRUEwc3hrQmJCVU92MHpRUUpvc3dE?= =?utf-8?B?T1JlTjJnaVJjMzhmUHd3SnVpZEhWUnJFZVlhbTVHUU5NQ21PVDJXNGdOdE9x?= =?utf-8?B?c25hQzVETk5BNHhMMXBBSGJNbTIvcWhGU0U5d3lqK3NZYklYVHR0cXh2U0Y1?= =?utf-8?B?bEc0OXp2THZIQVNTNjBFN29GMmtRYnRiZUc0ZEdkYUxxRlNwOUFyL0J6ejFv?= =?utf-8?B?NllTMWZBM0RkMlJXeGpjWHdCUm0zTVM2ZG1wQ2tWYWZBcEx4Mzl6d2ZLc0s5?= =?utf-8?B?NWtaV3lncWxGb0t6RzkzZEFwR2VjRytDTmJmT1lDSDcxRnVQdVJTenlzbjRL?= =?utf-8?B?MUErajMxSnQ3YUZPYlVoaFY0cGhBU2ZhVWc0L2YvY1lrNWhZck84UlVrZ0oz?= =?utf-8?B?aXdxNTk3ZmwzQldVY3MzS21UeU5PZTFwejNHR0pQVnI0a1VpVnFVSUtiK3J2?= =?utf-8?B?Ymd1cGRIbENKNE1vNHdtaVExRGdGeDhuQ2FnNXZoa3lCTzFnaytpN2grVlVu?= =?utf-8?B?L2c2T1RSVmNwYjBIa1RpTTdPM3JCWUNLWHdGV09XWjFwN1R5eVdES1JMbGV2?= =?utf-8?B?cVFveGRMS3cvdmc5bW9QMXdOM1creVhPWVRhaDZ4citRM0dwY2xVdmJ4Yktm?= =?utf-8?B?cUZSdGRIV0p1ejhTTWNlQldmZ1gxd0lzZHZvOENqUWlXbnlNWjJhWlJqZit6?= =?utf-8?B?VUovcWFEeW90Q2MrN2V4VjRrbkFOVTJFVzgyeFFybGFZRTNFZG1jLzdmWjF3?= =?utf-8?B?OXNjUnFNMWhPNWYwbm1mN2ZCVlB0NldUcy9jeVluamJFOXViNDBGOVZqeGg5?= =?utf-8?B?eVNsQWJSeWIrRnFsZ2dIQjE0RERSejYvUXB5UnhIZTE3bjNEUHRRd2M5YUNp?= =?utf-8?B?UlBnMUJzNUF6SjQrUldsdGdGOEFxMlFRYjhKZTBVVFNzQmZhalR1ck1iNGJq?= =?utf-8?B?U2FNanh5ZFhWYTdueVRDNUw2VEJMR05oRVF0Q2MwbVAxT0M5UXFXZz09?= X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: 3c11dfcd-115e-4f05-9ae7-08de9b294f64 X-MS-Exchange-CrossTenant-AuthSource: LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2026 19:58:06.1917 (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: 1jQ1gSmMa787laCq90oIyTYUyi6jqV9ohGkgQ9SbmfJNCrhMTgCgyr/ftIuTisSRkavyd6l6hx8C1+1KhKegAw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWXP265MB1910 There have been a few cases where the programmer knows that the indices are in bounds but 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 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, panicking variant is safer and should be preferred, so it will be left to future when demand arises. Signed-off-by: Gary Guo Reviewed-by: Alexandre Courbot Reviewed-by: Andreas Hindborg --- rust/kernel/dma.rs | 3 ++ rust/kernel/ptr/projection.rs | 98 +++++++++++++++++++++++++++++++++++----= ---- 2 files changed, 84 insertions(+), 17 deletions(-) diff --git a/rust/kernel/dma.rs b/rust/kernel/dma.rs index 4995ee5dc689..3e4d44749aaf 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 140ea8e21617..845811795393 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: +/// The implementation of `index`, `build_index` and `get` (if [`Some`] is= returned) must ensure +/// that, if provided input pointer `slice` and returned pointer `output`,= then: /// - `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`, `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,9 +42,12 @@ 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 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!()) } } @@ -67,6 +70,11 @@ fn index(self, slice: *mut T) -> *mut Self::Output { 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) + } } =20 // SAFETY: `get`-returned pointer has the same provenance as `slice` and t= he offset is checked to @@ -82,6 +90,14 @@ 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. + unsafe { core::slice::from_raw_parts::<()>(core::ptr::dangling(), = slice.len())[self] }; + slice.cast::().wrapping_add(self) + } } =20 // SAFETY: `get`-returned pointer has the same provenance as `slice` and t= he offset is checked to @@ -100,6 +116,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. + unsafe { + _ =3D core::slice::from_raw_parts::<()>(core::ptr::dangling(),= slice.len())[self.clone()]; + }; + + // SAFETY: bounds checked. + unsafe { self.get(slice).unwrap_unchecked() } + } } =20 // SAFETY: Safety requirement guaranteed by the forwarded impl. @@ -110,6 +138,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. @@ -120,6 +153,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. @@ -130,6 +168,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. @@ -208,9 +251,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 /// @@ -228,17 +274,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(()) /// } /// ``` @@ -248,7 +298,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()); /// ``` @@ -257,7 +307,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 { @@ -280,16 +330,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)*) }; - // Build-time checked index projection. - (@gen $ptr:ident, [$index:expr] $($rest:tt)*) =3D> { + // 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, [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.51.2 From nobody Tue Jun 16 03:48:31 2026 Received: from CWXP265CU010.outbound.protection.outlook.com (mail-ukwestazon11022074.outbound.protection.outlook.com [52.101.101.74]) (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 70C87386571; Wed, 15 Apr 2026 19:58:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.101.74 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776283093; cv=fail; b=mw2jyzB2jyuQ3piLFAQi7JEMyhIgoTgFZ1FNtT/5Iy7CW8RJO3+f+rpf/2yL/+KEkTIrQB5xVyi16f+DWnaTyj9JZ9RZUUwzAl10hwjazaqaxIbno/usxEapBqwc9qyX+uT+CjIUA4mDrUvKZ7FCbhnxf0hrrZ3uV37/UB7lMig= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776283093; c=relaxed/simple; bh=UhRRiSC/fJzIqFGzc8d2bQlud9AWS1icv1eLsg8ynFw=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=PzrDpXp1Ms3zLe+5c9snIkEhiym9db6i+5uQ0lEkaMijOyJLt1t3XDisC5noeuBNtlkjWLdjJzGBOTQ32LNBzlNsrjSoXG5wRGdDVoUvVA1Jwmu4dNCbJNEp5Q8VImtYS5IOrJ1FxzgGdf3+w8WTNQ4NuM43Vt8peX5XCeJNpF8= 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=i1lyYKl2; arc=fail smtp.client-ip=52.101.101.74 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="i1lyYKl2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=YDZrCHGyy8kVmcEI+3B4aS/ElN+e1OoTKHzuzycRmAQ/Mq6zTlkbNCfnFAzwcgP3Uj4Nv5wd8Hc7Pux9vSYlvdLYlDtTWKngnxicwbY8e0S7hvXYjvGxS6PHYGZvmC2jxaSeZf/LMRb9UKsqhPKXRYtjfsmEhiAwLBwKUgBJ0QwIwTGgS98hJtWkphO6c+dc7IfAUo18s2GC8aoUg0E+d9SixXezgVUJqU1soYmXNN3J8oM2AdQiP+HCTwRfedUtAhk96DxSeLVfcZo7ljIl+6KjPfdOz7dlMzLG9KsltDZcsTGMdoCeagJNKG9whia8RydOuSN7Bi9GNMkTnENcoA== 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=wpjY6jK4dzuJg9RjHWUzuRc9xXXEwcexrr4wnzfgOEA=; b=w3DNtADwPg+rZKTaEilPzaSwn7KsFVQDItqALct9Bm+VfU6FiFdQ/E5F7QIVFY4rfFkCwupy8OrcKHDRJeW9nC6EHv82a6JtmQIUFvBMp47tsy/wDbxgxpFp8odXrVmF+2Xf8XprdRtmgop9/+ddSxlEGACApuudPIsUKcGFc4Inyt5UjDDGs6I6DtrvLJUS9zMPVAsAyq25BVrXuR/W8d/NllHJXDJ55aUq82yDZMPdIrmQCZ/DPhPzgyOkZlxcDHNpIifQGNpu22LD+BYj2cEThRPwJmO5dbVZdgFIQVA69wx1Y6cfbpxBBUh+EmrD3DcCpCnYRGCjMVk0WKItDg== 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=wpjY6jK4dzuJg9RjHWUzuRc9xXXEwcexrr4wnzfgOEA=; b=i1lyYKl2kq/V8MCz7evJnpkarle+mt6aOzwLsAI4Dmzjfvyzz8famE1zQP64zBq2flRqAuJExLzWOUhUfFE0CN6rFJA3/IlqAcxT7DA7/i+j3d3mbUFRhe/+kwC4rv92qrE18Sd/535OyPFjwJISwUtaKrjvtdQrXMGbMEx+ETc= 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 CWXP265MB1910.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:32::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Wed, 15 Apr 2026 19:58:06 +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.20.9769.046; Wed, 15 Apr 2026 19:58:06 +0000 From: Gary Guo Date: Wed, 15 Apr 2026 20:57:13 +0100 Subject: [PATCH 2/5] rust: dma: update to keyworded index projection syntax Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260415-projection-syntax-rework-v1-2-450723cb3727@garyguo.net> References: <20260415-projection-syntax-rework-v1-0-450723cb3727@garyguo.net> In-Reply-To: <20260415-projection-syntax-rework-v1-0-450723cb3727@garyguo.net> To: Danilo Krummrich , Abdiel Janulgue , Daniel Almeida , Robin Murphy , Andreas Hindborg , Miguel Ojeda , Boqun Feng , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Alice Ryhl , Trevor Gross , Alexandre Courbot , David Airlie , Simona Vetter Cc: driver-core@lists.linux.dev, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Gary Guo X-Mailer: b4 0.15.1 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776283085; l=3112; i=gary@garyguo.net; s=20221204; h=from:subject:message-id; bh=UhRRiSC/fJzIqFGzc8d2bQlud9AWS1icv1eLsg8ynFw=; b=XcUKIpsjnLXZz7tCTlpJYhdM4xH9EH99h2FgvwhakbOolu9FZF2B0xOB2zikPnrKO2qd+9Uw0 y5lVGkvsUsXBl/B4jF4ug48bFcdQbGVAoLEd49rPNNFGHxBqP/b5f/I X-Developer-Key: i=gary@garyguo.net; a=ed25519; pk=vB3uIX95SM4eVrIqo1DWNWKDKD2xzB+yLLLr0yOPYMo= X-ClientProxiedBy: LO4P123CA0276.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:195::11) 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_|CWXP265MB1910:EE_ X-MS-Office365-Filtering-Correlation-Id: e3f8dca8-7780-461e-7701-08de9b294f9e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|1800799024|366016|7416014|376014|22082099003|921020|56012099003|18002099003; X-Microsoft-Antispam-Message-Info: C4/qb2tSAuoQud72PPIeEaCeAJ+mk6wpbaxXbaHJaLd//5HdkD6/dAEJyErHvTMLAVnArmZXmiMEOrrQrPVyXMbXLqIdKZVsQn/VWU7XY0vtuMFO4TyzcMh2p3IXTZ3GOJwyU/qKy/XYpgYK8WqC97chSvDsUop1w3fFYnGGCGFurj2cmBZ/akWMeZYkFlCUmfLWMopjEnfgi4ZLnYKB3p20kHGe5428uskesQTMrGxiA3jjRD7llQd0V9Ovl0ExFyI+LXYN2f37HZwE0ftcaWYuCGdIj8MRYSli1KBUpyuZCRrYMWTxAoNO3rOiL3//7giMVGieDURWvYYZfzDqZkbp62br1YEm0Ybuor83zgkHBGY6SjGADr7P1qFym/sZWcTvcZZJzCWYC2TCVKtJQPWKmLzq26p9HDT7NHB7bGArQrBKbKwDImgONNuDZxoXugMfiu7hpvCyBoGeg/E7eBCY2gzoNIOjYzZTPELM7jHVi2LgCsHyXm/cbn171J7uVsmwCOkm1hSCNFZsOWokonnZvRSLOZ5AqMnPOr5Tn9nF/nFj9Ga9nPdMK6GlY0kBGjS9LEpOrkAP6BLSo5rGX+M4h9S4e/mKhA9kWK0wdizKGA1+QdLjZ/mnG88uDNB26jwMcvq8kYhwcg+qliMwVzfR/KhU7K5XYorcIJWakIOSXt6VB7q3qKMM48dQisyGoO2id+wQu31yxfjEYVl5Wi7yjrxl/OCfets2Y4WMa5EMoSfjr8kZ6LK/1oCgAm4FFsPHLWYkwXl4Pv2J91QMhA== 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)(10070799003)(1800799024)(366016)(7416014)(376014)(22082099003)(921020)(56012099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?QlpSN1M1eWxyVERFQlF2bXYvQXVjcW1qWGo2MktYN0NhdjFhQTVETkd1MmQx?= =?utf-8?B?cE9lSlBoNi9lZnNYNzRIS0xQN2Y4U2JyTklGNG1venBMMStYN3VXdm4vNUgz?= =?utf-8?B?OVUvSXlRek1PdTZVcnQrZ3kranMvTUxFOW4ra1Y3SWltRFJPNVJyQmxUME1r?= =?utf-8?B?WlpSK2VuMUtVbUZQREVEd2FzWUZ2UnpROWtyeDV5VjFnUjJZUzBMdkYrRGdI?= =?utf-8?B?SU5TNlJJRVUyUndsUFZMVUFkNjNOblF5MkkrbXl4bkh5b25aWjBaWm10T2J5?= =?utf-8?B?aVluaVZETkdyelo2ZFlNUHFWUVpaWks0TDlrNEMzQmFWd1ZUS2R2ajJTaE5T?= =?utf-8?B?czFFaXlMSnZPSmhLcmFDNXF6NkNMK09nM0NkWEFHRDM0ZXVaYmZSRS9xL21T?= =?utf-8?B?bE54MXNIaWEya1ZaVFpCOGZpV2xRMmcwa1NOUTIxYkwyUDVGSnRxSHF2NUJn?= =?utf-8?B?OUQrR1RrY3NhRFd5NDh4LzBZOUd2Q3VsSVgwdXpJcTNmcmZFV3VpN1lML2lk?= =?utf-8?B?NHIwdkd5VXUvT2dUMTFWOHowTHI5NjNCMzRqQzhHVHloalNleFNXVkpuUWIr?= =?utf-8?B?RzBGbERaMExmcHI0a0hjVFQzMW9BMDhKMzZwR29pUmc0b2NlNnBlQzZsM29v?= =?utf-8?B?WlhMeW4yWkZ1c3lrUVZWUE1HaHFiY09WTHlqWTQ0SnovWXhIK25lU1RxZG1V?= =?utf-8?B?SjFSM3lXZnZhUldBcmUyS0FyaWx5dlF2M0JrQU1odWk0NUw3UGdpK3lpajQ5?= =?utf-8?B?SUQ1cGFDN1g5djAvcGNhaG95Mmp0dVkwMzRFRUlCMGFFOUpIVGUrTTRFSnRB?= =?utf-8?B?dmtrOGFuUExHRFJIWjEyNEU5N2pqM3lVMmMwc0dmR1F2MW1lbzdLMWlndGNx?= =?utf-8?B?Snl1aWROR21LVFpYVi93bGNkcGxsVGt5YmhCUzlBUVl1UEdjVys3cTloamFX?= =?utf-8?B?cFRVVVJtTjNibjNNUkpJcmhTYy9UK1c5cG0yR1BxeTBKOE8vUmFZaDNOczhY?= =?utf-8?B?U3o5U1NQVWUvTndIeGR4OUxUN2JTRnhTQ2VLZGRtcXo4RHNJMG5IZVE3Q0JB?= =?utf-8?B?SlJ5emRWa01ZVTV1eUtMRkUvN2ZaM1VzVkZHMGlSYk9lMkFLWks0clVOb2lp?= =?utf-8?B?YUc2SUNmUkNSQlZwWUZFU3JaSTlXWVJicGNYbW5GUEhVOVY5aktrR01VckR6?= =?utf-8?B?Z0tjRUpQdXAraXhJeVFPQmtJZmk4bVdjK1FBejgzWGJZNHdwc3VRL2xtcW1S?= =?utf-8?B?UjJaTDNPV2EzSUZUZkthVnB3VzJIbGtib1QzYi9zbE1yNHVCSGNWbm1rVTdM?= =?utf-8?B?OCsyWStHd2c1ZjZWVEdwWHJ1TWFLbVI3QjNRVE9RU29rU0ZyckpxMGdNVXh2?= =?utf-8?B?emlaTHQ1amtGbXY4aVNnZE1QUU5ZWDBKS1VmQTJxeWkwcnM3dEtyYWFJeVRR?= =?utf-8?B?TXJoQ2ZidGZXdHJnVk10Q3RORWZsellreGg4RVRiNExuUUg4NDc2M3gzTXJK?= =?utf-8?B?QlA3ODN3aEpLN0VFdldRaHY0ZjQ5d3FkdllWaEx4V1E1b3ZjS1QwdkxmM1Rh?= =?utf-8?B?TzMxL1VyMk82K0pwbXVaT2pvWm9MSEdlK1FXVUswNHdsaHJ6WnVTUGg5YjZJ?= =?utf-8?B?VWE0UkpCYnFEajZpMzBPOHIvTHNSbzh6dnM0NmRSenhPdGNOa1BmbTZiNXNH?= =?utf-8?B?clNiSFhoR0IvNmswUWU4dE14ZUc3WE9Dd3R1Yks1Z09mNDhIaVp6VDl1SFdK?= =?utf-8?B?aU9YWXRiYWMvb0grVjBJZ2duVWxoR0xSVFhuQklUUTM4cTdsY3N0bmVjZ1Zj?= =?utf-8?B?UXBZSlN0ZGFNbllNdnY1NUNKemM2RFVWMFVFS2ZlNkRzU2tUOG5OT1AwbTht?= =?utf-8?B?cGdDdFZiK0MwQXQrY05JMmJkSEk0aE85cnNtRHVtOWFvcHZJYkFFKzlsYlNs?= =?utf-8?B?SSt4WldJU01pMWR1eW1tRHV2dkNOVFVzQnpOdVgwbFVob2J3QlBqSlRtNlBp?= =?utf-8?B?elkxTXFNRkpjakc0c0diTjA1RzZPSTR3M3VrWmNYNElPNzJSbzBBRk1Bcm1T?= =?utf-8?B?NjZNYmhQanRWcGZmdWZIWXJ2M2dXbmJmVGVpRHkxK2NUZ2pYTWZ5RDhwbDZP?= =?utf-8?B?d3cvbHViU3FDNE56TmZ3QnFRQ3daSVZvdzFNYjlYbnhjNVNxRmtGRWRMN0k2?= =?utf-8?B?L2xhZU95Mm9QZ0s5cTZBTGY0b1dzSEdrbzVQV3AxMlZKUUZRZVRlUjBIVDB0?= =?utf-8?B?RWtkYjNKUEdjeUF4N1VNeW85VE5BTUwvM1dVdXNBZm1lNUhPTkcyTnlrTVB4?= =?utf-8?B?dldMeEtaR3pLSm9aOUcvQ0FadVBDaU5LTnFFQkJoT1A5d2J1Q1kzdz09?= X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: e3f8dca8-7780-461e-7701-08de9b294f9e X-MS-Exchange-CrossTenant-AuthSource: LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2026 19:58:06.5657 (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: /z3JXxufy70e3FLJOk7A/4c6UZM7xFJYalr92MELxDmBaEj8Et2GBU8cNvR5GaOlgvh/Sbw1S3V6tW80cEJoPA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWXP265MB1910 Demonstrate the preferred syntax of index projection in DMA documentation and examples. A few `[i]?` cases are converted to demonstrate the new variant. Signed-off-by: Gary Guo Reviewed-by: Alexandre Courbot Reviewed-by: Alice Ryhl Reviewed-by: Andreas Hindborg --- 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 3e4d44749aaf..d6382904a90d 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 129bb4b39c04..a2c34bb74273 100644 --- a/samples/rust/rust_dma.rs +++ b/samples/rust/rust_dma.rs @@ -73,7 +73,7 @@ fn probe(pdev: &pci::Device, _info: &Self::IdInfo) = -> impl PinInit, _info: &Self::IdInfo= ) -> impl PinInit 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 @@ -109,7 +107,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.51.2 From nobody Tue Jun 16 03:48:31 2026 Received: from CWXP265CU010.outbound.protection.outlook.com (mail-ukwestazon11022074.outbound.protection.outlook.com [52.101.101.74]) (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 4C2F2388369; Wed, 15 Apr 2026 19:58:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.101.74 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776283094; cv=fail; b=OX3pNBvNxrBT9F9TkUglVlKvhxLdIOTAJpPrqtNpuqsZraLrdK54i1uzjENxJDXoESZI/mHpOtBqeWRFABFSJKwkmP3RKbfcFeHfg3ZJqaPThV/Iwu/Nm05Axx4/QsEB+roZ/ERGoPcm3DwFcaJE1I+scu5ZKbFbSXeqr7LlYjM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776283094; c=relaxed/simple; bh=vQiN78STvYTW9CBHlHELFu0E4dV6C/Imopr+6r4WBnk=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=Tym2TKTtoJXzDpuyO9waYnUadgU9YXcZuS8IyiO+j9k7Lxf1X4pgKXWtlYrGsrAEbhIGg7SVyZ0Gl7TL7wDYXE7Cx9cp0falHkRKmSVA/CLPpS6tugFpGG7bUHOTmyN+idYPZdtGZ2WncVMdDpYU+bcXCev4kLXcfalqQlGpO0s= 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=s51LaD46; arc=fail smtp.client-ip=52.101.101.74 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="s51LaD46" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=S3LxmAmMK92zSvQhTfJ5tRqp5myOaXRt2qruGB+Qw7EETknxaFSXc47JNZzy4Di9WtGgCDaimKbgrL/y+THBLTnaZX5EUoJ8z/PRKUr/UNMkBwmtrMgmgmt/12X1OFTGlrYDmWOzgbHkokZ9c4tSDS5+SEq8cgTgXV1nEU90brlQENLoVAe98g41zgXO2wPKoiVhkfe41QFzgHuJddp4xOQw6pgmCYThKymxFBkFFK9Aw5G79BqrfbiWFfRdUQ/fm40POvucgQ/6AYy1M8KHfFqyiT+lvwWMo3PotVVMnDoYzwsCtkiYmVdYa+zUBygoEQjQ5CciRmqRUW5Jrb6QFQ== 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=VZIiLi9x3fE+V2ejFmr/3EeY3ITUEFCcTPgkvfGfqBo=; b=NgTuOH+Lhje9QqpOjzob/iuvfm4191vesW7+bsyRs1wUSdmYSUXbg7sSqrT9A1c1hiAGHGtGWHa4VYzQixTfAjW8oiQrlylHdl6cvnzcFDVHhLRvvxEr1ybtaGZwpSVULEaI/t2xpOt9TBsLPFYEDSdwlHMs5TtdSpOIuwATupXrC9YZghjeJ1i3rr5UXdKXsSXiso+cJrEvN8ORPOIU7swR1L5xXtHNbCa6ac4oPJXtSD9i3sQC6tSO5EqyOaS27573Az3G1Zc/lXQ0u92QdwyVhPCK8u3wQm+JoDUKQubSvCElRAC9QzIED2cvXeNKJ5GmSC7uwNdi6SmUH3f7KA== 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=VZIiLi9x3fE+V2ejFmr/3EeY3ITUEFCcTPgkvfGfqBo=; b=s51LaD46gcbqlh4HbxSZicIvvJEfw1CqYxDVdDTPw0wevDUOkc8sJe6yW6VNMeYQoZDqCZvCNuwcOedU0nHVbT2NOoLi1r5QAowo/T09BpmGPIGc7ckXkYFRD8AMROsb6OZjyflSbqfuVAxzlhrlLHT225CFNoPXyDyzQ29a1tc= 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 CWXP265MB1910.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:32::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Wed, 15 Apr 2026 19:58:07 +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.20.9769.046; Wed, 15 Apr 2026 19:58:06 +0000 From: Gary Guo Date: Wed, 15 Apr 2026 20:57:14 +0100 Subject: [PATCH 3/5] gpu: nova-core: convert to keyworded projection syntax Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260415-projection-syntax-rework-v1-3-450723cb3727@garyguo.net> References: <20260415-projection-syntax-rework-v1-0-450723cb3727@garyguo.net> In-Reply-To: <20260415-projection-syntax-rework-v1-0-450723cb3727@garyguo.net> To: Danilo Krummrich , Abdiel Janulgue , Daniel Almeida , Robin Murphy , Andreas Hindborg , Miguel Ojeda , Boqun Feng , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Alice Ryhl , Trevor Gross , Alexandre Courbot , David Airlie , Simona Vetter Cc: driver-core@lists.linux.dev, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Gary Guo X-Mailer: b4 0.15.1 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776283085; l=1889; i=gary@garyguo.net; s=20221204; h=from:subject:message-id; bh=vQiN78STvYTW9CBHlHELFu0E4dV6C/Imopr+6r4WBnk=; b=Jo5DImdT15KQ7gh5mFVa00sTqdvX/mWnC62kLa+/x6sRnCdDU/CbxeSg5m/EH6OscR7eo83kz DfLocvnVtgJBtWYbcprgT09VC7PlAcCBRKwmQ0ejnHNpdb72LLRo9Yi X-Developer-Key: i=gary@garyguo.net; a=ed25519; pk=vB3uIX95SM4eVrIqo1DWNWKDKD2xzB+yLLLr0yOPYMo= X-ClientProxiedBy: LO4P123CA0276.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:195::11) 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_|CWXP265MB1910:EE_ X-MS-Office365-Filtering-Correlation-Id: 445bf1ea-2926-4f85-1f53-08de9b294fd7 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|1800799024|366016|7416014|376014|22082099003|921020|56012099003|18002099003; X-Microsoft-Antispam-Message-Info: G2uvZw/EZOpTi9yWTSNH30Kk033nuYspih9BjNlBTq0jiXCyYzLGVKaW8kRr6ZjdE7lC/US3YX0wKM1JGAqa50td550ZUQDNPcN7HcorKiRbYamYsuYBb3L0xVhaP3+mFlj2pelEGuDlEp8rpwkbkQlOdwPP+Yue2/DGzNhFwbJlIyJ1Ol0lj0OKPzIMo+f/4xvK2+MQE0Is/nKbHLmePMAjwRqfSYHIayoOJ3xHBV/Hr4ZpQIICPXHV09XTKQA6BSFWRqjpNOJ3WN0ulQ554d8Tbd5upOoqO5JWL4GPQIBimBVoAOmttFQA4eIhzdaHjpDuLC84KhZiz73rk1S0gQ4giAvPU3jJAIBi3E9uT5SGpaTjdkdRmQfATBYZVBntzvYz0eNuVumVBmkyvK6wUdfI/cuC+35L1LCcybc/lW03R0ChWnMhnG4dmynNwgT72Uw++aa+lX4qq4bd5/ntOptLohnmWodrIuEGYASlimtWVlHE4TyCf/XJQmhNKGHUR88nMt8qvPQLVKVpG6lbqlmCzdmdsPUXrks0NU/E2wb8g+LW4aZYnD91Tc/LsbpNx8hRO93Tm1GmvJ4ifaPyEpuNEGqD/rkV1qgbVlqitbatgiEwyAojEhl3Tihr+DKc0wPTkZrqscUFdbxciRbWutfck4CeasPZ6L+4G64ZOM82o6tr00LbxafXKN4PdQp0KE3TFT/BTZ0cIkR31bGlWaKAAUn2Dzdve9LHZEgpszWYyjga2s+uC2kN8HlfCs/zeJ9lRUEfivLT+wklKjW0ZA== 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)(10070799003)(1800799024)(366016)(7416014)(376014)(22082099003)(921020)(56012099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SnVuQll1ckpyWEo4aHZ6ZldCSFI3KzB0ZXNEN1F0bThQZ2paS0I4QXVhaEJU?= =?utf-8?B?ZWllVW56VU01U0ZLTngzQXpOeG5pRStUbUU1N2FDbmJuTEpES2lRMjJENzhZ?= =?utf-8?B?VVNhT2x6c0xodE5GbXBYTHVNbEgrVW9GUnBLdi9JMzFMMTR2U3EzeW5MY1RM?= =?utf-8?B?L0RRdmhvNjdCOGhGRjZESlBTVDczZk03alpTTXNwN2dXN3BUS2dxQ25la2NJ?= =?utf-8?B?b1FzNHpKSDl2TVY1RSt4UnNuUkhoalVuSGcxcnlXNXoxTVN2NGJZL0YrdHdv?= =?utf-8?B?dzV4NW1GMk9PcVdpTjgyNUNqS20vYkdRTEs5YUZpWHhQOGYzTC9ib1JxRjlu?= =?utf-8?B?eUZITDFmdzdid0hiNXNzdytFWTFVMUUrMU56TW9XOEpEYW90NWh6VUlvQ0Nq?= =?utf-8?B?WXFKZk8xejUrek16RDBwNmMvN1BsdldZa01nUjVlUmE5Wm9paEJHa1FWb3ND?= =?utf-8?B?OWpqUWtlN0NBeVJTTGJkQVRUcmZQYURCS094Z0dPUDdJT2VmNkMyNEpROXNF?= =?utf-8?B?d250SnIwU080R1l5MVhEZy9YbjdTT2xudzBjMmZqdllDYVhQNVV0ckt4UWhH?= =?utf-8?B?dk01S0h3TWZMaWgwL1ZzRExCTk1kaksrNGtkQnNXUTNQR2RoOG5RZnlIQjJv?= =?utf-8?B?bzU4d3BVY0Fza0ZzYk1kc3VSWXZoZDg0RmQvMExLZk9yeWRMS2ZCamVNLzJT?= =?utf-8?B?NzRIT0FyOGFERkVFTnJVZW9FbkxMbGQ3Q0tZYzhpTm9KaGZvd0pzRENhNWZ5?= =?utf-8?B?Wlhnc0JJUFJQMkNlNm1TK1RVNjJaNmtrTlArZ3VVU2dtRWJMMEduQkh4eDVL?= =?utf-8?B?M2hMRjZHSFhHNDdsMWx2ZXFaaks1VlV4VWZEWXAzZU9MWnUxbkF4K05SUnBK?= =?utf-8?B?cDBaNmhFQ3pHMGJHbUltS2U4amhOYlorbEREK216VXBpM1JHNG9KY2ZrOEFF?= =?utf-8?B?Y3kycStsYWhhakNlS1VXaTkvR1F4bE5Xc0xadWFtVU5uQVY1cFdaZlZzZmdn?= =?utf-8?B?MC9KbGt4cERVRTR4OWViWWNiVUpldVhyenBOSWEzOFZkajVPODYwRkQ0cWdI?= =?utf-8?B?cGhremFOYTgybWZwUmZ2b0tpK1Vjek5WV3JRMWVkcFhxdGprdHpFR3BjTENM?= =?utf-8?B?V1RaUGkvYjFIWWc1MSs4QnpLOC8xRERLS214SVdCQ1JJTEkxcUtRSjBBYkM2?= =?utf-8?B?VlArcHFSNjJ0WnpEQTJqN2N3dzh3SXQvKzQ4cDIzR0JFdGgzakZscUVYT0Uw?= =?utf-8?B?MzdWa0FRNkRvdWY0RFZqKzcwTE92Z0RxZUJvYlQyVWRmaC9VWEFhaFpVL1JZ?= =?utf-8?B?WnlaU2ZrTlpyZ1c0cG5jRE9XSEdkamJJNjJ3M2pyYWNlMENUU0RBVDFQVlBa?= =?utf-8?B?UE40U3BuOWNOa01kRHpGZzZjOXJ5TlB5a1d4cWdsK3c5YWdOaDVibFBRamFF?= =?utf-8?B?TVVqeUVJa0ZuKzQ1cEhrTFUrNXZTQXd2VlkzQ3A5Z3NaVFZGVzVxSU5IRVNl?= =?utf-8?B?QmpQZ1RxYVFOQ3pleFhsV3lsUUc0aCtmUExyd21VYmlod21iSzZFcktsVDhY?= =?utf-8?B?RWVYeHIwSjRKUmd2a3ZQSHRqMXhLU1JyYlM4cGk0bDIrN0llTXB0N3NuSmxL?= =?utf-8?B?dG44Si84T1BzdEZOZXR2YU01K3dMOHZuVzIzejU0a3pDdm56SVJyUFJCTzV1?= =?utf-8?B?eDJEdHF3bnFrVUlLcEs3SHJwREtxbUh1eXVQQmJTSWVCMkluL0tMejFqN0VS?= =?utf-8?B?eHJObGZZNnJSVXlMOUJiMnpPS1Qwb2lza1FsLzNUS3N3WDhHekJWd3Y1ejFU?= =?utf-8?B?VzJXTWovU2ZwRkFDWm5oZzNhN3lURUlXZWdDWEZVZkRNMGxHRmdEajlJUFpu?= =?utf-8?B?QzIzOGtQUzF0ZWNyeS9DZmJvcklVVHpFNThObG9CcHlLcy9Xd2xWaTlxWDcy?= =?utf-8?B?STZWb05mNFBHSFBBMk1YNVlSMldMaWVaMmxJSjczaWpaWXBKeXYvZFc3Ym0v?= =?utf-8?B?S1Y1eno0ZndQazFyOEdjbzVTRGxCdnhVTnVvTWIxWEFteXRlZjFQKzVuVytG?= =?utf-8?B?MGsxT3p5VXNhcXZVNEZDL1JBZXNLSGx3K0dLbXk3aUZhTDlEbk4wUnEweWZ1?= =?utf-8?B?TENGc2lGRFNHOFVEZmlUKzZZMXZCZkhXRWRsV2E2blZGVlhMV0JPWjNEcjRQ?= =?utf-8?B?TjVmdy9vdjZqcWFQMVN1bU5LNUsrL0FaU1h0MTZhQ3hVZldaVUM1YytUOGlv?= =?utf-8?B?OHlNUDNKRjhod2RjZS9LY3g1NDR3TjR1OW9EUm1sKzZrOS9oM1VwSFg0Nk5h?= =?utf-8?B?dzhIMG9aZjJvQ3dmODg3bDJhZVo5Tk5RVXRtc1BSdktkMHhZMnBNZz09?= X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: 445bf1ea-2926-4f85-1f53-08de9b294fd7 X-MS-Exchange-CrossTenant-AuthSource: LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2026 19:58:06.9423 (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: 4PqoxCme4zarxLzsI5mfxzbUDon2XjzsRWn3p4J6B/+3r359PP/dJAoSBowPwNzWjAezXXKV6GCvhc9ySiaLZQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWXP265MB1910 Use "build" to denote that the index bounds checking here is performed at build time. Signed-off-by: Gary Guo Reviewed-by: Alexandre Courbot Reviewed-by: Alice Ryhl --- 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.51.2 From nobody Tue Jun 16 03:48:31 2026 Received: from LO0P265CU003.outbound.protection.outlook.com (mail-uksouthazon11022121.outbound.protection.outlook.com [52.101.96.121]) (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 BA1BA38839D; Wed, 15 Apr 2026 19:58:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.96.121 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776283095; cv=fail; b=ZWQvpn415wfG35zmexcB5qAufAepf5nrRk7YcZ38csWcPiQeGBR0w4Xs89EuTVYxyEvwgU+PEDo+TXajq9+POF3cA4ZcL46exvpLY2CSwKCPbPT/S/cuiVPogWxlQz5vbkMHwBg7DLknjddQEyDEt7L8ApYOZGkO4pGR7JJPYIg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776283095; c=relaxed/simple; bh=mcyeV5VSe9VoPwRUlqA8EQHAYKqTk1EnoUNnRJKGE2I=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=CmN9xO8A5M7Cs8Vg/al0SbZXAGQrry0y8kCznF+JveNGtuLLFt2pJ3mQ6BeoLaodtljyyr2j67a+t2vOLMMKbvVuzyqINdRKz704YJwDUUYekKjrax8GieyiknTSb5lRO9KoAK7S7i/R0PY5P7vfVZlFMBF7ev7jfEKXyZQfqBw= 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=dvxF3rvC; arc=fail smtp.client-ip=52.101.96.121 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="dvxF3rvC" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=eHin922yTK7lyWBpYmVQuwAWzsaKPKxosvP5Iahc43Cl4gcgeh+kl6fjnPspDFyFRrttC+PFpJ4r/3/tQn1bU9+BB7j7+tuZZprY9V4HTTf10C5LXgzooqmvL+Iix8NxJ92ziq9wqZpUYU+IKr+grzt1GItfjwlvSeaVbqoQeV39kuYgepedZLYSWTH7myPL0sdz2jPvbTSR1FM8rhOgPa1JxZw/ullSxTrixqBEN/6Tz8LLLDBawggKnO7Z9OPAEUcYDpVv/j/y/todAqWIIET+LGlGN6qV4xXuiHjwBQEupM9Z1EtjNndhCP824e/FwCHED9Vny81UHRCUaso9Cw== 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=VijXKOez8JTXMULaaSBbV1rN3Xbqrnh93V3PKryyH1M=; b=XbDjhCkZ0d6ami9/k6o4pPlTeQVEo+pWto8Wgk3B9SM7OGawPTrxhxFDX+jVxYbiMOoIQn+bsxJh/eeA2BoGjyCmJvUIscTn0/ITMxmMk9uBNcfl5h0+3N3kJd2a3InIZT3qxB1Iu5Om+QVa5Sq8gfaQNE7h1huwDebaAIyLgQ0zNAh94c32OfMjLKiHHqxKLJ1X14XJ91bH1O6gWgnGk/ZkHuPhOkduy/mvg1GmszR0xN5KoILmHf5kcGhN+BKPF81SG9YWiYem/mfJAbZAFK5d59XUxpmUGE2hRFdzJmNck0Ffp144OPRA2cn8QHFkagrb7uGvw/3yJKpoAKWPyA== 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=VijXKOez8JTXMULaaSBbV1rN3Xbqrnh93V3PKryyH1M=; b=dvxF3rvCavCD00NB1QKgbPPZ/myBv0ZObJWJ10GXmiCRNss6haV4nsZjhY+jh68k0g6uZSPKlONwplrc0/+tw2NygId5u0M0l2k0QPOrOdPuDH2gKp2mjnEqIbIrM2PNla8i5TSbUc6hFwDKoMgF5uW5fFyPG1Oq+m9nEpggei0= 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 CWXP265MB1910.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:32::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Wed, 15 Apr 2026 19:58:07 +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.20.9769.046; Wed, 15 Apr 2026 19:58:07 +0000 From: Gary Guo Date: Wed, 15 Apr 2026 20:57:15 +0100 Subject: [PATCH 4/5] gpu: nova-core: use pointer projection for command queue code Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260415-projection-syntax-rework-v1-4-450723cb3727@garyguo.net> References: <20260415-projection-syntax-rework-v1-0-450723cb3727@garyguo.net> In-Reply-To: <20260415-projection-syntax-rework-v1-0-450723cb3727@garyguo.net> To: Danilo Krummrich , Abdiel Janulgue , Daniel Almeida , Robin Murphy , Andreas Hindborg , Miguel Ojeda , Boqun Feng , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Alice Ryhl , Trevor Gross , Alexandre Courbot , David Airlie , Simona Vetter Cc: driver-core@lists.linux.dev, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Gary Guo X-Mailer: b4 0.15.1 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776283085; l=8687; i=gary@garyguo.net; s=20221204; h=from:subject:message-id; bh=3TvcefFkmp7SinnBoGCfQImBR8tVtz38PnzWPJ/7XgQ=; b=bX/mQCL+8UnTRSligegKb+kaVbYMdqfHiCmIe3gDbLwwU/NrzOlHoFzKp3fDB+QGvT2XjUgus rrW+o8Cp62uA+UOVO4VO2f2shwSYBaifV6xH4fX0fUKpqN535FsuYiS X-Developer-Key: i=gary@garyguo.net; a=ed25519; pk=vB3uIX95SM4eVrIqo1DWNWKDKD2xzB+yLLLr0yOPYMo= X-ClientProxiedBy: LO4P123CA0276.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:195::11) 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_|CWXP265MB1910:EE_ X-MS-Office365-Filtering-Correlation-Id: 1c30c28f-c652-4b44-97dc-08de9b29501a X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|1800799024|366016|7416014|376014|22082099003|921020|56012099003|18002099003; X-Microsoft-Antispam-Message-Info: C0ukyxpKbRIWaeOB+adwSY9rixGbDSJOI7nNvXX1kGdSZndYHVWdCtmmn6S9G7T2/byBMzq62kXumbCudrSGxjLM5kFitPm3kbo1HxoyD7WBUSKmA4NGDgT9JzFVRRxjUNWpyGIrx2ah9RdWvUj5MzUk1Ke6gOua0SFpsN9wg0mUzxTVkWqGZRmcYa/RGHZCaLkU1jq85NwZHr7jdlRIZ8U9rcerNcJNzUqVgF0ZsPXdmjk7X0RCXR2yndB1wv5Ss9q7gS6/WjUecD4MWIrrVx/QrrrNiq1vN7HpeGCPG2/1d6rcAZVFciMtai4hFSGyVv8g3JHteyscX9aamzWNtF44h/xSRtaxXwV3y8aOOa132sSKiRfbPPNOZolgO+UR17Ha102gU6o2SSNHxif1lF1fqJ27AV1RKg2tq37Hpkon4JAN4h38FYObqrUWpgUIZDxvBsu8xTez33FUV5by9bb0YhUAPaFcqJVib6xYtae/kg9guq4LNH4tYneXzPhd+CF6ABEuWyTUcl8GZtNDPOqralx8ElDJ7IOhoq8rFJbEj2KrVaT9tPGUmdJJN97D3ko/MJXMfUinnOpMDOM2hyaE6oR8wY5YbZn85IQZDjtX2ieKhphaRmVE1z1Ywpb2arjc3ibwi3M6uvkZsFIWSqx/H5FSHbySaZdN89nYqtHPQUhgiOyXJfQO2wCNGA3lidjMYYYenVQSPoIkf7FPPU1FxLWUea021y5aZdY6p5+VOitOVMrs/Pn0GTPjVeWduC1kJybuAQlL3r9V1lLAkg== 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)(10070799003)(1800799024)(366016)(7416014)(376014)(22082099003)(921020)(56012099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?djNLTnNnOG12QjRQT0p6d1dwdUgwbU90S2MxUzRzcXdaZG1OSUlOUXM0QzZx?= =?utf-8?B?K0ZmMElsZlQzbkhUdGxyVjREV2VhZkEwSzRuSWtDSXQ0dmJ5MkdkalV0NTZC?= =?utf-8?B?ZkpDWXp0Q1NubHloazkvTlhMbkRHTmtYaElwbnpySzVyS1Jzd0tpa0g1S3l6?= =?utf-8?B?Z2VJRGRGVUJOV2YwcHg3MEZtT2lEZndFSlExWmtwR0FsQnEwUjhaaFA2T2lr?= =?utf-8?B?VFF0NTFkdW9PQ1A5LzRIY25IejNiV0cwT21aVFVjVC9mVk5EbEkrL2xnT2py?= =?utf-8?B?clF6bkNoS0VjV3pWZldMcmxHTU5wcXJ5WG1Kb1ZUTE8vRWVsNXVqMnpPYkYx?= =?utf-8?B?UUFiaG54WlVNdUJWajMwSHMzTUJsTStxSlFxSHVtRnk3VGlNS3JFckJEUnhN?= =?utf-8?B?WGlPM0twWGpLcHZuVnZyUlBOTUpIV2ZQeC9LVU5BOHpnSld2SmJHOTd3L1pP?= =?utf-8?B?Nk82VnozTlFLUDlxLzVHRzM3MVFZNHh6ZUFwUjc0VzlIa0RLSmpUbnV3THFQ?= =?utf-8?B?bFVCcUlmcTN3Zm42Qlk4a0QvZmFlemM1MGQ5NWtpZjNyVWJYeDhDNEYzUHV0?= =?utf-8?B?M1J1YmlkZG54S3IwR2t1emtoY2VSRWRQSUZYZ0FyT3pDVlorMjYvTjhyRnRw?= =?utf-8?B?eGxNdlBUc0dyNmt0RTNMV1p5YWo5OVlNaFcvZFdFcEJpa0RXNkd2b2NzdkVt?= =?utf-8?B?SFVuZzU2QVREY2Q5L0F6UG5UM2tSYU5YRVhOWTV2ODZnc2NwejZLY0k0Ry9j?= =?utf-8?B?TFNiWHVnaDdyemZSY1JncEJ2RmgxdjZFSlBMaEFpUUJuQ1M3TUpYWmZ6cDlC?= =?utf-8?B?VVlUaXhGN2hYSDhWVEhtRGF6OHFpRUFOT3NwTERZV1hYM3BicEV2NXJONE5L?= =?utf-8?B?RU04VlgwWERzRC9NOTRBRUN3eUFTMFN3ZCs3VGs2QnQvZXRIM3RSQzdMVEE0?= =?utf-8?B?SkxWQ1BiNEZHRGpZRmNhQnpkZlVQYlU5TGdUSFNRZkFJUGFrMldrT2NscVQr?= =?utf-8?B?R29wL3U2Y2FjcURSVlhuelhNYWs2d2VZS2J0SUM0SlVGSFpEeUxhZmErZjhU?= =?utf-8?B?QWF3S0VBcmVmc2pIRytyendZYlhNMEFtcGJsb0VyRHFrbjk2MG5EeXJjajVj?= =?utf-8?B?MGZUaDY0Znd3SmJVenBJRnhFQWFDd1RPWElyZEM2V3R6U3BubzRWVU9nSUpT?= =?utf-8?B?SGVGa2RyWEVHNWpZaitVNGdyQkVBRU9TRnRTNzh3K2xqSEJtR2VNK2dNUjlC?= =?utf-8?B?aC90bDAzNElVK1ExbTYzblQ2U0ZFRi9iQWNsemViUTQ5dk9kZ1NpVU9odUVt?= =?utf-8?B?ck5JdG1KcXNkbk5OQ1dKaDJ4YjBPYjk2RmRxd01IOFdyMmo3NTJWdVA3Tks1?= =?utf-8?B?dlNPNDZnS085NHJEOWZUQ2hsREFuaGxFMW9XcHIrR3F1MmpteGpDTnNBWUZE?= =?utf-8?B?QUJ0aEhlL1JJUFpEaHh2ZnBLbUlPbTBMWk8reXU5MURncFF6Ui85MWRwanBs?= =?utf-8?B?VG9iejIvR3d3Sjdkc0VXVFFhdzZtM3AwVXJXZkJYYTdOU21VTWlmc0dJNERn?= =?utf-8?B?bUFzZG9FbUlMVDlCZVEzaXg0TkNqak4vRy82WGx0VUpxczVJVm5xckxDMHUv?= =?utf-8?B?aGdWb09mekRkUndNOFk4TE5Vb05NKzh0SDRFUzRkandJZ0tJaFNJOEhlZVJz?= =?utf-8?B?K2Erb0x2VkJ0SUliQy9PdmY2eUZ3S1grZXB2QmZ5cHVoQVJqOWd3SmNuT3JO?= =?utf-8?B?akJjNHdUWnlsZTFjUHNYM1dpUzlWOHRURFNqTWtLaXY3UW5iZDNHd3hQelNl?= =?utf-8?B?SXZiaStGaUFXc2VFbHVsMEVmUW5pWVpNY3U1bHVwVGt4MVYram5lR1JRRVZZ?= =?utf-8?B?TzdES0lrUFMwTlBMTWFhZUNtRnBwcHBSYUt3MThlWVZTejNNdEhySkc4bjBu?= =?utf-8?B?S1JMQW1DS0VrNTAzNkVYSkN0endFby8yTVFxNWpjNllDOXpIUGZsWmhHbzdE?= =?utf-8?B?eld2WmFlZytmYUtiSVhYOXRMOWxrLzA4eElKazhXSHJBVEZYazZJTzZlTHFk?= =?utf-8?B?enUveVpVb3gzNUthYm43OU9oYmg5MEREdXJyMHNVUTFoc1RVQTRZV3AyekRQ?= =?utf-8?B?R1lzRVp1ckV1QmhWY1VyaDFXWWdMV1lBOEFGK2RrdTNRazdiekcxWDNXaEh3?= =?utf-8?B?UUhCMmFOL0YybURmTXE2dUUxVXJ5dndiUVVhdzRpUW1TSzJxc2I4RGtINWpG?= =?utf-8?B?SWlPOGlBdUhBQVN6TVpGUkpvajNGbExOZVVkVjRkQldNM0lHOXdYdFFTWE4v?= =?utf-8?B?SjVoMkxEOVQ0VjhRcjJzVjNxWG9lM2UvQ3pFU1dsOWowMCtYdlRwdz09?= X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: 1c30c28f-c652-4b44-97dc-08de9b29501a X-MS-Exchange-CrossTenant-AuthSource: LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2026 19:58:07.3725 (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: HALnzlO/VhvmQ4I7lB/Ic4n5BuHnGcXOvKfULkwqniYap7KY5HTwTcILRj3+F2AIHOKTfiU0CcdmNGuLLlg6jw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWXP265MB1910 From: Alexandre Courbot This has been previously attempted but missing compiler optimisations for older LLVM versions cause build errors. With the panicking index projection variant implemented, replace the manual pointer arithmetic with projection. Signed-off-by: Alexandre Courbot Co-developed-by: Gary Guo Signed-off-by: Gary Guo Reviewed-by: Alice Ryhl --- drivers/gpu/nova-core/gsp/cmdq.rs | 106 +++++++++++++++++++++-------------= ---- 1 file changed, 60 insertions(+), 46 deletions(-) diff --git a/drivers/gpu/nova-core/gsp/cmdq.rs b/drivers/gpu/nova-core/gsp/= cmdq.rs index 1c9b2085f5e4..0b51e10e2cfc 100644 --- a/drivers/gpu/nova-core/gsp/cmdq.rs +++ b/drivers/gpu/nova-core/gsp/cmdq.rs @@ -256,47 +256,60 @@ fn new(dev: &device::Device) -> Result= { /// As the message queue is a circular buffer, the region may be disco= ntiguous in memory. In /// that case the second slice will have a non-zero length. fn driver_write_area(&mut self) -> (&mut [[u8; GSP_PAGE_SIZE]], &mut [= [u8; GSP_PAGE_SIZE]]) { - let tx =3D self.cpu_write_ptr(); - let rx =3D self.gsp_read_ptr(); + let tx =3D num::u32_as_usize(self.cpu_write_ptr()); + let rx =3D num::u32_as_usize(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[build: 0]); + let data =3D ptr::project!(mut self.0.as_mut_ptr(), .cpuq.msgq.dat= a); =20 - let (tail_end, wrap_end) =3D if rx =3D=3D 0 { + let (tail_slice, wrap_slice) =3D if rx =3D=3D 0 { // The write area is non-wrapping, and stops at the second-to-= last entry of the command // queue (to leave the last one empty). - (MSGQ_NUM_PAGES - 1, 0) - } else if rx <=3D tx { - // The write area wraps and continues until `rx - 1`. - (MSGQ_NUM_PAGES, rx - 1) + // PANIC: per the invariant of `cpu_write_ptr`, `tx` is `< MSG= Q_NUM_PAGES`. + ( + ptr::project!(mut data, [panic: tx..num::u32_as_usize(MSGQ= _NUM_PAGES) - 1]), + ptr::project!(mut data, [build: ..0]), + ) } else { - // The write area doesn't wrap and stops at `rx - 1`. - (rx - 1, 0) + // Leave an empty slot before `rx`. + let end =3D rx - 1; + + if rx <=3D tx { + // The area is discontiguous and we leave an empty slot be= fore `rx`. + // The write area wraps and continues until `end`. + // PANIC: + // - per the invariant of `cpu_write_ptr`, `tx < MSGQ_NUM_= PAGES` + // - The index `end` is non-negative because `rx !=3D 0` i= n this branch. + ( + ptr::project!(mut data, [panic: tx..]), + ptr::project!(mut data, [panic: ..end]), + ) + } else { + // The write area doesn't wrap and stops at `end`. + // PANIC: + // - per the invariant of `cpu_write_ptr`, `tx < MSGQ_NUM_= PAGES` + // - `end >=3D tx` because `rx > tx` in this branch. + ( + ptr::project!(mut data, [panic: tx..end]), + ptr::project!(mut data, [build: ..0]), + ) + } }; =20 // SAFETY: - // - `data` was created from a valid pointer, and `rx` and `tx` ar= e in the - // `0..MSGQ_NUM_PAGES` range per the invariants of `cpu_write_pt= r` and `gsp_read_ptr`, - // thus the created slices are valid. + // - Since `data` was created from a valid pointer, both `tail_sli= ce` and `wrap_slice` are + // pointers to valid arrays. // - The area starting at `tx` and ending at `rx - 2` modulo `MSGQ= _NUM_PAGES`, // inclusive, belongs to the driver for writing and is not acces= sed concurrently by // the GSP. // - The caller holds a reference to `self` for as long as the ret= urned slices are live, // meaning the CPU write pointer cannot be advanced and thus tha= t the returned area // remains exclusive to the CPU for the duration of the slices. - // - The created slices point to non-overlapping sub-ranges of `da= ta` in all - // branches (in the `rx <=3D tx` case, the second slice ends at = `rx - 1` which is strictly - // less than `tx` where the first slice starts; in the other cas= es the second slice is - // empty), so creating two `&mut` references from them does not = violate aliasing rules. - unsafe { - ( - core::slice::from_raw_parts_mut( - data.add(num::u32_as_usize(tx)), - num::u32_as_usize(tail_end - tx), - ), - core::slice::from_raw_parts_mut(data, num::u32_as_usize(wr= ap_end)), - ) - } + // - `tail_slice` and `wrap_slice` point to non-overlapping sub-ra= nges of `data` in all + // branches (in the `rx <=3D tx` case, `wrap_slice` ends at `rx = - 1` which is strictly less + // than `tx` where `tail_slice` starts; in the other cases `wrap= _slice` is empty), so + // creating two `&mut` references from them does not violate ali= asing rules. + (unsafe { &mut *tail_slice }, unsafe { &mut *wrap_slice }) } =20 /// Returns the size of the region of the CPU message queue that the d= river is currently allowed @@ -318,39 +331,40 @@ fn driver_write_area_size(&self) -> usize { /// As the message queue is a circular buffer, the region may be disco= ntiguous in memory. In /// that case the second slice will have a non-zero length. fn driver_read_area(&self) -> (&[[u8; GSP_PAGE_SIZE]], &[[u8; GSP_PAGE= _SIZE]]) { - let tx =3D self.gsp_write_ptr(); - let rx =3D self.cpu_read_ptr(); + let tx =3D num::u32_as_usize(self.gsp_write_ptr()); + let rx =3D num::u32_as_usize(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[build:= 0]); + let data =3D ptr::project!(self.0.as_ptr(), .gspq.msgq.data); =20 - let (tail_end, wrap_end) =3D if rx <=3D tx { - // Read area is non-wrapping and stops right before `tx`. - (tx, 0) + let (tail_slice, wrap_slice) =3D if rx <=3D tx { + // PANIC: + // - per branch condition, `rx <=3D tx` + // - per the invariant of `gsp_write_ptr`, `tx < MSGQ_NUM_PAGE= S` + ( + ptr::project!(data, [panic: rx..tx]), + ptr::project!(data, [build: ..0]), + ) } else { - // Read area is wrapping and stops right before `tx`. - (MSGQ_NUM_PAGES, tx) + // PANIC: + // - per the invariant of `cpu_read_ptr`, `rx < MSGQ_NUM_PAGES` + // - per the invariant of `gsp_write_ptr`, `tx < MSGQ_NUM_PAGE= S` + ( + ptr::project!(data, [panic: rx..]), + ptr::project!(data, [panic: ..tx]), + ) }; =20 // SAFETY: - // - `data` was created from a valid pointer, and `rx` and `tx` ar= e in the - // `0..MSGQ_NUM_PAGES` range per the invariants of `gsp_write_pt= r` and `cpu_read_ptr`, - // thus the created slices are valid. + // - Since `data` was created from a valid pointer, both `tail_sli= ce` and `wrap_slice` are + // pointers to valid arrays. // - The area starting at `rx` and ending at `tx - 1` modulo `MSGQ= _NUM_PAGES`, // inclusive, belongs to the driver for reading and is not acces= sed concurrently by // the GSP. // - The caller holds a reference to `self` for as long as the ret= urned slices are live, // meaning the CPU read pointer cannot be advanced and thus that= the returned area // remains exclusive to the CPU for the duration of the slices. - unsafe { - ( - core::slice::from_raw_parts( - data.add(num::u32_as_usize(rx)), - num::u32_as_usize(tail_end - rx), - ), - core::slice::from_raw_parts(data, num::u32_as_usize(wrap_e= nd)), - ) - } + (unsafe { &*tail_slice }, unsafe { &*wrap_slice }) } =20 /// Allocates a region on the command queue that is large enough to se= nd a command of `size` --=20 2.51.2 From nobody Tue Jun 16 03:48:31 2026 Received: from CWXP265CU010.outbound.protection.outlook.com (mail-ukwestazon11022074.outbound.protection.outlook.com [52.101.101.74]) (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 F372B38A721; Wed, 15 Apr 2026 19:58:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.101.74 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776283096; cv=fail; b=MKecetTnSH2ABdwc2fofA/4ZAddZIfV4ghv3XJ9B7cjwIuvzevpB0UWASpgHvr6/YIT3lOYHDOWLWcKRhQpswXIYWWA5J9MJ0SZCmhRbyotr4amduRxN9bSCJ+u0Nae7weM16EcBhIERcQr4CvoL5lPuL36p/3onjP7Rbmth+Ho= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776283096; c=relaxed/simple; bh=4JZCp1592Qq/DiPLJXMDfuB2mMJRE26vhtXa21LF+1c=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=lAoPZ3iIOM1gGaPsIGaLa/UdctvuKNwIFc7yIoQeTTA4e2uw3jl07VuqUQHP2gHGq950cVP++NMCVgganzcJ1ollKkEqNPMMHYxI/MGpWSzBhZkMjwxPPaZZ7yopXMqOaxPwnQQtsX1YcYuPmROL8HE4esNjr30calwsAgipWc4= 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=O9y54B2U; arc=fail smtp.client-ip=52.101.101.74 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="O9y54B2U" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=TvGLHvKBrVubAlhPuZvVckzdVEweeaayOXs44q0M6+Xi9fwyZ01WXdXAgqVp0tohT+iOcDW4PW4i8rd9nFbdBXSXkq1eKI8uayXan8PheZJJYtvWEEnIGcEf2EuJlI0xCZB5pl41z9mz+FYpJPrGXOVD7aZUhwz/QeZbzdkZCH2lIkpRoe99TdsPnAF97IYK8b0F9EqDSKP5Ci8zeXFKSg6KI14y9mnA04W8pOFz9LnINN+QlU5HuwTjaqTO+a80AzFJQguvSUqUfyaKrH0gSGlEGNw+jJSXuUCjPXLRtHNcgKIYvlFH8q3KCAtf18RIPRTwMPA66jBisbONmECk4w== 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=ND5nT6dl5gY9UacBk8WnuBoSBpJecjX7BcNWJzj0mig=; b=jtgWp4S1ti/iyNiJos8hX7UNNDNexsr3P8JG6j0CZyQgR+Hka0C6BYPynkeicVujy7YM2hHAkwMKqkmqH7gK02KdrZP9j9M5EbtxkW5ZAES6azlTKvmMaI9VcRY0scJN9304nmAeyxUhAudFuH5Lg6qrXHhHJzWeJwi9GgojQjrKhCA1c0PN3McfcXsSfpsgjPdguadFyypJpunv0gAiXL4J7O7iMa1n2IuzyaX9EokhRvBdXx4MZmOzSkpXqgudkTys9DU7h4ppcaeX/Ny/3L/Au/zKmDnU7Jvx4927kcLPe82BCoYeo3zh9xLlJoffaijqIL7jypKmYbMJ7O+A3g== 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=ND5nT6dl5gY9UacBk8WnuBoSBpJecjX7BcNWJzj0mig=; b=O9y54B2U88/bFklMbjrwdjZ62IRQnFhbhOcag6OD8idlOEMFRAtJCioyepxZeWfwMOBvsWKKKV7klotwztssDE1k5+8D6XfooMRSDzB+hNfPkOQKF5q27YHRYnSw5MsFMgKvzaL2QW8cHZ4ebZZXjQ9euYQxZkKQixBxt5YP2oY= 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 CWXP265MB1910.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:32::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9769.48; Wed, 15 Apr 2026 19:58:07 +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.20.9769.046; Wed, 15 Apr 2026 19:58:07 +0000 From: Gary Guo Date: Wed, 15 Apr 2026 20:57:16 +0100 Subject: [PATCH 5/5] rust: ptr: remove implicit index projection syntax Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260415-projection-syntax-rework-v1-5-450723cb3727@garyguo.net> References: <20260415-projection-syntax-rework-v1-0-450723cb3727@garyguo.net> In-Reply-To: <20260415-projection-syntax-rework-v1-0-450723cb3727@garyguo.net> To: Danilo Krummrich , Abdiel Janulgue , Daniel Almeida , Robin Murphy , Andreas Hindborg , Miguel Ojeda , Boqun Feng , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Alice Ryhl , Trevor Gross , Alexandre Courbot , David Airlie , Simona Vetter Cc: driver-core@lists.linux.dev, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org, Gary Guo X-Mailer: b4 0.15.1 X-Developer-Signature: v=1; a=ed25519-sha256; t=1776283085; l=1883; i=gary@garyguo.net; s=20221204; h=from:subject:message-id; bh=4JZCp1592Qq/DiPLJXMDfuB2mMJRE26vhtXa21LF+1c=; b=r4ROZkN/1djeNpdSK2EVhgcDyWIqbMySzhYpGGECK3qOrUdLICA+WyaTFG4QRSkN7L16BpwYN X8D/8wLliUoDNzekoyCTBQGfpNBkJQq4X69T9PXaLl0IbAPy7HenjmB X-Developer-Key: i=gary@garyguo.net; a=ed25519; pk=vB3uIX95SM4eVrIqo1DWNWKDKD2xzB+yLLLr0yOPYMo= X-ClientProxiedBy: LO4P123CA0276.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:195::11) 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_|CWXP265MB1910:EE_ X-MS-Office365-Filtering-Correlation-Id: 128b75cf-1fdf-44f9-091e-08de9b295061 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|1800799024|366016|7416014|376014|22082099003|921020|56012099003|18002099003; X-Microsoft-Antispam-Message-Info: xKq/qmER+jlhJGMCh6OS6w6k+PlCS6lKKibBvyqcviXOWl6Hy1rtQ1IpFZYc9isD9B33Xow8ncwKRgA8/AGjzcARMw8+qdSe/FPPljq0iFxmVYP0immoZV16gLeeC0SnC1FJj9uITK5GNmrAPcMV6sc7mUvIMv48srloT9/CbWq3d8noNkGrxcv6JuLW+Yq30+/7ARvSr29AKG/Ua6jHTx7wJTvHJrdZV+Aa9klm41t0b95c024lva//B+8vsdNXZ6d+k66RfX5bA/kLmxJj9pxqhv8M+OQc92Z26kutuMTIZ9ZNrKb5zeGHlNynHFMNR+gGEslByA3iGjCGhgKg1/ReRZ2BwHFWeUSp1pR2/goJRNholE7F19EauvqmimDRcaY2XBPqYGDnkr24h73HP1zMYDW/GrYmvVbe8NKTwUAPejOOC3aG+UbjbQW86YBM6IZeTVMPLqjuhEM5lCJUvn+RT1oTbhb2vSKpdjxcXbw9A2hq5J3JGkirTey10CJDfNe3Dj1EaQY+pl58V/A9wh3YslMe2BbTR6ToUNF0wmhG0gn1ax5n/0N8i/Riol9YeWz+iGgjf03CMFHFY5pFj8b3H0C5ea1nhRZBPi3mDpER2i7QoGu3FdW2TXbM0pUUWEPp9wHliAcHYE+/5zf1Z3yawsk+ePcqfcHBykNc7s0dYIYgBPfxA0VuwKTm+fua6v2Sl4sryh4QZtSWaw4NoC10jxfU3oBdbzr3zNllXG+/2oOZnlGI9lzRD79XOioJn2gSnztAAvqVcF8afwTZkg== 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)(10070799003)(1800799024)(366016)(7416014)(376014)(22082099003)(921020)(56012099003)(18002099003);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?TzcwNll0R2w4WTB6bjlta2t5TWtFZ0YySFlPbjVEVzZ1TU9TOU8vM0dnNGgw?= =?utf-8?B?WnNmQ3l4eVZLNmZ4VERiSTdua0FUaWY4YWVlT1dlcjVEdTJ0QW5CUFpOQWJB?= =?utf-8?B?blFRTEgvVG9WbFBTcUFSTHJHZ25LNE02bXFFYnM0UC9SSzVsSzZ4QjB0b2NL?= =?utf-8?B?TnYxUlVOU3hSMmdadzNGUFNLSndWd2NaOHlZS3dIOFlteVZicjFTb2htaHlS?= =?utf-8?B?dkdFM3BsUGVKbTNsMkg5SUpVaUVFcVZTVkV0RVh6Mmc1T2l6THZ2YXI2LzUy?= =?utf-8?B?Umg0aityZk9US0diT01jYURuVEkwTE1YdlV4aVNrR0pXVmxZVCtRS0xvZzJX?= =?utf-8?B?eC9ma0I4U295eG5naitXNG5oYXBpUTQvSUVVZHRlRThGK293aGxwWjJQZGFC?= =?utf-8?B?S1l4NS8wOURtYW1IMGNrSVg1WjZ4aXRyZnpBenhaQWdYamNMUlpXS0QrTmYy?= =?utf-8?B?Y2FlNmYxNnR6cUtsNktFQkF0SWdTYlRqTnQ0L1VVbUJWM1c2Ui9aaGRKb3hY?= =?utf-8?B?TFQ2dHJ4ZzB1cjlmdTdnUVB3M0R0cHRUcjkzcnBYNmJ1M0FjOWNoT1ZqTUFT?= =?utf-8?B?N01hVFVLMFBXZHZEZjJteXBnbTVKWHdkQmcra2RCNXpKSzlaUXhJVjJDUlJt?= =?utf-8?B?NTdNUUdSdHpQMWRvWk1mOHQ4dGs0WUhmbmc0ZkFidEpRbEhxRFNTdHJQUWta?= =?utf-8?B?U1FaWHNHQWtqVjJhMWY5V0VsQnI1WFgwaXF1OElONXVEbUFDK0xWWkZCYllp?= =?utf-8?B?STZLV3cvcnFORmRCV0dUMnY0dVV0M1pySE1ZZVJCeWltejVMYTJkVzgwSUVL?= =?utf-8?B?S21VUCthbEl6c2YvYkRJV09lQ2JaaUxuQ21qdmdUTUFuYndyYlYwZ2dZZDY1?= =?utf-8?B?UFNGclM5MitqMEp4bEx2WEdpcUFJMEtSS2dzb0ZnYlBLN25EQTRibWpiaU9i?= =?utf-8?B?Y2dHRkZKZjUyVHRPR3JySTVuRENUanpLNHYwNTk3ZitWQXRkQnZNYTArWndu?= =?utf-8?B?NUhIMWlQWmFVK0xNNWhGd2tkMmFhYmhzTnV6WFZDR0M3L052QlFoQnJGQ1Q2?= =?utf-8?B?anlCRHFIRUlaZlozSXJ0Q1pBMGh1VExmVmxvV0VhNVhvRGlDeE1wTHRrTVFr?= =?utf-8?B?RFJWblF2T1dhclE1MENjdWx0UWVTN0FZVUFHK29sYTB0K1F3dHMxbitiOXRI?= =?utf-8?B?T0VtTTZPZ2UzbFhRMkJCSkE4WWRHYjA2a3lhYi9iUXRZVElZN1BmaGlVa1RE?= =?utf-8?B?TDdmQXNhMGhwQy9GYmxtb3dxV1NscVcrV2ZlV2drYjQrdUtNekpMelJFNUJI?= =?utf-8?B?b2ZHbFMrdmZzM2RFeFllekoyTWFuLzNtdmEvMSt0OVdkNCt1TTBaMTdmWXRp?= =?utf-8?B?UHludUtBTEpxRlJOaTJZYlpMbFA2SDlsVDNBdXFxN0ZiaXkwMTBSWnhvYmJB?= =?utf-8?B?ZXB2QnR1VUpqM3NuSnRUaEI4VGFlTk1TUmdtSDBORU5DWTZBcFZyYTFVWG5O?= =?utf-8?B?VTIvb1UrcW9QTjNmbEhocGtsY05maXpaWmJwOGhjdG1aK3dYc0ozZ3d2SDVa?= =?utf-8?B?N2N0MW1oNHhtcytTeHk1TS9xWFI2d0g1cFU1clZlMTgwelRQSndCc1hVVTlN?= =?utf-8?B?RjRSRTBhL0hXVDdVM0pwblM5ZXBRSmdoaWEyNVpmNFF2aXlGeHlpa09Gb081?= =?utf-8?B?emQ5TkxaNG5pbEZOMjVCZCtSb1pEQmlZd1gxMy82Y3dtODhQK2RtcmJLZHlW?= =?utf-8?B?VkJld0trWWZ1ZTIwYlI4WEdMd0dVeVMxa0tRZWp1WW1WTW5zeFBGSm84c1JV?= =?utf-8?B?Zm1XbFFYbGh2S0l4d1g3SHhOU1JiMlBlcktKQUx3TEQ3M0xRWXo4REIwa3NK?= =?utf-8?B?VUhjYzUvb1NOQ1N4aU9RaHlpUXJJaE03aWRqZlJlU2V3enBVUUZpc2Joc2RN?= =?utf-8?B?WmlYWmNlbUdxZUdJVFdTSFNnc2pFSXVFNUduUjM4blJTcjYzOUxXcnViTHkr?= =?utf-8?B?TUVPVnVvU1ZkdytTdDIrbEVobkdvMXBjL3VPSlE5MzZweEJ2cXI3Z3VzTUdv?= =?utf-8?B?Zk9vV1hMKzFjaUducmsydnBvYTZ1M0ZqcDJ5RjdlYkRBelVCcUpYcWUxeDht?= =?utf-8?B?WHlKbzJtbVpLWWQ3MlJQOTNEYWFUTnhyeXVlaUhaNG1wWmZLN0ZZZ2daTkwr?= =?utf-8?B?Nkl5NWhOaUYvZkhIVW11SU5pYjVzcUJzaXhPMmxZdFpuTFJHcWU1QzM3R3A5?= =?utf-8?B?OE56T0ZvM2ZScHFONjBaQXl6VjJQWml0cmcrSFBCZDI5RjFkN1phaVViWExF?= =?utf-8?B?cWEzY0lyQnpHeEg3Wjd2UkR1dzBaRDZiQ21UUGR3Q08zblc2T29iZz09?= X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: 128b75cf-1fdf-44f9-091e-08de9b295061 X-MS-Exchange-CrossTenant-AuthSource: LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2026 19:58:07.8343 (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: khPydXBXGRD86edbYbqHoKnpaQSu0/2luhBKzlylMO5GeUxWmOJXGcFi9CLVGyp8izGdLdGYd5kdFoNwksUkGw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWXP265MB1910 All users have been converted to use keyworded index projection syntax to explicitly state their intention when doing index projection. Signed-off-by: Gary Guo Reviewed-by: Alexandre Courbot Reviewed-by: Alice Ryhl Reviewed-by: Andreas Hindborg --- 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 d6382904a90d..642ccff465c8 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 845811795393..fde565c836fc 100644 --- a/rust/kernel/ptr/projection.rs +++ b/rust/kernel/ptr/projection.rs @@ -346,14 +346,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.51.2