From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010053.outbound.protection.outlook.com [52.101.56.53]) (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 8A17C40587A; Thu, 27 Aug 2026 08:52:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.53 ARC-Seal:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787820750; cv=fail; b=Z43/TZQvKvoV3V8Qx1Sl/o9FVKIt6tPnrSe0ZXTjQ3QKtOe/ZGVVFrIgogw245S0+/L+2YI49Cd/t9rA+nwahy/vtpgZFDRotzgs3SVN6RipUKNQ5LRGq9MnIlF6HHHxuzggIo98yrTl0lZLxM9hufLbM1veUoQOEAqdEb4FTuo= ARC-Message-Signature:i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1787820750; c=relaxed/simple; bh=jpRtHeA8kNLSQCpQsw/yfBFsg0gKZQGVJhbQavM7770=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=sbJ0RShENf/S1SiZQ+JlvbCy6HUVmVLn40r5jYG90amG6wYVE1P4f4X9hR6f4AT09dHFGvYrPmxtFXXziAsNgDN9rprAmEmV1syFV1wNqMpd7lGxwc0egu1JyedW6x4jHqMjBrkuIUoFuLjPtEZ3Tqzdj7CZ4Hi6M1oluxGaAwc= ARC-Authentication-Results:i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com; spf=fail smtp.mailfrom=nvidia.com; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b=cee4hXD0; arc=fail smtp.client-ip=52.101.56.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=nvidia.com Authentication-Results: smtp.subspace.kernel.org; spf=fail smtp.mailfrom=nvidia.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=Nvidia.com header.i=@Nvidia.com header.b="cee4hXD0" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=apdz7yyP68RsCB9FEPDOxyP1k7/6V24AQ7FIvyry9eOsdIfPQlNo6H0BLMDRWOubLwbtSaFiz5WRijZFEzyejGDb9b9RCa4sImwYVpMEDGr1NQg3H1GTJ0cpmgcBKQO0l1mW+be2XjJMjV6AUbbGmfqHFIA9pMhIPI+Pq1UgmV8xMx/ZiJ8yIhezubivKFODJWQQ1maU1YxTSZ3ZpCI70qCUb3ndsDcVAOkwxu1xzNYurKr5t1gkNRwXBX+Nz8XujiIvBM7KvB9/hkqZ/Nsuly4Sz1czCXvK4TIMrl0+eIPs/qLEK47ljCNUn03SZBZTMzi/fQOjQ0tj80NeNFxlmA== 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=IYAUQ4Ly3AZGT9BmkfCu5w1yYBWLwzZ1p0beHwt85hY=; b=rxENwbeeePlF5z2V7inRAYktt0Ynvd3p9pnmUnUldK+XBuV2eybZZ4lms9ZQdX3GrfgiK0sdMe2pXP2lUTIuJV/821g1PDeOB6mwW1O0lQdbYQPBenjbOe2NMTYHiPlDlfOsGWc5E+YKaN5HsS+lz+aHWMKNuUxzETlrAXiKiu2rvZ3FztaY1U2zVMzkXPmasamoMNkwkKSq0QhL5na8FZ8GGVtuGpIHrIU3y8je/wkWX0r2VT0qIbIakDhQMIKdb487vAPGYKXEOfypMoIii1XwN1HlUyzRGgJEX7nbx0mMwGKPZENfEq7VNFUFDS4/BJdwuMK/rdK0tegmq+4sVQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IYAUQ4Ly3AZGT9BmkfCu5w1yYBWLwzZ1p0beHwt85hY=; b=cee4hXD0pLFxOz+Pt8ZStKbhI4rsr0IvMjaimzBC/eKK1mp5vXx3saur3AVRq9ZYmSt79tI3r+E25xScl1aLv4Cr/rGuxyckZzSzLrJz+Let/PKSd8mCxEJ0khk4div8L2WJkdlwWp12LCInamuCIEGjskkgYDGfJ+gEGjvhcg0p9k9vf+B6WpGocBr9CY6Po1A9ZJqa8k0H/HI4IUnGDy+3zzjrVx5SI7VF3Zi/WthGTW6wzxRjykVtjOPM+JVlqTUrq0n+8sD1DX0btQ4vB+zGbtGkMYMzG6KQGr9kLHLfm6YinsJNfyJE2QxjSIcNrjDNOCsHjsf7PKYBlJpBpg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) by BL1PR12MB5729.namprd12.prod.outlook.com (2603:10b6:208:384::14) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.21.360.6; Thu, 27 Aug 2026 08:52:24 +0000 Received: from DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa]) by DS0PR12MB6413.namprd12.prod.outlook.com ([fe80::e82a:6673:4142:37fa%5]) with mapi id 15.21.0360.008; Thu, 27 Aug 2026 08:52:24 +0000 From: Eliot Courtney Date: Thu, 27 Aug 2026 17:51:46 +0900 Subject: [PATCH v3 05/10] rust: io: add static `cast()` method for views Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Message-Id: <20260827-pramin-split-v3-5-24b24d7afc52@nvidia.com> References: <20260827-pramin-split-v3-0-24b24d7afc52@nvidia.com> In-Reply-To: <20260827-pramin-split-v3-0-24b24d7afc52@nvidia.com> To: Alexandre Courbot , Yury Norov , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , Daniel Almeida , Tamir Duberstein , =?utf-8?q?Onur_=C3=96zkan?= , David Airlie , Simona Vetter , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , Jonathan Corbet , Shuah Khan Cc: John Hubbard , Alistair Popple , Timur Tabi , rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, nova-gpu@lists.linux.dev, dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, Eliot Courtney X-Mailer: b4 0.15.2 X-ClientProxiedBy: TY4P301CA0067.JPNP301.PROD.OUTLOOK.COM (2603:1096:405:36a::11) To DS0PR12MB6413.namprd12.prod.outlook.com (2603:10b6:8:ce::10) Precedence: bulk X-Mailing-List: linux-doc@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS0PR12MB6413:EE_|BL1PR12MB5729:EE_ X-MS-Office365-Filtering-Correlation-Id: 5482039b-954c-4431-f17b-08df0418834e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|23010399003|1800799024|366016|921020|6133799003|10067099003|11063799006|56012099006|18002099003|22082099003; X-Microsoft-Antispam-Message-Info: icuIvAS6nXzRr56700G14dBBfoR4zIXTYTJLCb42G3VL9dY7gWEZhbIEFwfLjU8/ihJCy2V6dn5zcLUT72Cbd1f5Pd9oc7/HsBeWN/Pz/Yz0egmhUMQBaq20roDAakB37edRxxPlfyf0+B9FAOV1GgcoVu94E8G2HigPvLCmOyHUOMFmX9szmkbyzbxlB9UJFtPjuK+b+VyWLz5dhvVZz2qSdJOti1RswIpjWAHJhL51pK/tNN2CNrSiIEwgjUf4xqauLEhRlSi62FhlAZDuQe+dMpMPbVZ6VZwyajIXV1maPTNxXfhEKfllAHzS4ucssA5QnS6Ei17L0Dd1i/ZNShzWMh5aVm1+Z06mt09Ro1j6yPtB7Gz9PzoRlfwPBPrbBc2J7bJU4I7Wi6EbR9uLSDf6gtroSkyHRCY3wF9bBl3sAZbI3cimZvatVA33j8ewKjB0ouP2IzmXJMQLhanVxz6GGN2hst39LsjL4X+Nxe+dPDqVtoPYIxW6gK6jXePaSc03X6vftaPZayfgr8tre8cHwFAwW6XoYlBTkIK+ODjCM3KknHiSsFZ5dIjdgeeG+Q0afsd6mlJjgcFEwS62ktWxs9GN9PvpHPr952Oi+Ap4zW7gUl0av5+R6T66HVWLY4s2R2JTB56xpASfO+ze3yj8UQNc9Xs55LW1ADpvxD4LNmgybPeWTRI9EkelopEAmJTYcXnq/TzIMwIlqP0e5w== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS0PR12MB6413.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(7416014)(376014)(23010399003)(1800799024)(366016)(921020)(6133799003)(10067099003)(11063799006)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?elYvNFJKV014T3IrWHhuSzBLMTViREFrVTZUSmlyYkx6cjZFUFNGaEp6QWVV?= =?utf-8?B?cXN0eXdMR2s3TnNJZENsUzVFWUFjcVZJaVB4TGE4eDA4OWkyUHJ3dm5yWUls?= =?utf-8?B?a0pCQ1IzWUVnbkxzWjZSTWFBVHh2UEY1Z3l2OG4zVHhPTzhrZTlHczBhNFVE?= =?utf-8?B?M3I3RjN6Vk5mN2d2T1k0TzZocnZlMzRBajJjV01zVGphR0lRVjlBRGNiSjFB?= =?utf-8?B?OGJJRkFmSmo5RXZpL240WTJwQllDSUlnU0pWU081Y3dWSDJoNllPYXVBOW96?= =?utf-8?B?TmttdElkcTBXeGNXYUN3dEp4UG5NVUxmWDRXS0loZG5lYllHcitGRGI1U0hy?= =?utf-8?B?QnhQR1pWcUFienRGU2h5a0plWUFPcUllWUlGa1dXZUgwZC8wbVBvNGNJVjRS?= =?utf-8?B?elQ5cTJQNmFBSzhYcUtPQTJ0WXBpN3lXSHVEZTNuOHpsaWZ6NWlCZjBrNzFE?= =?utf-8?B?dXBEK0tYc2ZQbE9DblRkc0ROS2o3cXg3MS9xRUYxTGtCREJYTXdhNGdkamZN?= =?utf-8?B?dE5NNHJZSnZlSC9ncmlXbmdWZU5iWXhleGNFVWp3TVpEV0dWOFp3UUhESmJa?= =?utf-8?B?aEY0djAzWjhUd1FJelUySzltT0pwbm9lV3dvUUNJckpGRmpLTFVNMHg2N2JM?= =?utf-8?B?RHN3WHkvNmVLVXh3WDFLbU53bUwvaEVZdEFSZ3pma0F1L2U5aDFrdU0rQXNN?= =?utf-8?B?TTNkZkFOVzNqQ3htY1hPTVdGcFM4OXlsTHFrc091dDZiM3lQb3EvdmNTN3dX?= =?utf-8?B?YmJjUWJoL0hlTHF2QWNGOUN4aFc5MEE5NkVHKzkzL0cwZHhmYXFVcXJlU2gy?= =?utf-8?B?eGhBT3hzZk16ZDN5eitLV29vZU5DNXF6Z2tleXRZMDEyRUhaUldyWUlOQ3ZK?= =?utf-8?B?ck1PYmFhcEVsM212L3ZNdUtGWWxuekJJaTMrSTAvR1FpS3ErOTlsMExndUgv?= =?utf-8?B?R3ovU01LQTNaanhudWY5M3Nud3FOdFZIcmJTWEpEaCt6bUgrc3VaMGRXN3Rm?= =?utf-8?B?R2Q0V0xpK0tlVS9NZm56dHJIb3FxalpBbTJJOHJxQWhSWk94V05xZXBOMnd0?= =?utf-8?B?MTg2aEROQ1RHTEc2ZWo1aFR4OGlOVkwySmRaRVBjVTE5ekFYWWNrYitrWVcy?= =?utf-8?B?bGVzOTNER3lWY0xSY2g5cFBHQjYweGpaTktGMTRhUnlHdkFnc2o0ek96czQ4?= =?utf-8?B?Q1JoTXJnNVRDcVcyVS93bFZlVTdnTHk4RFdWalFXN25zSU54VStlQzhpTDh4?= =?utf-8?B?Vm1pb2Z5VndQN3FRQ3pJU3NPOXY1NC9KWHhUS2QwRzlOUG5udHc3WmlDRFAx?= =?utf-8?B?R0RlZHBaVmRVMmF1QUVkUlZVQ2Y3WWJLbXh0cmFoUTYvZGtoT0dUS3Y1WGc4?= =?utf-8?B?eHJMUFJaZko5c3hNU3g5WHNDT0dvaS8vbUFuZlhnVzlRREhOQW1Ldlprc0c3?= =?utf-8?B?TkJlanVsNFBWd25yUVBuK283Wlo1U1FqL1FkSFpSOFJJM1BnalBGTkFpaUR4?= =?utf-8?B?d0ZaNy9YWTcxSFhtTVhPVGVBM0EvSGdKR0lsWUEyN1pPVnlqb3psMlNhb1Nx?= =?utf-8?B?VHV1S2FKaDNONndFbGtXQitGRXVNd1c5Y1RTNUNYK2RmOUpwbWtoUjdOT0tY?= =?utf-8?B?VndNdmdDM0UvMnM5eFdiOTNNNmIxK2JxdEY0K0toK1lwcmlvbTVCdGZFVStX?= =?utf-8?B?MUNHUmZCWlpUV0NMWTNSNGlQZjJxemN3bnF4eHBrQ1p3djdCSjg1Yng1aHJF?= =?utf-8?B?eHZlMDFDV2lkRlhLK28rd1RRb01nek9BQkovZlJFSVJHY1hHcEpiUjRaNUNs?= =?utf-8?B?WGtSZFBLSFFtMy9lakJSdjFmOStPVDJJWkxhcjlBUzFzWEltdnJTRlltTTlx?= =?utf-8?B?b1ZTaVFoZjBwQXc4VStrbmFITklYTlpLc2FNRGVBWDE4RGY1R05sZm5pdWhK?= =?utf-8?B?M0NxZDBkbnNydmd3eXBOY0JQR2gvajBBQU96SmZCQkhQY1VmamZtL2VaZWFX?= =?utf-8?B?cGlMb0lTbjVZeFcyY0hML1NabzEzODhHUUlzbTBuU1JHUDZxbm5vbXlkdU93?= =?utf-8?B?YndDNFZ0ZVVWejFBeXFpbjdjYWw1V2htTTlkUGpLZ3FJbmpYd3Q1SGdVcm82?= =?utf-8?B?RC9qN3hOb0ErUS8vOVpzblVFNWJvRGlxVjdwdmUvMDRBVVJHLzkzM2gwZkI0?= =?utf-8?B?Smw1b2lkSDhmNnlWbTNUVjVCQngyRENnZnhBQy9JV3pEc0oyWUJ5WUpWc0w0?= =?utf-8?B?elZwTUo4MjhUNHZSVm40ditsWlo1NGttbDFoKzBRWkEwUjg1cEd4RytXN3cy?= =?utf-8?B?VjdieTR2S1BHU1NRR0hXSUdUZVgvREhjWjZpWENoMEpLdjl5Y0NYOEFOcWl2?= =?utf-8?Q?w9tpCoFDr8C3421xeRwGAPE3vMyNl9ImRY/c3rM0ACtID?= X-MS-Exchange-AntiSpam-MessageData-1: xT7SqnwE6U/Fow== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5482039b-954c-4431-f17b-08df0418834e X-MS-Exchange-CrossTenant-AuthSource: DS0PR12MB6413.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 27 Aug 2026 08:52:23.9995 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: SgvASbgQ9n6VNJ4MZjQCHDZNBLuvBSoodgHJ+eASbvXSE4Iy8oHYQbZlrYpOD+d+aBn3KD2HXmTLUFajXNvIQA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: BL1PR12MB5729 From: Gary Guo Add a compile-time checked variant of `try_cast()` using the minimum size and alignment information. Signed-off-by: Gary Guo Link: https://patch.msgid.link/20260805-typed_register-v2-1-c3ca142220a0@garyguo.net [ecourtney: fix the doc example type and doc grammar per v2 review] Signed-off-by: Eliot Courtney --- rust/kernel/io.rs | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) diff --git a/rust/kernel/io.rs b/rust/kernel/io.rs index 4542187d6b91..5f1be3b31acd 100644 --- a/rust/kernel/io.rs +++ b/rust/kernel/io.rs @@ -436,6 +436,45 @@ fn is_empty(self) -> bool self.len() == 0 } + /// Convert into a different typed I/O view. + /// + /// The target type must be known (statically) to be of the same or smaller size to current + /// type, and the current view must be properly aligned for the target type. + /// + /// # Examples + /// + /// ```no_run + /// use kernel::io::{ + /// io_project, + /// Mmio, + /// Io, + /// Region, + /// }; + /// #[derive(FromBytes, IntoBytes)] + /// #[repr(C)] + /// struct MyStruct { field: u32, } + /// + /// # fn test(mmio: &Mmio<'_, Region<0x1000>>) { + /// // let mmio: Mmio<'_, Region<0x1000>>; + /// let whole: Mmio<'_, MyStruct> = mmio.cast(); + /// # } + /// ``` + #[inline] + fn cast(self) -> ::View<'a, U> + where + Self::Target: FromBytes + IntoBytes, + U: FromBytes + IntoBytes, + { + let view = self.as_view(); + let ptr = Self::Backend::as_ptr(view); + + const_assert!(size_of::() <= Self::Target::MIN_SIZE); + const_assert!(align_of::() <= Self::Target::MIN_ALIGN.as_usize()); + + // SAFETY: We have checked bounds and alignment, so this is a valid projection. + unsafe { Self::Backend::project_view(view, ptr.cast()) } + } + /// Try to convert into a different typed I/O view. /// /// A runtime check is performed to ensure that the target type is of same or smaller size to -- 2.55.0