From nobody Sat Feb 7 15:21:39 2026 Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011004.outbound.protection.outlook.com [40.93.194.4]) (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 CF2812F83B7; Fri, 6 Feb 2026 06:00:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.194.4 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770357641; cv=fail; b=Z/YNgmPLiY8cOlL52/4HdDiGKXFUFxDEcUPffbOl6Y/AQOCWfeh5xv63HJRhWEAu5wn12wFGweXhB94En+iMHNR7C+b9zTgQGu5+AI8yLo5laxJMU6XRu/QgkDFp72jCEhKnVK7NBYepOPTOg+j1fHkyNLI74eX7xvO1EQlMzJg= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770357641; c=relaxed/simple; bh=BVNIVCrLfdQKS258Cg9tVVB/3neY9tOQlAyGfdHbJ7k=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=rMs5ZecEaAal7aRPU1Dm+9HPwFYgXRgSbch34GbsEXjRed0pm7o1ww096+6HJW2U6Todi9IMmlnoXzMG5WGu4AYOJ+bWeVoR+XDGxYcY6gmZX5tR26R4qudjzokCJtNqymjAZS4BPByOJsdzMWhtanOqXNRa7UBrew2wVQevq4w= 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=Vwkn3FRM; arc=fail smtp.client-ip=40.93.194.4 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="Vwkn3FRM" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=H1NFucp+TrcY9nZDVv6vqMK4TTdWYXQtUvKxe8aQ4mqVgY3TyBKGDxqS9LF+RLUv3L2EX08Zf3J9w9W+hIEvDwAb+VuSHGd8FjDQLWBXQ3iuebu0zpVmt9suxn9Q2MLZ6K3/EDgp+cM+PiB+wOCPzYX1EzHPmgyce/amxiF8nMo/VR83AjdXkBdUO2aipi1/6jX/d79H11SuQIwzwM2yg+RNz9G5gkQ3MwDWlPSKPCE/ih9ugtChndd4JdLguR81kfBqiFxd1vdepwdGf4qttgLxBAhXQHKZny3TSzYBn/OSBvjICRwkZA5gBvQjENdLYf+dr/BZ/+P8j9xZEazDwQ== 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=dI4ueIdK7OkUMt6EMTicCyjHyHzX/hnd8kbYyYZ2W38=; b=spy4qPA/4O5G72VTyej3AnAMUaljqj/qU0wv0O7qs8DumgafOQW/prkTF6gMeeECV+Jg9TuIOg1Py/UoUKnG5qfnMLQB82cBMc2EaFbCBqt02U8f4jZNU0ZbVkq2579KjuwhDpCuNFm3t8nO/99DZFYX8B55N2iMQfoCxHxg62wtrD+fm90DhvECTu/pDMLLBd3LiIj0aOGvZIHjwuJKVOPDKgHetT2PzSouKuUigzkdqPEQ1Q82Of2Yd6gDIvuf9t9/GoCrtW4DyLnbRjTRJNy/KxwUmFm/ylOtmoovIyMhxbeNdXgNMkdwMERyxlbocZ8JaNXt+D/k3Y7BHxNf0Q== 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=dI4ueIdK7OkUMt6EMTicCyjHyHzX/hnd8kbYyYZ2W38=; b=Vwkn3FRM9XKq9cWJbodd+IhR+evHfpJagvy9TGzkhJhFPGY87Dmz0RHKFvHfSsRhxlkFcH8tACsUrOEmVuh6foNUcHDjoIzy4U/BCEuQvZe1ExHEYuBUrBstK/cCjLGXFDa0cIOzDUCBV4qARwscIuuKwBFtM/lridb5hsNZTg6YA0CtbJyFaLMpoW2IvTQSEfG0uDj00T6YoM9MOjE8lp0OMwA6iyx2/EwxMHQdS08BcwefkdKLPP/BLi0AJzzX1njqIJTMe2p/XiJBzG5sFYOu4yKiBoLN/CQKOfDxR16YLZxY3v9hKjdop/oYpkAIn48tetbAfnnUcWh0TSYHlA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by DS4PR12MB9683.namprd12.prod.outlook.com (2603:10b6:8:280::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb 2026 06:00:35 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%3]) with mapi id 15.20.9587.010; Fri, 6 Feb 2026 06:00:35 +0000 From: Alexandre Courbot Date: Fri, 06 Feb 2026 15:00:15 +0900 Subject: [PATCH v2 1/6] rust: io: turn IoCapable into a functional trait Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260206-io-v2-1-71dea20a06e6@nvidia.com> References: <20260206-io-v2-0-71dea20a06e6@nvidia.com> In-Reply-To: <20260206-io-v2-0-71dea20a06e6@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Daniel Almeida , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Bjorn Helgaas , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= Cc: driver-core@lists.linux.dev, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, Zhi Wang , Lyude Paul , Eliot Courtney , Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: TYCP286CA0324.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3b7::12) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|DS4PR12MB9683:EE_ X-MS-Office365-Filtering-Correlation-Id: f8335b5f-016d-4f08-d802-08de65450990 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|1800799024|366016|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Wm9tUmVoNEgxbGZxaHc5R2NzSE9ReUtMdVltQ05ZTGZMNEkxNVJEaTJ2Wkkx?= =?utf-8?B?c0t2NVhyQm5GUFJMMnY0OEg3WWhXZ0xKeFFTc0ROcCtqY3pIUEdiSW03NWRX?= =?utf-8?B?NDl6azFmZVdBZlFzT0JQMHBITkhycGpMT3kwaGRsN0dhbXFxZEVoOVpuQ0Zm?= =?utf-8?B?aWRnRHFQTGdCWkZIYzhvLzBHMTUrR09GN1psWGliZVBhdjdKUkxDb3A1UUV2?= =?utf-8?B?Mk5OTmpxVytIQVM2d21CS1RTTXRHZGx2OTgvcGRTRzZKY2RXVjFEM215RHI2?= =?utf-8?B?WFh4Z0xLOVJ5cTRnQURkdTd0ZGZGci8xZGlubnRmZW5yczBZSW9OOStZVUZv?= =?utf-8?B?eE5EQXRNeDFPOUtKTkR5REVHZTkyUllrcEdIN0NMV2pUYXZrMFJjZVB2dDZM?= =?utf-8?B?YUVVSjRJNlBmbDd4ekNWb2ZmN0wyK2VWZmVIR0dQVmRJMUdzUnVENUZIWTZ4?= =?utf-8?B?bVR3YTNhdTdxdmZoNTZXMjlOR1VFb3p4dk8wUTFqVFNlZU9yRVJaSUNyZzVs?= =?utf-8?B?VXRUQ1lIUG5tUVFyalJNRnJhaThaWlJBcnd6VU4vekNzTUt6a0E4NlI0Q29U?= =?utf-8?B?TG00OTFMclgrdDBwVFhWY0M4OTNNc05OOVJhY1lySkMxZnJEcks3Y0IvRlhQ?= =?utf-8?B?SVEyRnozV1VNRzJZOHh5K1hvN0ZSbmdhdWJlRE1JZ3VTeDhHa1FXWC8yUkh0?= =?utf-8?B?SWNBVkhjNDNzczZDUUhMSWlha2FtVmdienRKUVh3TWRGaXVFUktEaENBRXNl?= =?utf-8?B?S0lYVGZCNDFXMzhWYTQ4MWZoWnA1cndlWnRRSnFwTTJab2hkR3Q4Y2xXNHRk?= =?utf-8?B?NVdxYjgyS0ZUV1U3VXpIa1NvUFFaTlhJTURKQzNOeWtGcS9LVTZCQ2RsWjhp?= =?utf-8?B?c3JLZWJxalVBMUx0aHRBQkw5S0dvNGZjbkxFZ1pGNTczQ2xDSkhMcFF4RnUx?= =?utf-8?B?V0dQZ0V5d2Q0eFRSc1J6Y2NtaWR6T3U2SUtkaFphdEc5S3FKVy9vUHhLVFBy?= =?utf-8?B?VGU5Z3NRQyszYUs5My9aVU1JUW1sTXJPcFRldWhlaEc0WW9KQ09hSjVucWIw?= =?utf-8?B?K0dDeWlTYU5ySlI0TDRDejI0STdpMjFlbm1kSVY1cGprb2xtb2J5NlFlVnBj?= =?utf-8?B?MW8rL0lSaG1kOFl6NGxEWkNsZDBlSnM0ZGIvekN3c0NrTkJBU2IvbWFJckVs?= =?utf-8?B?ZFplTnc3cUZRREY5MU9JTkR6alBwRWhwcEFSNUluaFBaS28rdzhYTTBPcEVj?= =?utf-8?B?K2cwSjRMRW9adGhzS3hvT1lRUVpaZmliMVVyOXZ3Q002dnIyT2hhTEYwd2VQ?= =?utf-8?B?K25DRDhWbEV0MU9oeFF5VDFBK1FFeUZKdGJIYUYyR3V2dFRiRnhYbDIxcysz?= =?utf-8?B?SXo0RmZWUVBJV3ZxN1d1S1FaZkNrVGx6QUI5eEFpalJPY3lOZnExMXdxZWVp?= =?utf-8?B?eW0wQ0FRdDcvWnp5cG5sbGRhMDZGNlBpWUhmeUJ6aG1KaGpUVzZIamNSZWlu?= =?utf-8?B?ZGJXMDVuTzlxNUFTRUhPZVJ2dm1iVGw5QlU3alNPdEdUL1lCaVdjMFJjVEZn?= =?utf-8?B?aFhxaUFYeWZqWEtHS0dLVEFMeE1aYzhzQnBQOTNoNVU1SDJpRmVvUXFEbVBX?= =?utf-8?B?U3dPZFVWM0sybVk1alIzbHlVRGtQRkhmcmFHeU9aYTlnVGVtb3V6Ykk3ekxF?= =?utf-8?B?T2hXUHRSUXNTZnpncXc3T09ZVGhEckp5bTc0bWQ1V2lSVU5zWmdMZUs3UDBz?= =?utf-8?B?Y1lVczFyc2haUDV0eVR5QmZJSjFtUjhSTFp4dnBwYnFyc2FlMEc4azZBTkFB?= =?utf-8?B?M0s2SWVFU0hZWVhxakN4UUN1YTZPcWc0MU9kajhKaDVPQkJtY084bXB3U283?= =?utf-8?B?NlBGTmViRi9yTnl2WUpHTUFrMW5icXhiOFM0c1d1anBKTktPcHl6N2hZaHdl?= =?utf-8?B?WmpqTGh2TStLc2FPMDVyd1IwV0c1eFlsWjdzajh4dWdzSUhjNDJUSjRsZUVQ?= =?utf-8?B?dURnVVFVbUpENVRWUm1mUzBXWkVwa3BIQTViZlp5eWtGSlkwT1B5T2lVbW4v?= =?utf-8?B?K2QyMjBQU2ROOVZoTjBQdnFjbUVyZk1sd1Vnc1JHWFhxN2F1MExQZjJtaUdB?= =?utf-8?B?WHErNm5IRlBlZ3I2UFBMZXVkU1Zuc09pYk5VQ0ExeHoyelFoVXBKb1NpQTlq?= =?utf-8?B?QXc9PQ==?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(1800799024)(366016)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?bEpHNjZDQzhNVGhZVFN3cUtiMUxHd0N2RXc3c1A1MVBFODJrTE9LU3pGd2JB?= =?utf-8?B?TDBJdGhvMVZKdGJ5S3puNHg4R2NkNzhUekk3M1VZbTJHQlhSWkhoN2xHTjJV?= =?utf-8?B?QkozbElHdVBRK3pPNG9zRGcxQXNBczN6MVFURTNSVnBMMFRzdnI1R1hEekFY?= =?utf-8?B?UFF3dzhhNk5JUmY0ckFoS0dYVXBCajVIMHRqSmk2UVZkeS8wQzB5N0RqaWxZ?= =?utf-8?B?RSs5U3FrbURXQk54RHp6Q0ZZNHB1L3FYZXVZSGdJRUNMWEp6elRqSUgyZVUw?= =?utf-8?B?VU9GNG9oNU5YdkRrK280NExyYkFmY1RYOEFKV0tNSSt6Q1plWkZrTmljUXUr?= =?utf-8?B?dk5MOGFOMDVGQU5FS2szMHgwTmcrcmlhK09lQWhtVnVZcDMzbmtPV1A1Vzhy?= =?utf-8?B?bXQwbkNZSFY4OEZqWUlBVFB0MldaeC80SlgrWWg2QVB1SFJIQWN3WS8rRDEz?= =?utf-8?B?SjIzK2Y5TitUT1g0WnRFc1ZvenNCR2JKNTBpS0VwcHE4cnI0bldxN0FDMjBh?= =?utf-8?B?aWJFQmlKeWRRaFc0NVBkR1Eza1lqQ1YzRTZOaFdwVHYzY2dCR25sVHF6R3BR?= =?utf-8?B?R1JBWnRPa1o2NDgrVU8wb1hMS1lWUFhmb1EzV2N3YWRSYkNUL3Z0b2Uyelhx?= =?utf-8?B?VzRadmpoMnB5cytFcndacjcvTU52TUs2L0V3UjFQalA2UkZvRFlxczVMN1dS?= =?utf-8?B?dUVDUFFiVzl5OW5iaWZkNnVwbmUxQVdQbEF3WVN1ak0xNnRhanVZYXhhWUNS?= =?utf-8?B?MjF1TG4wamNRMWVnUmZaSkQ3Ky9tMGJkSjBaMTdvWmJDOWphSTlrN3VFWW4r?= =?utf-8?B?WERwMSs1em9YbDFXZUFLUzhGbDhFVEdJYnhDcGJZQlo3ZlZselBEaGR2SDFJ?= =?utf-8?B?cWkrT1JiRGZzUERNWUFpdGFvdGdrYjV0S0JRVnZ1Zll0TkZISzZUY1VvemEv?= =?utf-8?B?OTdWZ3duWkcvUTM1Q29oRDdYbGFIUDNsUU5QVUdHUXBKNFMySGswQWlhSjlP?= =?utf-8?B?ajNMUEJCYU9RZ3dXcG9oWUpQVS9ITnZCekZKK05XS2FHbklMRFBlbmgwSWpG?= =?utf-8?B?UENDQzViQWwxSVI4bDVhQis1R1d3VFJ2MFczbFliOFlMaGorNFF4dDluOEZ4?= =?utf-8?B?dW5RMGpKcU9oTDJGNnZpSGJOWCsvZGM3aWdGUWFLUzhaTEtCRFM4eHF6RXJw?= =?utf-8?B?MXpwWjNjNTM1K0dNd2FnN1VOanRwY1JBVllLVmF0RDZwQlViYzR5WWhPSHBP?= =?utf-8?B?aU9TRk9WRzdmcHU4MTk0bjJvNW5qZW5FMU1ZUkVTYkJQcUwwaTM4bnNqUHcv?= =?utf-8?B?enVVNGFoQm1qNVg4bXhWRXhRNHlKaWVrRWRZdzMyMGxYQzJjK2pBTS96S2Fs?= =?utf-8?B?VGdLUTBxcDBQU1ZDd1M2Z1Y1L0U4T0o2ZFZsT2pvWEZ6ZjUramt1dEdGbkdh?= =?utf-8?B?WWRRVUxMMElqbTBJS0NnaVc2em5lQjVtOGtNbnpLTjVtMWpHMGMrd0h2aGZu?= =?utf-8?B?c0I4N3NIVEdaeGUzNnN6UnF1TUtiVmhLNzRBeXZmbzV4YVY4OUJINXhGQVRr?= =?utf-8?B?UU9XTTR6MGticVFYTDJCeUpmUFpWOWxlbC9WeXJoRHBaY2xDdWlCUktSck41?= =?utf-8?B?UnMzK1loS0Z3T0tHd3BDbHY1Q0FDNkFCRlkxdFJGQndIYWNHTUNRQnRyZmgr?= =?utf-8?B?c29pWjZCTytKSnFpdEJmTjB5WFFzak9OcUkyUVpyNjhFazcrSHlJYSsvdmdx?= =?utf-8?B?V2NLVmQwWi9ZbWY5aDV2U1hpQ241ajJsMzlnUUR0aWpGdzJxMHFDQWZLL3V5?= =?utf-8?B?K0c3R1M4UHVZMTRFMXdUcEEvNzRCQ1lBOE00YlVnZ1lyTXNhTGtOWlRjODFp?= =?utf-8?B?cjBpRDdjYzNPOEhCck1Cd0VaM1JWZTBKeU9iQXJQOWJRa2laK1lMTlB6dUNB?= =?utf-8?B?S2Z2TnV0QXhoYjUyRVFCdjZqR2MydDllYmVuRkNvYXpXSDNUbm91Wm1oWklz?= =?utf-8?B?dnk2M25oY0hqSEpDUEY4TXRGWGZlWWZ4eWpGZ2xTWkxyb3Vsc3V0VUVidXRo?= =?utf-8?B?MU03M0xVVTVrQk54MCtsSlZjazE5SmNVUlo3eks1SUI3MXd4RWlJNWNRU3FX?= =?utf-8?B?U1ozQ2tHb0Z5ZkdqTklxVThpeDNZdTZYZjZ1VyswcmxwN3FabGE2RDQwWTBy?= =?utf-8?B?YnQwSkhiMUJxUEY2VGZ5R0JpbzZ0ZXVUTjFwTk9GL1NQa3hOV0wvNVlMdE05?= =?utf-8?B?Unc1MjlxakErd05DU00xdHN1ZitIbVc1SmtTM2xTZTEyLzN6TWNtMTNvNjdB?= =?utf-8?B?ZldDa3M4bHFuUlRIV0dxVnVsREtXdTlsdzlOWGxkOHVtSmNaajZpTzM2dnJR?= =?utf-8?Q?WO7G6p4y6LAAl5fue5rC+QZjXfcwuK/TlJBQXT3JrG1Wn?= X-MS-Exchange-AntiSpam-MessageData-1: S6y7faC3r8Lx0Q== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f8335b5f-016d-4f08-d802-08de65450990 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 06:00:32.2934 (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: 09fkM5X9Bd9aG9nqv32eewL4uluA/aK/h+bGBQ4GJBGUkcggAGU9cHS7vK/w8DLgUemZV3/b73UgzhQ3/xddGw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9683 `IoCapable` is currently used as a marker trait to signal that the methods of the `Io` trait corresponding to `T` have been overridden by the implementor (the default implementations triggering a build-time error). This goes against the DRY principle and separates the signaling of the capability from its implementation, making it possible to forget a step while implementing a new `Io`. Another undesirable side-effect is that it makes the implementation of I/O backends boilerplate-y and convoluted: currently this is done using two levels of imbricated macros that generate unsafe code. Fix these issues by turning `IoCapable` into a functional trait that includes the raw implementation of the I/O access for `T` using unsafe methods that work with an arbitrary address. This allows us to turn the default methods of `Io` into regular methods that check the passed offset, turn it into an address, and call into the corresponding `IoCapable` functions, removing the need to overload them at all. `IoCapable` must still be implemented for all supported primitive types, which is still done more concisely using a macro, but this macro becomes much simpler and does not require calling into another one. Reviewed-by: Daniel Almeida Acked-by: Alice Ryhl Signed-off-by: Alexandre Courbot Reviewed-by: Gary Guo --- rust/kernel/io.rs | 169 ++++++++++++++++++++++++++++++++++++++--------= ---- rust/kernel/pci/io.rs | 37 ++++++++++- 2 files changed, 163 insertions(+), 43 deletions(-) diff --git a/rust/kernel/io.rs b/rust/kernel/io.rs index c1cca7b438c3..dc894a45bbcc 100644 --- a/rust/kernel/io.rs +++ b/rust/kernel/io.rs @@ -273,14 +273,29 @@ const fn offset_valid(offset: usize, size: usize) = -> bool { } } =20 -/// Marker trait indicating that an I/O backend supports operations of a c= ertain type. +/// Trait indicating that an I/O backend supports operations of a certain = type and providing an +/// implementation for these operations. /// /// Different I/O backends can implement this trait to expose only the ope= rations they support. /// /// For example, a PCI configuration space may implement `IoCapable`, = `IoCapable`, /// and `IoCapable`, but not `IoCapable`, while an MMIO region o= n a 64-bit /// system might implement all four. -pub trait IoCapable {} +pub trait IoCapable { + /// Performs an I/O read of type `T` at `address` and returns the resu= lt. + /// + /// # Safety + /// + /// The range `[address..address + size_of::()]` must be within the= bounds of `Self`. + unsafe fn io_read(&self, address: usize) -> T; + + /// Performs an I/O write of `value` at `address`. + /// + /// # Safety + /// + /// The range `[address..address + size_of::()]` must be within the= bounds of `Self`. + unsafe fn io_write(&self, value: T, address: usize); +} =20 /// Types implementing this trait (e.g. MMIO BARs or PCI config regions) /// can perform I/O operations on regions of memory. @@ -322,146 +337,198 @@ fn io_addr(&self, offset: usize) -> Result { =20 /// Fallible 8-bit read with runtime bounds check. #[inline(always)] - fn try_read8(&self, _offset: usize) -> Result + fn try_read8(&self, offset: usize) -> Result where Self: IoCapable, { - build_error!("Backend does not support fallible 8-bit read") + let address =3D self.io_addr::(offset)?; + + // SAFETY: `address` has been validated by `io_addr`. + Ok(unsafe { self.io_read(address) }) } =20 /// Fallible 16-bit read with runtime bounds check. #[inline(always)] - fn try_read16(&self, _offset: usize) -> Result + fn try_read16(&self, offset: usize) -> Result where Self: IoCapable, { - build_error!("Backend does not support fallible 16-bit read") + let address =3D self.io_addr::(offset)?; + + // SAFETY: `address` has been validated by `io_addr`. + Ok(unsafe { self.io_read(address) }) } =20 /// Fallible 32-bit read with runtime bounds check. #[inline(always)] - fn try_read32(&self, _offset: usize) -> Result + fn try_read32(&self, offset: usize) -> Result where Self: IoCapable, { - build_error!("Backend does not support fallible 32-bit read") + let address =3D self.io_addr::(offset)?; + + // SAFETY: `address` has been validated by `io_addr`. + Ok(unsafe { self.io_read(address) }) } =20 /// Fallible 64-bit read with runtime bounds check. #[inline(always)] - fn try_read64(&self, _offset: usize) -> Result + fn try_read64(&self, offset: usize) -> Result where Self: IoCapable, { - build_error!("Backend does not support fallible 64-bit read") + let address =3D self.io_addr::(offset)?; + + // SAFETY: `address` has been validated by `io_addr`. + Ok(unsafe { self.io_read(address) }) } =20 /// Fallible 8-bit write with runtime bounds check. #[inline(always)] - fn try_write8(&self, _value: u8, _offset: usize) -> Result + fn try_write8(&self, value: u8, offset: usize) -> Result where Self: IoCapable, { - build_error!("Backend does not support fallible 8-bit write") + let address =3D self.io_addr::(offset)?; + + // SAFETY: `address` has been validated by `io_addr`. + unsafe { self.io_write(value, address) }; + Ok(()) } =20 /// Fallible 16-bit write with runtime bounds check. #[inline(always)] - fn try_write16(&self, _value: u16, _offset: usize) -> Result + fn try_write16(&self, value: u16, offset: usize) -> Result where Self: IoCapable, { - build_error!("Backend does not support fallible 16-bit write") + let address =3D self.io_addr::(offset)?; + + // SAFETY: `address` has been validated by `io_addr`. + unsafe { self.io_write(value, address) }; + Ok(()) } =20 /// Fallible 32-bit write with runtime bounds check. #[inline(always)] - fn try_write32(&self, _value: u32, _offset: usize) -> Result + fn try_write32(&self, value: u32, offset: usize) -> Result where Self: IoCapable, { - build_error!("Backend does not support fallible 32-bit write") + let address =3D self.io_addr::(offset)?; + + // SAFETY: `address` has been validated by `io_addr`. + unsafe { self.io_write(value, address) }; + Ok(()) } =20 /// Fallible 64-bit write with runtime bounds check. #[inline(always)] - fn try_write64(&self, _value: u64, _offset: usize) -> Result + fn try_write64(&self, value: u64, offset: usize) -> Result where Self: IoCapable, { - build_error!("Backend does not support fallible 64-bit write") + let address =3D self.io_addr::(offset)?; + + // SAFETY: `address` has been validated by `io_addr`. + unsafe { self.io_write(value, address) }; + Ok(()) } =20 /// Infallible 8-bit read with compile-time bounds check. #[inline(always)] - fn read8(&self, _offset: usize) -> u8 + fn read8(&self, offset: usize) -> u8 where Self: IoKnownSize + IoCapable, { - build_error!("Backend does not support infallible 8-bit read") + let address =3D self.io_addr_assert::(offset); + + // SAFETY: `address` has been validated by `io_addr_assert`. + unsafe { self.io_read(address) } } =20 /// Infallible 16-bit read with compile-time bounds check. #[inline(always)] - fn read16(&self, _offset: usize) -> u16 + fn read16(&self, offset: usize) -> u16 where Self: IoKnownSize + IoCapable, { - build_error!("Backend does not support infallible 16-bit read") + let address =3D self.io_addr_assert::(offset); + + // SAFETY: `address` has been validated by `io_addr_assert`. + unsafe { self.io_read(address) } } =20 /// Infallible 32-bit read with compile-time bounds check. #[inline(always)] - fn read32(&self, _offset: usize) -> u32 + fn read32(&self, offset: usize) -> u32 where Self: IoKnownSize + IoCapable, { - build_error!("Backend does not support infallible 32-bit read") + let address =3D self.io_addr_assert::(offset); + + // SAFETY: `address` has been validated by `io_addr_assert`. + unsafe { self.io_read(address) } } =20 /// Infallible 64-bit read with compile-time bounds check. #[inline(always)] - fn read64(&self, _offset: usize) -> u64 + fn read64(&self, offset: usize) -> u64 where Self: IoKnownSize + IoCapable, { - build_error!("Backend does not support infallible 64-bit read") + let address =3D self.io_addr_assert::(offset); + + // SAFETY: `address` has been validated by `io_addr_assert`. + unsafe { self.io_read(address) } } =20 /// Infallible 8-bit write with compile-time bounds check. #[inline(always)] - fn write8(&self, _value: u8, _offset: usize) + fn write8(&self, value: u8, offset: usize) where Self: IoKnownSize + IoCapable, { - build_error!("Backend does not support infallible 8-bit write") + let address =3D self.io_addr_assert::(offset); + + // SAFETY: `address` has been validated by `io_addr_assert`. + unsafe { self.io_write(value, address) } } =20 /// Infallible 16-bit write with compile-time bounds check. #[inline(always)] - fn write16(&self, _value: u16, _offset: usize) + fn write16(&self, value: u16, offset: usize) where Self: IoKnownSize + IoCapable, { - build_error!("Backend does not support infallible 16-bit write") + let address =3D self.io_addr_assert::(offset); + + // SAFETY: `address` has been validated by `io_addr_assert`. + unsafe { self.io_write(value, address) } } =20 /// Infallible 32-bit write with compile-time bounds check. #[inline(always)] - fn write32(&self, _value: u32, _offset: usize) + fn write32(&self, value: u32, offset: usize) where Self: IoKnownSize + IoCapable, { - build_error!("Backend does not support infallible 32-bit write") + let address =3D self.io_addr_assert::(offset); + + // SAFETY: `address` has been validated by `io_addr_assert`. + unsafe { self.io_write(value, address) } } =20 /// Infallible 64-bit write with compile-time bounds check. #[inline(always)] - fn write64(&self, _value: u64, _offset: usize) + fn write64(&self, value: u64, offset: usize) where Self: IoKnownSize + IoCapable, { - build_error!("Backend does not support infallible 64-bit write") + let address =3D self.io_addr_assert::(offset); + + // SAFETY: `address` has been validated by `io_addr_assert`. + unsafe { self.io_write(value, address) } } } =20 @@ -487,14 +554,36 @@ fn io_addr_assert(&self, offset: usize) -> usize { } } =20 -// MMIO regions support 8, 16, and 32-bit accesses. -impl IoCapable for Mmio {} -impl IoCapable for Mmio {} -impl IoCapable for Mmio {} +/// Implements [`IoCapable`] on `$mmio` for `$ty` using `$read_fn` and `$w= rite_fn`. +macro_rules! impl_mmio_io_capable { + ($mmio:ident, $(#[$attr:meta])* $ty:ty, $read_fn:ident, $write_fn:iden= t) =3D> { + $(#[$attr])* + impl IoCapable<$ty> for $mmio { + unsafe fn io_read(&self, address: usize) -> $ty { + // SAFETY: By the trait invariant `address` is a valid add= ress for MMIO operations. + unsafe { bindings::$read_fn(address as *const c_void) } + } =20 + unsafe fn io_write(&self, value: $ty, address: usize) { + // SAFETY: By the trait invariant `address` is a valid add= ress for MMIO operations. + unsafe { bindings::$write_fn(value, address as *mut c_void= ) } + } + } + }; +} + +// MMIO regions support 8, 16, and 32-bit accesses. +impl_mmio_io_capable!(Mmio, u8, readb, writeb); +impl_mmio_io_capable!(Mmio, u16, readw, writew); +impl_mmio_io_capable!(Mmio, u32, readl, writel); // MMIO regions on 64-bit systems also support 64-bit accesses. -#[cfg(CONFIG_64BIT)] -impl IoCapable for Mmio {} +impl_mmio_io_capable!( + Mmio, + #[cfg(CONFIG_64BIT)] + u64, + readq, + writeq +); =20 impl Io for Mmio { /// Returns the base address of this mapping. diff --git a/rust/kernel/pci/io.rs b/rust/kernel/pci/io.rs index 6ca4cf75594c..8c8aab2e3f22 100644 --- a/rust/kernel/pci/io.rs +++ b/rust/kernel/pci/io.rs @@ -142,10 +142,41 @@ macro_rules! call_config_write { }; } =20 +/// Implements [`IoCapable`] on [`ConfigSpace`] for `$ty` using `$read_fn`= and `$write_fn`. +macro_rules! impl_config_space_io_capable { + ($ty:ty, $read_fn:ident, $write_fn:ident) =3D> { + impl<'a, S: ConfigSpaceKind> IoCapable<$ty> for ConfigSpace<'a, S>= { + unsafe fn io_read(&self, address: usize) -> $ty { + let mut val: $ty =3D 0; + + // Return value from C function is ignored in infallible a= ccessors. + let _ret =3D + // SAFETY: By the type invariant `self.pdev` is a vali= d address. + // CAST: The offset is cast to `i32` because the C fun= ctions expect a 32-bit + // signed offset parameter. PCI configuration space si= ze is at most 4096 bytes, + // so the value always fits within `i32` without trunc= ation or sign change. + unsafe { bindings::$read_fn(self.pdev.as_raw(), addres= s as i32, &mut val) }; + + val + } + + unsafe fn io_write(&self, value: $ty, address: usize) { + // Return value from C function is ignored in infallible a= ccessors. + let _ret =3D + // SAFETY: By the type invariant `self.pdev` is a vali= d address. + // CAST: The offset is cast to `i32` because the C fun= ctions expect a 32-bit + // signed offset parameter. PCI configuration space si= ze is at most 4096 bytes, + // so the value always fits within `i32` without trunc= ation or sign change. + unsafe { bindings::$write_fn(self.pdev.as_raw(), addre= ss as i32, value) }; + } + } + }; +} + // PCI configuration space supports 8, 16, and 32-bit accesses. -impl<'a, S: ConfigSpaceKind> IoCapable for ConfigSpace<'a, S> {} -impl<'a, S: ConfigSpaceKind> IoCapable for ConfigSpace<'a, S> {} -impl<'a, S: ConfigSpaceKind> IoCapable for ConfigSpace<'a, S> {} +impl_config_space_io_capable!(u8, pci_read_config_byte, pci_write_config_b= yte); +impl_config_space_io_capable!(u16, pci_read_config_word, pci_write_config_= word); +impl_config_space_io_capable!(u32, pci_read_config_dword, pci_write_config= _dword); =20 impl<'a, S: ConfigSpaceKind> Io for ConfigSpace<'a, S> { /// Returns the base address of the I/O region. It is always 0 for con= figuration space. --=20 2.53.0 From nobody Sat Feb 7 15:21:40 2026 Received: from SN4PR0501CU005.outbound.protection.outlook.com (mail-southcentralusazon11011004.outbound.protection.outlook.com [40.93.194.4]) (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 3831F3016E0; Fri, 6 Feb 2026 06:00:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=40.93.194.4 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770357641; cv=fail; b=L93NzKpLmoK/eVcLCebeXXYtdyox6ywuJFF5NWbq2uGgW3LM/0s57Pk2Wzlc+SNQoB70qfu0DE3oh3Iz8NNihgFv75X+uuzgoIzjwJbSGSueNUSB/4eysQXFdm/6aWMwV9TwjcgsXOKNF2xJ202Uj4xtzHGbhqXQNdoWetJVJ1g= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770357641; c=relaxed/simple; bh=JPoWQhaEVZNzqfMDoq9VnolxyexZXDCG4B+OV/pmgL4=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=iHKqYYlDvXb7quoGF/dKpW8qXzKALCMD9gp6fyZojmPyhR7hEOsvt6xESkTXGX9DLajzUeYevDsLrMSvusPc87x0nIcO/kJcmTCRnNDCh6xV2QiPf7O7NDBP4LRTXeA3bIXGUmg2ilJEp35E8knDbnw04C4icWgOChSiWDK35jU= 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=J0Vzqmv3; arc=fail smtp.client-ip=40.93.194.4 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="J0Vzqmv3" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=kzbfedcGc6uU6h/cpSrXsnBq6sAzOjmA2b+YgS0edkthPrZCGMrd1k0f8Z9CoEdPuFPrzwQchdzDRiFWVUou8nxjGivatPYoGjHTXkUPqKOSfw4a9wUSrH5Qh4su31cxkxgPY98RVEuYM2gvCTa/VwYzSXq3kARGFWxrJIsJPLX3vyFSBsMHLX3TQ8SKLjhX+T5zZCPv3PXsBeldVf8zZV0V0rhm7Bm1TkGoibD9/qY0kNF9wKISjYTWhy4kVSC3KhxQ1tApZJ4KWnHo19+JgTT1Dz8eSDBgcxfhHsHF5jVzh0dzacYOIZw7pyR5XnkYh888oIaePNuEebwIx/QOLw== 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=PGgJb5P5Q0BGM4/Fv8fTpXJebWQ9y6tWRf4ijiLBl18=; b=Z9VWCk/i4qYDphHzfDt3pWEZI/ZDNn7m/HzVAJVTASHAQlTUBEh5iFLquL6MqozpVXzAWYMT8YmR0wfqn9dlMkYdg6pCJT0/WYUhNUM92A16yKjuLs1/lSbahhUZIDuMxOKSZvmDf969ylKbZ892JaQugRBTFGD4mi7bsopoGu0VLWT5U7WNeK+PwIhTA9pAcsQ9d7vmtIZstpF3i4VI202mtCuW8T5yrlwUdpkCzVMbygFUUX5yaGhuHFh5wCetGq67GmsvHysEsUEmaC//cYC48NcpNLUfoCE6c0uu60sWHkcubjgvMsT51xYr97qaBJgbJ1q6b9PnLpdGZUEKPA== 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=PGgJb5P5Q0BGM4/Fv8fTpXJebWQ9y6tWRf4ijiLBl18=; b=J0Vzqmv3vrXvAl12UDcPUC/41YHukWMSMUn18vA0NWHZ9jlvU6kgxELr9nV8n9RSd2ofzW0U/f7jagD4Eo1qVgewVqvC5WvKbY3oti08LGdaqruaHJjhHWWsNc8R7DsaK/A2xbXikG4W4Bkqp8K1WXQMNMC6usv5vurm+S7zNJLVfftnx4ydgTZEeJNIjFIeybem9PM0PZa7y9UPerXE1FPpZmVuDvCDEl9XBPT5qlU4WG8K3ef3RPZ7GmXCW+63Y0bpHCHHHoXJztrqRWudmNnMhQtSwKR2U3R2hWzw9QjlUcKVvAyIsjZTfcj10tfFThBMSCZXflg6tocrXqUnVw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by DS4PR12MB9683.namprd12.prod.outlook.com (2603:10b6:8:280::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb 2026 06:00:37 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%3]) with mapi id 15.20.9587.010; Fri, 6 Feb 2026 06:00:37 +0000 From: Alexandre Courbot Date: Fri, 06 Feb 2026 15:00:16 +0900 Subject: [PATCH v2 2/6] rust: io: mem: use non-relaxed I/O ops in examples Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260206-io-v2-2-71dea20a06e6@nvidia.com> References: <20260206-io-v2-0-71dea20a06e6@nvidia.com> In-Reply-To: <20260206-io-v2-0-71dea20a06e6@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Daniel Almeida , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Bjorn Helgaas , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= Cc: driver-core@lists.linux.dev, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, Zhi Wang , Lyude Paul , Eliot Courtney , Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: OSTPR01CA0078.jpnprd01.prod.outlook.com (2603:1096:604:218::14) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|DS4PR12MB9683:EE_ X-MS-Office365-Filtering-Correlation-Id: 2410c613-a678-4358-c88c-08de65450c52 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|1800799024|366016|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?R0dzdUd3M09ENjY2NEN1enNuT0xkb3FHVU5JZ1Vob3I5aTVMendWaFYxbmNI?= =?utf-8?B?ZGZtQ2hhZXZPRE5QOHVnako0aDJnU1BMaERuY3VKazJSS1gvdVpLM29WS2J2?= =?utf-8?B?N2Q5SklaY2FwU0wzdm5zd2JnclV4NEVteHJUNTZpbU5GS2FDa0NZeGg4YzNV?= =?utf-8?B?TmVNQXRCamNJNUFIc3cwZVdwVC9hL2pGcU8ya2JnREZhNGF1U2U2OVZnYkFB?= =?utf-8?B?M2hVODdiWFpCa29SVU5QSDNscFptSHUwU3BQb2xydGZJS3V0M0lMMHd5RTYw?= =?utf-8?B?NjBKekNiMnl4RmcxS2ZNeFFvak9oOVRyeW5XSThMOXBFSUx1UzFXMDhMaWRx?= =?utf-8?B?dTIwaWVMWVVIMHk0OEYzYkpRMVJuOE81TDBNY3FKUG5uRGtIRzdSVVlsRVpS?= =?utf-8?B?dHJJQ0Y4NUlQMWV1eFFJd0ExUUxKdWJwUndGZ0FsZ01pL28yUk1xVWY4TlBu?= =?utf-8?B?SXZUS3dhS3htdG5MRGNCZ0hWZ2o4U3FITVM1c3U5OWgrN1h4YTl0V3Y1ekFE?= =?utf-8?B?NjRKSmpuMXdNN2hvWEI2QXl3SnI3QU44aENraHI1Y2IybTBOWDBXaWVVajc3?= =?utf-8?B?YzJNS1lYSWJUaVIzYnRzSFl0dVhXNnZrZi8reTliMmlpYWtoaXl0a1Y1Z3Er?= =?utf-8?B?dHFGVnJDTzVVSHdTa2liSmpsekZsOGlaQVJ1ZHNsMHB3VXlOVTkzcSsrSnNM?= =?utf-8?B?MUM0Sjg4STBaNEg2ZDJxM0hBMXMrR1d4bXRNOXN1Z240MzVzNkhpbXdWTTBo?= =?utf-8?B?Rklhbm1ReFkxVUpCMFJCTU9aMEMrcHpSdGIwWmRkbTlPU2VycStOTGxSQWJm?= =?utf-8?B?WEFXWWYrK2dHczNhZkFGYWtyRWpKd0VoZGxsb1BkbFFMUFdRcU9KQzVFSTBM?= =?utf-8?B?S3ZDN05BbkYrSXZpVEZPVWxTSUUva0srNkoxakgxT0dkMUp3RjFkNzh1U2V4?= =?utf-8?B?L1RTZGNwTFhCbldURlFFT2J2dUhjL2laVm5kREozblVXWEVZRS9BNVBIcHVp?= =?utf-8?B?T0x1Y0tJK0JtbjJPTE5FMzdEbEdZLzhNaS9EUWNvaC9SY1FreC9RNWFqVXNG?= =?utf-8?B?TDR2eXYyN0dFRHF4TEd5NVdPbDRCUHJzc3hOcHR5UUcyWDc3QmpYeGdqZ2RF?= =?utf-8?B?TzZiK3dxdWk1NEV1emlwdG5ZWTlZR3pxa1B4U3krbnpyL3BKTE1uczB5Wml5?= =?utf-8?B?c3hLbGliK0UyVHNOcyt1SW9vZnUyYzlxZnp6SWFQb2Jlb2VONkVvcHljbDl3?= =?utf-8?B?cWVheldPUzlGV0VGVkJ5K0FodEQ5K3Bjbm14RzhQdENJSXlnT1E2WlQybnJo?= =?utf-8?B?eE9oOVJPVXN3QnBmTlhsYUVMMGY2Lzh1SkxSdG1nUW9GY3hYbmdjOC8yYk5U?= =?utf-8?B?MlpPTzZJSE82MU5WWUVUbm5UcGt2SDJGZllDUWRsYnY2bmZXMkpEdVJzRC8x?= =?utf-8?B?UmcvZms4bTFoTERVRk51WVNWYjlCdzhuTXUwWDhPb1g5M0JLR1d3RFVnVlQ1?= =?utf-8?B?ellrMlBJV09PNGpGVUxlTGdZNFNMWWFGR3B0R0NROVU2eXZlK2QxaFBmQk83?= =?utf-8?B?VGw1SWZYd3p5RmJZTXdKS05MZEU5WDlSZEhsWEM0dWtyams3WHdheXBCZTNG?= =?utf-8?B?VTJpNXlMbld2a2FnekVueTc2d3puSThQOUMrR2daZkduRVRHSE1wNWoyNzNh?= =?utf-8?B?bmxJVjBDL0hkUmtnWjJSZENXcCt0THQ2Zjh3RlhEa29uRWI2MVdrc2NVNzhE?= =?utf-8?B?NmtkNkhGd1Q5aGdXQWM5czM0emhwWjJ0L0U1R1pSRGc3MEVHYWNtL1dPckpv?= =?utf-8?B?MC9iaTNPcWNLUW0yb2ZOeGw3V25oTkZ3RWtVUW5zYWZ6L0pjVmFiRkFDMVU3?= =?utf-8?B?SHRFSU55L2thYnJRdEZHOEVMa3NNTFYrd29xQ1R4L1VadlZlL0R0Nngxb2N3?= =?utf-8?B?NHF6TC9QcUZhNHg0VFpDRGJ2c0JNRVBqWGtIWmJSOS9VQ0hSYTRQMG1NbW9n?= =?utf-8?B?ZVI3MjQ1NWw0YktVV3FuNThMNEZnRGxORE9HT2x0S3dlamlyVTBMVkxqYnQ3?= =?utf-8?B?ZU80ZWd3RmZILzNTZEd1TFdkZm1mS0FTeXVENU9Ed0kyajhabmN3MGI4alln?= =?utf-8?B?VS9iK1RySEsrK3Q1Z1QrMXdIWFdvODllR01oZ09lY1ZsR1cvU3FtZzRVeGx4?= =?utf-8?B?dFE9PQ==?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(1800799024)(366016)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?RzB5SWZQT0d4YXdsTHlzQUZtWEdONVV4dkNmMmJJd3ptcnZJd1lBVEJUY0lX?= =?utf-8?B?SXR4SGM3K3AyVFVJTWxEOHNEUEpQQU0vSUxZbUxTSFlUd0lGWWs3Wm5FSjZx?= =?utf-8?B?Q1lLSm9KK09pNmp6RTBuMlBrOElmT2UzampiN0p5RU9aUEoySWg2azZKSm85?= =?utf-8?B?UVZ0WE9qN1o4OEgrREdTYmhQRjE4dHRCdzhVYk5zRmRseGMvcXBseWx1TWg3?= =?utf-8?B?dHdzSlZ2Vy9OTmJScGlBblVkNE0wSEVXRy9rNmRUbTl1dVdFRkpZTWVxTWdn?= =?utf-8?B?eHVIb1ArNkdIU2d5Wmp2Z1FWNnYxYTNxOGt4T1hnOEVEQXVKRnRza0FQUStG?= =?utf-8?B?a0pYcVk3cHRhTzFvOUlMaWRUQStBUE02MHV2cVZXd1Q2eXlNekZIcnhBdVdZ?= =?utf-8?B?MzEvNGtVYlJOWVZjT3Q0N3lOQWF4OSs3aFl6WHM0ZUQ2eEhoMXpQREhWM1g0?= =?utf-8?B?ZjJJVFB1UXVtMVNpeHFRZGcxWUE5SjFjOXBQMEgyUkRmeUFyTUxRL2lxZU1I?= =?utf-8?B?aHZFUVMvZzhOeEtHOG5hZGZqSkVWb0ZGYkRmaGFiQW1PN1l1Nm1rd21NUTFp?= =?utf-8?B?Q1UxcnJMa05pMmplWHZWSXE3N0NvWC9PQWh2UVNqajFyNTF3ZU91dGJ6NmRl?= =?utf-8?B?NGZVNFJXVlpoc1JLVGg4Z3lDa2lJWE5HcU5YdGxaRXY1clJFVlRhWkJONko4?= =?utf-8?B?K1lwRk4yY01kcEVGUWMybDdDdS81U1ppUFZub0UxemZlZmF4Mm9US1hOaHZP?= =?utf-8?B?UUs0TjZMTUVxTHQ2elJXUGc1S08vOVVNSGk3dTkxVE5QKytlck5IRW9iQkFH?= =?utf-8?B?aXZncVN6YTluL3IvRDVBbzZQTGRYS0hkbDR3SGp2cTZ1N1gyM0dRWTRLNWVq?= =?utf-8?B?S1N2bWQ2TFcxVjFwcmRNQlUyeWVJQ2plS2VmeXV5QnBJL1NsQTUwSmV6dUEr?= =?utf-8?B?MC9wUkh3S21CZFo3TDJ5aGRRb3B1aWZGUXJTT25kbHdYaFR2RjZULzhNNmFD?= =?utf-8?B?ZUV4aS9FNS85NXN5VmdzcHhpL2JZb0ZOQ3pveU9CQ2VDVG9uZTRPYWEzQk5I?= =?utf-8?B?VVM2V3ZPTzI2Nzhwa2FUcjVxUTkyZUpia2NtWVA3NWxKQ1MwQkVSLzM3b3hk?= =?utf-8?B?SWM3Z1pkMGNXamduNXpoUG1WWHRYMVFZZEhUM2g3ZWY5dkhxaTd0ZG9JcUZV?= =?utf-8?B?SkpiZ3QyUnZaY00rdlUxS05Rbk40MU9VM04xQXIrd0Z6K3k2SVdlWStCSTg4?= =?utf-8?B?OVczdDQ3NjBaWmtqZU03OS8yL3pzNHorLzJKN0xDdjlwZkVsOVZObGZoSVNT?= =?utf-8?B?c3owbkZGWWFtYUxyOCtHN2VEbm1FMU5TRnFlMGtURThVc1QxUUVJekNnOHN6?= =?utf-8?B?VEpRdHpZNHZrMTRFdnJSdlp3cnhyWTlVWkZac2FVRDZLSkFBQzZac0tYanV3?= =?utf-8?B?YnlpWVFIeVBHdzErdUJQV0ZhWTVtZytFNkIvRldlVE0yWFNvVlMrOXFuTnF2?= =?utf-8?B?TWFWYk1YM0R3NGs5eE40LzlOZkJ3QVE5d1M5K0RmTEs0L3ZPOFN2ZElDSHlP?= =?utf-8?B?ODRJcWxGVkN2YmhOc05zQUVKQlo0eFVoeFROY0lERnp3NlVjZGhpMktNSnRF?= =?utf-8?B?WVZ4dnFobmdtQTI5K2pEOWJjaUQ3NFlhQk42OGFrM2k0ZENLQkpadmJnU3Vw?= =?utf-8?B?WFlOWmNCY3VKRGl5bzBuOVNUUjArMEpyRThhcjVNdkw2Ti9kaUxGY1o2Nld2?= =?utf-8?B?Z3dHdEhwck5pVzJ1YmFIbHlKbzZMMUZQREh5U2VTWlVUcHRkL241ajRmekQ0?= =?utf-8?B?YWIzRFNYb2ZJVGdWcW9NVzNUVWxsNytaNXRtRGo2MXZ6a3V0VnE1L3NFTzFD?= =?utf-8?B?K2xCUEVjMUhUeE10dGgxYVByM0p5VU9qdEllZEpYUTF0QnkvdlZRUW5pM1Bo?= =?utf-8?B?blhSdHpBQlU1RGxyeU1xOE1qL00ySHUyaWVTTjBUQld5eUNYR2Qra3IzNHRu?= =?utf-8?B?TitwTDBIeGg1QUx6REFXVHlscFJpOHZJdnEzb0w0YUJjQmFwL3Ftb3N5L1B0?= =?utf-8?B?cno3b0ZEYU81R29CaVhDRjRwcTVLeHliTWRlc0FRTDVxeHBOR3BvcG51a1pZ?= =?utf-8?B?aWRwR3VrRnBBaDNBM1dOVjRSenRuR2RBYzJCUUJOTVpzb0FXc1pDZFpEWk1H?= =?utf-8?B?UDd4VktzYVdkNGdNK2U4TDFYZTY4NnpBZWFIbmZGdWVSbzJEQ1hnMjd1VVNG?= =?utf-8?B?djNiSm5uZ0luVENpZHFPUHlBaHdmQTNEdUpsVEVFUjhFVDRyZy9mWkFLaC9Q?= =?utf-8?B?QStyMHprMHlUa0hWd0xpZlFjc0VxQWVoclVlTUg0eUlPUWJ6eXZEMmd6UTZv?= =?utf-8?Q?+u5Ujqh0jzXA7SnYmVh/9BRoKzb+kOG1OtJEJ7YaTpVMU?= X-MS-Exchange-AntiSpam-MessageData-1: QysyQYddmURywQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2410c613-a678-4358-c88c-08de65450c52 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 06:00:36.9337 (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: KtyZAMAKlzDFPljgAdFVNcaBhYKOk9GXoDqhjRPoabtb04YDQnrKBUzlIdEfHvi1vySh2nSf8mgxrNqWjqJikg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9683 The `_relaxed` I/O variant methods are about to be replaced by a wrapper type exposing this access pattern with the regular methods of the `Io` trait. Thus replace the examples to use the regular I/O methods. Since these are examples, we want them to use the most standard ops anyway, and the relaxed variants were but an addition that was MMIO-specific. Reviewed-by: Daniel Almeida Acked-by: Alice Ryhl Signed-off-by: Alexandre Courbot Reviewed-by: Gary Guo --- rust/kernel/io/mem.rs | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/rust/kernel/io/mem.rs b/rust/kernel/io/mem.rs index 620022cff401..7dc78d547f7a 100644 --- a/rust/kernel/io/mem.rs +++ b/rust/kernel/io/mem.rs @@ -54,6 +54,7 @@ pub(crate) unsafe fn new(device: &'a Device, resou= rce: &'a Resource) -> S /// use kernel::{ /// bindings, /// device::Core, + /// io::Io, /// of, /// platform, /// }; @@ -78,9 +79,9 @@ pub(crate) unsafe fn new(device: &'a Device, resou= rce: &'a Resource) -> S /// let io =3D iomem.access(pdev.as_ref())?; /// /// // Read and write a 32-bit value at `offset`. - /// let data =3D io.read32_relaxed(offset); + /// let data =3D io.read32(offset); /// - /// io.write32_relaxed(data, offset); + /// io.write32(data, offset); /// /// # Ok(SampleDriver) /// } @@ -117,6 +118,7 @@ pub fn iomap_exclusive_sized( /// use kernel::{ /// bindings, /// device::Core, + /// io::Io, /// of, /// platform, /// }; @@ -141,9 +143,9 @@ pub fn iomap_exclusive_sized( /// /// let io =3D iomem.access(pdev.as_ref())?; /// - /// let data =3D io.try_read32_relaxed(offset)?; + /// let data =3D io.try_read32(offset)?; /// - /// io.try_write32_relaxed(data, offset)?; + /// io.try_write32(data, offset)?; /// /// # Ok(SampleDriver) /// } --=20 2.53.0 From nobody Sat Feb 7 15:21:40 2026 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010027.outbound.protection.outlook.com [52.101.201.27]) (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 5A73430CD87; Fri, 6 Feb 2026 06:00:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.27 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770357645; cv=fail; b=lN53U5OTnXR+V1CMb+ztCSChwS/J8JDUMR94n+58aGo/mZmpPnAorlhqEQ1CTcGa99YxEc4aEbtFffvgksnUpSfotsSHQy+XJ21zCnoJiQgoR8rxseek5BcTBY5YgxwafD746354+Z81gCVOUtS56hXQDfXRvmWdkEzKyPw1OCQ= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770357645; c=relaxed/simple; bh=LP84xAZQYVyEs8gF3G8FkDaRnfcTgay9BieU0jGEFMk=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=g4KGkwkPQua/0jn3F+SWZJKbhcvcm7dGxmquQp2MtFoaVLYz4NYPStFJjHziAR7gSpPlDs5C3n/ltVf8SRxeYTTUgZRsrpLHmt9GnenT5s9JKS4o8a1Do57ZM4Tr/uX1ZSd0zEE/uV/THd+jOLakbadK6kJWsv3zmqfR5tcQaC4= 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=kE80uuQp; arc=fail smtp.client-ip=52.101.201.27 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="kE80uuQp" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=m4rtBbqKT0HyoiqNgdJqqhI5zdg2NHt6amZVy+ULJJwqGHsrSK9ljCyEheL7ndI5Y0CvhsUEtteDesdxJm3siNk+RsGgBPfMKeig//WVsEHISXjzYoQ1K680HKe+LANJPRfpStfXdoDOzc0UDS0cno61mR/ScLnMvk3qVZonZN1At+8SWmAVbH9U7+ExhPRo/MlFwhzQipfgX9XUl6hDr66d5Ds23j7vXf6jPoPRcHMghcX/c54kKaKASMAtURmdX5VlJCTY1VKWguu1cufzhNgtUpMRVjPiv4ueBa7j+fDMCCcZa83Onw2kJeSrDeWJlbodrWBsj8YRBbB+5War5g== 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=sySmbAw+bO4tppt4IW8fnrs6cUYJ+2/nz035a95Qk7Q=; b=UqeM2SAcuz9J2Son89ggZ7RCTzjTa9WJ0qWwbBZqMbqro8IuJ2oMV5ZkFq9SNHo/v3if26uQSf5tIpUqZuRjSSIcfYXJv8vdfcvNiaSAgauz7Lsw2/Ww04jset07iRHyOQEaLALSvJjs2iKBvPar8liervUcnJ5hE8zsOfrpaur1bbNnxr6lnPbyloTWbKdIRbVf+FmxWd1B/DLW/M8s4w/8NQidNKxkBWPiwu4zfAc2U3PpE/Fd/usfhcRQ60+2et65QwlVxZnTRtihdC8P53kIMVmX3ZQQH4G0vBJ67t90KkcSbYdXWWcVnn5ONTSXOh7CU3TIH974qlUlLLqiWQ== 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=sySmbAw+bO4tppt4IW8fnrs6cUYJ+2/nz035a95Qk7Q=; b=kE80uuQpEaX0QszlWxCRiauzmCv5aqEtlUn3/uuCjW8wl7+llaE3j01bSQPUNkhPXkvllF7+DqkPJXLEAuu+KZ8ok0bHNGxSfgeoAC6QsjlbcCG1mCPcoQkTlYQEjYZqvs8JtBVP+A5vXFJNLcmNGkRUQT0V9QY2TvhC5wyyvkbE4+PyLz0ox4/ifEhHAk/y0ByBfjUVsh+bpEpSamP4NCIbsbJ0A4dVIRnXbZo644dMV3bKhcyQridkmUPyl/f33QawRZyYizu7fp4o8EFool8B9M8TIJz7iGzghr+/q582rRYN1weXXUXEtZdv3vl3I6IzoUG3balOShfjD4zuqw== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by DS4PR12MB9683.namprd12.prod.outlook.com (2603:10b6:8:280::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb 2026 06:00:41 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%3]) with mapi id 15.20.9587.010; Fri, 6 Feb 2026 06:00:41 +0000 From: Alexandre Courbot Date: Fri, 06 Feb 2026 15:00:17 +0900 Subject: [PATCH v2 3/6] rust: io: provide Mmio relaxed ops through a wrapper type Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260206-io-v2-3-71dea20a06e6@nvidia.com> References: <20260206-io-v2-0-71dea20a06e6@nvidia.com> In-Reply-To: <20260206-io-v2-0-71dea20a06e6@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Daniel Almeida , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Bjorn Helgaas , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= Cc: driver-core@lists.linux.dev, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, Zhi Wang , Lyude Paul , Eliot Courtney , Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: OS0P286CA0060.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:9f::11) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|DS4PR12MB9683:EE_ X-MS-Office365-Filtering-Correlation-Id: 839073e2-6828-431f-605c-08de65450ece X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|1800799024|366016|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?clVDcXVWUjBNQXM3WVRUSFB5VTZRMklNMGlOZHhRNldFK3picGlqdXhlU3hI?= =?utf-8?B?bXdYWGh4MllDMDZVUSt0RTNPK2prY3dJODFtT1RaWE9uMXB6M09jWG1hcDdF?= =?utf-8?B?aXR1aVJRNEZzY2dOZGpUbzlwQ25WMytKODZqTk11Y1VGdVJTbzBHQ2RwZFc4?= =?utf-8?B?L21zQStMNUVhMks1UGhmZ3lCY0tKa3FRZ0tiTElUc01tSzBmM2s3SUkxWk9Z?= =?utf-8?B?MzYrM0FIYS9scnNjbU5Tbmo0djNHMzkxZ1VkWDB2aXZ5RkpMSE9jbGZWMWM1?= =?utf-8?B?ZGxJVnRsZHBzRngvOVozTFRpeWtBWVNRK1ZSUDZaRzI0T3lNK0hDejN1MTRv?= =?utf-8?B?MjlaOWt5RXcxL3RyUlhqWDZTQjlLcno4cFFlaWVucXkyeXVKQUdsRC9DQW1L?= =?utf-8?B?ak13L2twZ01XUzZKRzVrQUpVb2pmQ3pOVEJmdVg5bGhNMzhDSDFnTVRMd2lN?= =?utf-8?B?dzBzejlqaXdQUHNWcmNwSHl2S1FEaHdBbW1KdEtxNklNV2MwbnhoS1gzb3dF?= =?utf-8?B?cEs3SjdyVWtXNWs4d1F6TVJXQWpiRTRwREJIOG9WWlh4VHVLTnNpcmlrNk83?= =?utf-8?B?enNRWHgxYUpBOEc3N3M3czVVYnRvR2N6eVVsZStlNXg0TjlSSk1xTkZXYzUv?= =?utf-8?B?anUxRzdleEVoeENXWS8wdFJOVkc3SFRGRk1WOU1kamF6Zjg4SGVjTzE4cjVT?= =?utf-8?B?MEQwTm9KNE1KbUJuZlYvc0w2OWxHZmg0OE0vTjJFM01nRnZiQ1htc2RvOXZY?= =?utf-8?B?azFxYWVlOC94SnRTS1ZLaUNKSlp1TWVqVEo5aHVueUFxL3ZCYUl3Q3BlM0xU?= =?utf-8?B?TVE4cmFmOURWeW5rcjJ6a1ZuSlZVS21yKzZOY1J5bDhuMzRBZ2k4ampvT3lm?= =?utf-8?B?RDdEMzhyY1BxSmJENTJvdnd5b211WjA2aUdiMU5nVVJzNzNJQ1BXeWttS3M1?= =?utf-8?B?N2V0YWY3akpNNytBckxZWUZlMmNWN2prT1BsNWNyUko4MW1keGwxTmpPRjF1?= =?utf-8?B?L2pLQ3VEMkJxZWp1VWxjeHFwVzIxT0RUK2F3cWNzeEErME5qb21IK0EvSTlx?= =?utf-8?B?NTRiOXJ0UWRhNGJUUE1nSkFJdUgvV3E4SmRCRk1zdTJkT2FmR2Y5bDNJQS9R?= =?utf-8?B?ZitCNUp5ZDBDZDZyd0VOV0k2VlVJM1RkdW1KM255SU56d2t6clIwNEIrdWtZ?= =?utf-8?B?U2dvOUo3NU81bXFqcklHRG05bHZFa21weGhuVEJOdk9vS0gxUXlSTkpFMlBZ?= =?utf-8?B?NUdPbzhYbFJHc0Vzb1JaWjVzT3ZxQ0h5WXQ2MnpvU1JaR0w2VjFOUEV2ZlZR?= =?utf-8?B?aWtRVVZSRFVpWkIxd05FeUJBc3JsVTdLVVIxY1dYdGlEaUlKbU5RR3A2VXhp?= =?utf-8?B?anFjKzFBcmx1VGZIbXhuK1M1b1YwdW00bVAzRGp4MWNJUitLa3lla0dqNzZO?= =?utf-8?B?L2piUkFJd2RiMm9OUGNLVGJ0T3NUMnU0QmZNQ1lLL0hpdEdUbjh0Y05FMG1h?= =?utf-8?B?QzJCQ2dyVlR4am02MXJqRGoxYzE1T0lIVzJuRG15UEROSW5uVkQzdzdZbWhV?= =?utf-8?B?cFpwRjZyNUdUSmFlTytERmZDdjF1L3Y3Yzgvc003ZkJybUNUUHlrQ0RXMStJ?= =?utf-8?B?QmJ6RVNDZWNDWlFuQ2R1a1FtbE5STXRrUFA4S1FXT21kNHZtZlpIUUZlSmRH?= =?utf-8?B?OVprcUd5Q0ZwRWVRRVRicVRmLzZpbHBld2tXQnF2eWUreU1aZ0l1ZWUwOUFt?= =?utf-8?B?Zis0TzNNQUluWElyVml6QWdodjVKT2RUM0EwdGpkUEtEbUh4VWtsa3NNUHJZ?= =?utf-8?B?MDluaGdYNXpHbmFseGVhWmVBY2MwV0NKUXM2WkV5RFAwc2EwRmFQUi9jSGV6?= =?utf-8?B?enZZcnUrcVF2QnpaU0dieEpyM2k2KyswbUtzU1ZNdGZYZjNhOUY2ZWd2S2xH?= =?utf-8?B?TEVzcHhQeWk3WnJqWmh1MnFUZVpxRC95VHBTWFlyalp1SzFLeFpIS2VKMlVu?= =?utf-8?B?MWZXSyt3dDRRTGxqR3RIVkVPejZ2ZDZCby93VHZsR0pzbFd5UU1ETjltc1FU?= =?utf-8?B?SDZ5ZFh3WmJGN1IvM21mODlXWUwvZGFEeTNyb2xyc0VLTlFlMExZcUFUZE9V?= =?utf-8?B?RDZtU3ZIUE1ucWZ2NnpCdm9zbUt0dDRZNGEyQUpDV2RFdEowTU41NVhIVlRy?= =?utf-8?B?L3c9PQ==?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(1800799024)(366016)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?dm1SY0tYM2lLM1pVb1BUczcxQWN3WGxid3dLNWJNS245ck5US0JydlRxeXVQ?= =?utf-8?B?eVdMaGFWWEVpQ3llb2dnemFJeHp1N2tJNVBZTk4wTjAzaE9yQ0RzdjNvRXZS?= =?utf-8?B?UkUwQzQ1M1JYT2szRzBqS0RkUjh0KytTZUFxR1RUK0pRdjRyYjh6OHhpRGkx?= =?utf-8?B?cEdtWEdCenJPanlUa2czenExU1ZwTVhTSDFScTEzVjFYT01NaTBRSnZscUlE?= =?utf-8?B?NWhmRW9sdGpjN1AxYkREMHNKQVNWMDEvR29pZWlBai9ocEltblJzdHNkT2E4?= =?utf-8?B?VGhJYzV4U3Y2L09LcUNDZWswVTRITk1vT25RcXN0WUxFTlpQUHdZUGg3MUZY?= =?utf-8?B?M3kyY2g4WnlZdmJTTHExSVdFQzBCSzZ5SCt4Z1VMMTV0UTdnbEJuWkxyS2FQ?= =?utf-8?B?d2NWdE9Nc25IYUhFZUJSVWdNNWl1SDFVTnpkbTIwREhMRmVyQS9Uc29wMTNw?= =?utf-8?B?MFdNOTZRc1Z3dEtnTmR5K3hqT2Mwb255M012bmRVTVZwa2tpNXdvMmpFcWZv?= =?utf-8?B?RFhBOVN1STdONnFGaHAwNlpDQVFzN1FoUHN1djBseHZUTGMvMzZybUFlT2pW?= =?utf-8?B?TGZjSUcrZ3g2bHZkZnc0S2JnZDl3TmJPR3ViQlVmL3MwQ2NJbGlGSzNGck5n?= =?utf-8?B?L2xzWmVtTEkyYzRmaVR0ZUVpT1B4U0NKRjFudWd1R1dEUmNVMldNVUVjeWxa?= =?utf-8?B?TVAwOE1BYlBjK3hvNlhCNy9ad3BiWGVFM0FIdWVaNllJblhkek9BMFRaQm9u?= =?utf-8?B?VTZkSHh1bTRXcldwdmkzUEFBSFVMS21xVWYweWw3YjBlend5ZGl6aU9QTGxy?= =?utf-8?B?Ym5TTlJWR2ZJcmlSNExyMDUwN3UzcWNLcFFnVlNIVXF5WmIrOWNFRGdYNVFG?= =?utf-8?B?M1NubHlyTVMrRUpvbS9CcnV4K0ZvVnhFcHR0anUrNlh4Q3JzSHF5M083bEpW?= =?utf-8?B?QXJxelQ1SkFqS1NXSUFha2hFWmtvQmRZSThiRWRvemxOVFFkNnB5cDE1WHQr?= =?utf-8?B?MVpNaU1BNVNQR3ZWbG9PdFQveTcwelhKa2RWakdhK0xONlVXMDdwNS80T3hi?= =?utf-8?B?TWlaR2txcFlYamlxYnVscnEzYTVmdnUybDh3OUNlU1FNMjc4d2lRQWd6Mnlt?= =?utf-8?B?Mi9BMVBKLzJlUkxYUC9kbkxCMGJuTmhOM0p2Z1BpRVpocjJ1VHlSbWxsQ1dZ?= =?utf-8?B?MFFhdlRDc0FaUlpYYXlNbmJmOGs1UnUyTVFZVFBHaXRjQUJlUEpCV0t2aEdB?= =?utf-8?B?b0ViMm12aVdkRkU1UEg2U3FMR3V4MXVNSmZFUmQrYlRmNUJhVjA3MnljWXpm?= =?utf-8?B?c1o5SVNwZURZT1Bjanlscklncmd2cU4wSWwwSU9iRlIremQrMC9kc3ZrMFNB?= =?utf-8?B?cFM4V09qZTIzdDNndlNhYk5QRGJLOVJoeVZCbTBQRDMxR043ZFNDKzJUNGVp?= =?utf-8?B?czNmZWpmZVJYQkEyNExITzR1aUNQbjdkZm15bEdPTlNpeDRRSU82R21JSjRF?= =?utf-8?B?K0k4WmxSN2ozRnErNG9IM09WendXeDdkMmxqa1JUY2sxNVp4d0RWYzZ0ZlN0?= =?utf-8?B?OEo4MnlOem91SzJEeWY1T1hNQXpJNjR3QWFwQXBPSVZnSDIvM0tYK1JtZ3Rp?= =?utf-8?B?c05LMnBaQ0d3TzR5Smh1ZEhDRi91VVZtTVNVeDdEdmNTQWE2R0t0SjNpa3Ey?= =?utf-8?B?SUFEc1VGNXFMTVJiZzdGdXQ2Wm1relF3b1Nuc0QzNXJjekdlMkRjY21oekRR?= =?utf-8?B?TzJReDFzZkpZbTg3cjFsdXVYVmJDaG81TXRhVnlsaU5CQXlNY0s5MzRVbDd3?= =?utf-8?B?U1JhcWxuK213eEd0MW1nVnZDdHQwelFHb21Xby8rVXYrZkJqTU1pbzJDcXpW?= =?utf-8?B?U2h5TTNIbkpaMU5yWW1kMk1nOVQxeU0yTWYrSndaMTM2NHhkRUQvSFMwcWg3?= =?utf-8?B?cHBCUTJsczFJZ0RVV1ZaN0lQd1AwN0QzSjF2L2VWRTRMQ1ZtWUE1V1ZraWlt?= =?utf-8?B?enVrSkxhcWJJUm1KNkNoc2hLWHJjMHAzam5OQVVaZFFGS3FmbVJIbTVSVVZt?= =?utf-8?B?d1hnVzhrSGZ6elgyZjNNY2loYnp0UWhhbVZqR2lXbkk5SUxVa0s4K0lZbXlV?= =?utf-8?B?dVRpQ0U3ZUVhMUlpRDdhQnpMWGVvNDhSVEhsSmNHNmZWRFcwQk1SYjhQMjRX?= =?utf-8?B?bytoZEMxUmtYNGgxcTBUaGwweXdUL0hmUDI5MUxEcC9iTGtmakVCdDcvY1RE?= =?utf-8?B?K3lxMEVpYlFwZi93bEpFOWFRV3k1cXlvT1A4WjUyOWl6aE9BR2kxYWtjNFZQ?= =?utf-8?B?bS9PVExYVlVmK29xdklRbjNaR3ZJQmNVclVBVHArZDNZNXpTbEF6MXpTakpw?= =?utf-8?Q?pHfhnBUzET/UFAWJr+ILwVo6QrmJntBpJOOtrInQZp2a3?= X-MS-Exchange-AntiSpam-MessageData-1: CcVhbyzij2TVQQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 839073e2-6828-431f-605c-08de65450ece X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 06:00:41.0225 (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: kZX854tg+H9aanOPC4sQ9VvVBOHcQfzbU/NQj8niBWOkywXZD7bxZfKuiTBDH75NOQpO7d/b1U5S+VoSODQIag== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9683 Relaxed I/O accessors for `Mmio` are currently implemented as an extra set of methods that mirror the ones defined in `Io`, but with the `_relaxed` suffix. This makes these methods impossible to use with generic code, which is a highly plausible proposition now that we have the `Io` trait. Address this by adding a new `RelaxedMmio` wrapper type for `Mmio` that provides its own `IoCapable` implementations relying on the relaxed C accessors. This makes it possible to use relaxed operations on a `Mmio` simply by wrapping it, and to use `RelaxedMmio` in code generic against `Io`. Acked-by: Alice Ryhl Signed-off-by: Alexandre Courbot Reviewed-by: Daniel Almeida Reviewed-by: Gary Guo --- rust/kernel/io.rs | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++= ++++ 1 file changed, 62 insertions(+) diff --git a/rust/kernel/io.rs b/rust/kernel/io.rs index dc894a45bbcc..d5d6e9501453 100644 --- a/rust/kernel/io.rs +++ b/rust/kernel/io.rs @@ -695,3 +695,65 @@ pub unsafe fn from_raw(raw: &MmioRaw) -> &Self { call_mmio_write(writeq_relaxed) <- u64 ); } + +/// [`Mmio`] wrapper using relaxed accessors. +/// +/// This type provides an implementation of [`Io`] that uses relaxed I/O M= MIO operands instead of +/// the regular ones. +/// +/// See [`Mmio::relaxed`] for a usage example. +#[repr(transparent)] +pub struct RelaxedMmio(Mmio); + +impl Io for RelaxedMmio { + #[inline] + fn addr(&self) -> usize { + self.0.addr() + } + + #[inline] + fn maxsize(&self) -> usize { + self.0.maxsize() + } +} + +impl IoKnownSize for RelaxedMmio { + const MIN_SIZE: usize =3D SIZE; +} + +impl Mmio { + /// Returns a [`RelaxedMmio`] reference that performs relaxed I/O oper= ations. + /// + /// Relaxed accessors do not provide ordering guarantees with respect = to DMA or memory accesses + /// and can be used when such ordering is not required. + /// + /// # Examples + /// + /// ```no_run + /// use kernel::io::{Io, Mmio, RelaxedMmio}; + /// + /// fn do_io(io: &Mmio<0x100>) { + /// // The access is performed using `readl_relaxed` instead of `r= eadl`. + /// let v =3D io.relaxed().read32(0x10); + /// } + /// + /// ``` + pub fn relaxed(&self) -> &RelaxedMmio { + // SAFETY: `RelaxedMmio` is `#[repr(transparent)]` over `Mmio`, so= `Mmio` and + // `RelaxedMmio` have identical layout. + unsafe { core::mem::transmute(self) } + } +} + +// MMIO regions support 8, 16, and 32-bit accesses. +impl_mmio_io_capable!(RelaxedMmio, u8, readb_relaxed, writeb_relaxed); +impl_mmio_io_capable!(RelaxedMmio, u16, readw_relaxed, writew_relaxed); +impl_mmio_io_capable!(RelaxedMmio, u32, readl_relaxed, writel_relaxed); +// MMIO regions on 64-bit systems also support 64-bit accesses. +impl_mmio_io_capable!( + RelaxedMmio, + #[cfg(CONFIG_64BIT)] + u64, + readq_relaxed, + writeq_relaxed +); --=20 2.53.0 From nobody Sat Feb 7 15:21:40 2026 Received: from PH7PR06CU001.outbound.protection.outlook.com (mail-westus3azon11010002.outbound.protection.outlook.com [52.101.201.2]) (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 7EC3A2F83B7; Fri, 6 Feb 2026 06:00:49 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.201.2 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770357651; cv=fail; b=r6jQhxaPFZp4B4DdyRCzGMfp8AJ0Ho4Ri3pXYVrRNSUqC9z8I1o224gKCgresdActHhBA1WIh8Xb18mPWGbmcpe+9TpjudX7saD2ctszDLQZAoMWcZXo2L33LNDzgSW9IjBzg8efuMZrBWrNizYyWonzXaP1T6m5b7WUZ5DLFOY= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770357651; c=relaxed/simple; bh=HnYHfVczE9TXuq49NLAPR0vIj4woj88mHngISn+J7kc=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=JOVXnZzGUCdNbHrxfkzvBANdJb+hqkynybi/fg5IhcuUcN6yDBnyE43iivLzWBzaTYvsuqCfPHoVJiNNY76KoO4tZ90yWV6KHdGnLo4DUo3b/sy5rAicZJ9bXZuiJAIsNTgRytqJD79K4nXWUkR37gWX6hnZwevfEYthH5bHtEI= 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=kxukvf5D; arc=fail smtp.client-ip=52.101.201.2 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="kxukvf5D" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=tBSDAVOzF8DgfTP/+f2WYtWFtZoNSOKGw05MMWUrmULWRwz5w2kMtBBsFGSCbAxuVbw/a+AzU4TPzt5COoTbSnuWNxdLhqGpgSgZaRMzTFZNATSTWpCTAVWo6+smJsJuv7uk6yEiVNJ8sPzcm9IZi7aBgL1PZm5ajSUp83VVQd8vJJodM5Pw3fliWKi9rYVs0V3kAo73kH8VQGlv15ZmRn78VvaNpMqDfJT6gOgiaJwH3jLZDlmKtDA3N4dtL6B5L3ADbVvjA1da2MfUYTffdUDvgzMQ7vCgoccw6dxHPqYCLGCB+tYb5uI7oW2zLFbg7xTU3Mz8ChLbjY8O6dgy4g== 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=IKCU1z0MOX+UOzgLVfS8+ALxay6qL+SJ/Pb8iRiu/7I=; b=JOzLAH5yk6Y2yLIq1sGA3mpsFNLPNL2A6INPgPr8cNeM6Ykcl2UOuIkxK/fD2tu/Uqi3sMO2dZx0aYRLpNWz6SBWtZb5yKBWFbyYXY8uIVOKIoxfZlv6AiTNE689vXuUhb8wgKMu3hDlaqPIX1GFm3GoAUFAioeoZxVwCrMlEh2tjtiUNBZBDxa7GyxCJQ8KPKt5du0tLn2Mj0yOMSgZiDZ72gvNnI/bMJovBoMgxh3pKI00crT6I08gA9A4iof1mX6zuyW7VnLh/JcRfdkorO5I2PpS4C9lkhzBeoX46W9v7Th0gN8wkItmlvWsfYoTCT/joHUYJTI/jOpRV9iiHQ== 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=IKCU1z0MOX+UOzgLVfS8+ALxay6qL+SJ/Pb8iRiu/7I=; b=kxukvf5DN7aKdMQAV7n0c66Qvujp8UmalOfBgriamGR2fy4cEJv0h1ZrPJP0aOIrUIOCKvTqbmwsJULeKTzcviuzm8f4cElLb7Q7hGT2C9mbC7HUklEX6ANcD8vKstbNv7+iZ/kLnQ0+zK064gxN9Xz+qJbaa84CZL+wMGWbuCkgnMz6o4C2S7DLffiylYPO9RC+UrzBEOtX82cijJqQC9+Hkp/sGm9Ktu9B0ZkQF7BprcvSdomAdr2052gBharp555KxN4N4W4MgtNbShrw6yJYcluSIevvh4zxtn+OgLkmyXqDHvSZVxqvhQB3heV930tovuN7Cf88O9Oqq2XqrA== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by DS4PR12MB9683.namprd12.prod.outlook.com (2603:10b6:8:280::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb 2026 06:00:45 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%3]) with mapi id 15.20.9587.010; Fri, 6 Feb 2026 06:00:45 +0000 From: Alexandre Courbot Date: Fri, 06 Feb 2026 15:00:18 +0900 Subject: [PATCH v2 4/6] rust: io: remove legacy relaxed accessors of Mmio Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260206-io-v2-4-71dea20a06e6@nvidia.com> References: <20260206-io-v2-0-71dea20a06e6@nvidia.com> In-Reply-To: <20260206-io-v2-0-71dea20a06e6@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Daniel Almeida , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Bjorn Helgaas , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= Cc: driver-core@lists.linux.dev, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, Zhi Wang , Lyude Paul , Eliot Courtney , Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: OS0P286CA0098.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:b1::13) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|DS4PR12MB9683:EE_ X-MS-Office365-Filtering-Correlation-Id: 63f1e119-df11-4ca6-b15c-08de6545115e X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|1800799024|366016|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?RDR2dDBPVnFwbmtabFNneUNPams5YmtHUEQ2dGdnVHBVOE9Ob3hSb1FkbzUz?= =?utf-8?B?c3RlajRzQ29WaEgxT21YNkN5emZLNlB2N0Q1QmlrSkdOd3U2WVJ4eC85aWNk?= =?utf-8?B?MDFzcG1EVHNYL0pLRzJ4T1RBL1cyUkRxNFhBWnJ0WHdYaG9tZ3djcEZldWVF?= =?utf-8?B?dEl5WmJBNmpleXBiZFBTWjJsMFFFbUNzcDJOSE9CTlRpRmt2ankwQ1FtK1dR?= =?utf-8?B?M2VadGM3SHh1VGhsY1h4Rk8xdW5GcUk3RVFDcW1ITVkzQVU4YUVTSzN6TVQr?= =?utf-8?B?YzRDTjFYTzZid0VMOW9ocTIrQUczVkNpa2ZQQ2RnSXhaaXNxc2ZnZDBWd2ZF?= =?utf-8?B?MGlhZG5ITUVxQmpkM2dvc3FoVjZqZStucUkyUTFrM3VzazQrWE1oT2xqTElT?= =?utf-8?B?S1Zja3BFalpwdnVsb2lYZ2NiUTNYNkhObUF1SE1Nb2t0QzhnK0J0QXdKVTFq?= =?utf-8?B?OTlSV2NvMXF4K05sZjNqMmJ4Ui9wanhtSmc1dlJ5WEJGVGdNTEVxWldnNjNl?= =?utf-8?B?REJKU3dvc1FhaXZXdjE5Wi8yOG5KMUM0OWE0T1BYdGRsblJlaGJmZUdnUDVM?= =?utf-8?B?K3V2RS94ZGpzb3NIdnVKWTh0Z3l2MmgwNUU0QWF4RGpkemEzS3NzSzJWbGw2?= =?utf-8?B?ZTRtR2FJRWk4ck5LQjRuU0w4blU1eEx3aHFtRTZPVnJ1T1kvSGpZNzMrc1hi?= =?utf-8?B?enlpUXF6WVBBK3JYdVJjSWdQMkp0MkpNR0RNbC9SNnJvSi9hM1kvaEplbktV?= =?utf-8?B?VFQyMzZ2OGxsL25yTStaSzFEUi9BekhJSFkwNTJyd0tGa2pHT3VCU20ybFZY?= =?utf-8?B?Y3d1bWFRaFdwNG1WQWY4WjVhekhZcjVzYkxSMUxURk9GaTFaa2JkUTluQUdO?= =?utf-8?B?SnJUclByZnk1ejNOcjhadU5JbmxjcGhlM1NWV1RPSUowZW4rUDg1YVZWcG4x?= =?utf-8?B?Zll5aVE4Y0ZCVjRjZ0xKR2hxdk0yRXkrcnRRSVUwUGg1VjRIMmd5RDNmMitB?= =?utf-8?B?SHc4THVmT2U4OWl6TVQ1dkdtV0N6VXZDTkRwVjU2cFBLOEszY09zRm55bTli?= =?utf-8?B?VTFGb1ovV3ZRb29POHdLN2FXMTN1NHpaVDkwcm9YcXZXVmZjVnpPUFNNOXlt?= =?utf-8?B?Z1V1TFVsdzB6MitsNEZ0ci9wQWZWY0lOSXdPa0ZjTzZTSE1WRE45NlI1a0JE?= =?utf-8?B?eDFkK2toQUdhY2VZbzJRRHdhY3BkSTh1MnRaL1NlNzE3MkJqeEJPajNuajRL?= =?utf-8?B?NzFJSCt2OWhaYis0SXl6Q01sSnhLY1cvZVVwTEtmK1AzR2t2emZ6S3ZabHFu?= =?utf-8?B?Q2Q0ZWxMbzVBZXVsaE43eG9rV1RNUnVRODYrdm5oaXZ2UUlRVldka29xM2ov?= =?utf-8?B?LzV6K1RxVlpDZGtLRCt3THhYakVSS0YrZE80ZDV6Qzkyc2lCTzJwSmxVQUE5?= =?utf-8?B?VldXeXpFb2ZzTU55czdNcFNlRXlsN0NvN2NmT2xjOVg0VWUzbmZSdUNlZFcx?= =?utf-8?B?WW52OVBkMDJVc1FJck4xRGVTN0IyZ3NFSHhKY1lEaXBVV0dHV2FhdkJvelhl?= =?utf-8?B?RThPUjBNaVZ1ME16R25hVGs4R00vK3A0bG9nN1ExbklCdytwZ1kwazlHRUhZ?= =?utf-8?B?S2hnOXZ0OEhCYlArbFo0alNod2svakJvUk1rSmFvZE8xeFhOd245QmY0c08z?= =?utf-8?B?WWw4ekhSdGNHdXNxSTRSOUE5R05qZzVRZHlMdTFEN0h2VXBUd1lBYi81R09w?= =?utf-8?B?c1hHclRLSzMzb2l5RlBBVUx2Njd3ZGYvTHNrSHBtejREKzBwdzdKQVQ1c2xy?= =?utf-8?B?eTdtNHBsb1drd1RxTjJyZitVRXZmWjJxdTI2c2lTdjRXTVJxbGZFUnJSUDZk?= =?utf-8?B?blAxNDkvdC9xM3VFQ3VCb0p5RS9GTi9ZMUNzdkhOblRzUVZxOEwwRmVWZU9G?= =?utf-8?B?RWIreVY2WVNLVnU3TjBHaWJTbGRWMFc2UFc5V1RIQ0grVEcwNTc5REVLODJM?= =?utf-8?B?QUlBWnJuTjU5UFdRdW44UFNqZ296ZkRCN3BsU1pQV2d0Ky9jc0Z0cjlVTTRj?= =?utf-8?B?bkFVc2RMbjdaY0tmRk0remMvaTc0VHlZeTNoa2lVcVNrcmVYVGxBTVlHQysr?= =?utf-8?B?anFMRWJKTDNnWkdJYm01M1luUUhBZ0FLZlBhRlJYWmE4UDJteVNMVlRyM0Ux?= =?utf-8?B?eWc9PQ==?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(1800799024)(366016)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?MzVRYzB0Y3JSLzd5b083Sk1STmZTR1NaQThiSjJhUTRPOFoxbG5RdHVYZG9F?= =?utf-8?B?MkI0K0NIeGhGUnQ1ZkJHc1RHRFFDTDRsS0I4ME1pWjVreW1OUmJQeDNwSTJ4?= =?utf-8?B?VnRBYjZBTmtUUkdEaU9VWUtYUk8wMTh2Tkw2cmQzT2h3Mm9jYXBQaTNla2lr?= =?utf-8?B?K3RIZ2NaaGhOTDIraFoySFJuYnhiVlU0UFNiWXNXaU5oVHFmTFhsM2lkQnN4?= =?utf-8?B?VVJReUpsYnJURCtFV3l2SjdwNmgxZUpPMG1CdUtCRUZhb015QVJRNm5BSjZs?= =?utf-8?B?OS90ZFcvaXJpZjlmVFRFaEF1UWdibE9nVWRzRXlmUVNWZHY0Qk5Ec1JCbldV?= =?utf-8?B?K1RSV2w3WGpLY0g1dVFjUjg4aHFKZzRSSkFEQnFjcWZ5WklkRm5vdG5Ea0pY?= =?utf-8?B?MHNJd2lsc01kQ244Uk1lb2ttSnBhTWhEdU9xZkpZeHZ1RjRtOW9rMC9YNEVM?= =?utf-8?B?cDVma3hrcFpscEx4c29DY3I1VGgzblF6YnQ5Q3B2K3o2dHFtcU5IcTZYUjZz?= =?utf-8?B?cVZ6N1B2emFZOFQvVVIxKzJNS045RkZ1WnlYWkhrUFNONEFKM3ZGd2NwVjlD?= =?utf-8?B?dktiM1g5U3lnVTcwek9RU0oyRkV2b0dOTTBYekRUcDlLWXQwQ3NqWnQ0QTMz?= =?utf-8?B?REpEOUVPdGhseitpU3BBcHhCSTIwRUFWbGhhVTJqNnFkbU1qVEZBYkZMc0Ex?= =?utf-8?B?VXduN01wVlo1a1BiZVVQTzZUdkc3L3ZwczhGd1cvZFV0anZFNTBTRUhTMlhB?= =?utf-8?B?TjFOWnZqbTREYmhzbUhScHZKZC9JS3A2MjRrbjg5TVZrVHJkd3ZjbXg4NUl6?= =?utf-8?B?U1VXVmFUcXk2SXJIR2RRNDFnRFk5RHI3M0NqYStlZWNLMmVjUjUvcGRBOXFq?= =?utf-8?B?OGg4ZVhnSkdncUdQZHdhem5RT0lmekpOdlJRT0c1K2ljVVFKSkIxLzhCRk1j?= =?utf-8?B?LzBMT2U1cVpkckx3TFduS0ZBeFlzRVg2TlUzeE1EbjZPVUhZWDFQNTllcG1D?= =?utf-8?B?Zmo0cUpaM0RFZ053Mm1CTkNFb2Y5NHBmQWxEVmhOMThFQXd3Sjc3OVZRRTEr?= =?utf-8?B?aGVXb0MxL2tscHlDYUYvUnJCcG56cjdMYzg0TksreUNRWlZtN0Z0dkRLdlVQ?= =?utf-8?B?QnpaVnp1VDVEVEJQd0lxdG1abVBjOHlQdUZZSVJqelFiUjZhZzkzNXFQWFla?= =?utf-8?B?Vm1qZUdPd29sVmNVYUNpR0kvYnZYQjdPSkRaWUcvZGUvakxTb2JVZXhVYWxm?= =?utf-8?B?SDI2bzdVQkdLdW8wWVRQejcvcEdiSFh3alNwVWp1WVgvSGZrSllFNUZreTc4?= =?utf-8?B?T1BMckpwVXRFSHJHdnNINFNQT2xVMU8wY1dKYWswYW1vODIyQk9UaG4yR2pO?= =?utf-8?B?bVJWenRrM1YxWk14VTFxNklUdUh1VlZGTTY4bVlvM1FORGhFTmk2Mm11am5D?= =?utf-8?B?WmthWGhmcFNuUWQ3dlZPcXl2bE1kUk8yN0tJVWtubEVLcHRQaTNYTmdLYlo3?= =?utf-8?B?aWR0WksxZzV3eUZXaStKMTAySDhZUnZia1QzVEt6ek5acWs2Yk8ra2xMWlFC?= =?utf-8?B?MXluQ0JUMVFDMHlyb2E2ZVpPekp1RHFMVDBtenhEZ0t3NFdLbzRTWlpQVWFR?= =?utf-8?B?RXI5dklWWTF3MVBzZEpvVmtOWVdGVkFLcitqLzZha0h2ZDNxbm5mcFhZOFpu?= =?utf-8?B?ZnNOQ2laRXdOeGdVaWJIY3FkdHJ1UHBBazNDQVNpOThJL3lvTzRZc2t2UDh5?= =?utf-8?B?Z2Zmam9NMHV2UHVxVWdEcGM0NkJ4Q01ydWhNOGZqS2dnSFlMME9aYklveUJ6?= =?utf-8?B?YzV1K3NvRlZaQnFkWDRGaEMvWnJNVTFXSHhvN29kMXNvL1ZPWG90c29oYUJH?= =?utf-8?B?d2xEV2sva1JpV1FUaGUybXF1bG0rWkFDOFprY2orRjVuTXJZZEpTZkxxZnVp?= =?utf-8?B?dXFYTlpSVUl2dDgyVkRVSFlJcUhGZjdHOUtqWmRyZEFEMlp0ZHpXdHk0SDhX?= =?utf-8?B?dExKUkxlcFJSSXF0SUE2U1hGNkJpZFIxeXdqVHBDeFBhcW5PcGxQS3ZjZWNn?= =?utf-8?B?d0dZdUdUSGJvdERYR2ZaRFFDMTFSSkxaY01vaWhYUGxQbDFyUUdqUGh1aytL?= =?utf-8?B?eUJmSnUxQlJFMVBDTWdwMTcxOWlMY29jSUV4Nm1sdTZpN09qQXQ4YVpaYkZw?= =?utf-8?B?eHBabVRWUkdzeExjNWdmQWNPOU9GOHhTL054WWF3SmVIYzROY1ErK2pOOTAx?= =?utf-8?B?bHo3NHd6NXl0M2NLZHJrcFlLRWxNc3VpRHFKVGMzNzh4a1dGOE5BaFFFbzJM?= =?utf-8?B?RXpuMGNjdEFmcFFrZGY1SG56ZWQvRmpNTzN2aDNybVBWdVBkcnJ1UnV3N01z?= =?utf-8?Q?EREnEWZ0ZlWNoXxzaG211cCvkhaLOWPdu/kRq+IPDIODa?= X-MS-Exchange-AntiSpam-MessageData-1: OjyJ5I4p36r5hA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 63f1e119-df11-4ca6-b15c-08de6545115e X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 06:00:45.3321 (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: gRUapbQfXI6KzSFrZG9V+jrW6NCVjYbpvE4bv+SoqIIrAk9iBDRGFb37ORu9FI3dkkGCvRhpLTp/WC6LdO9JeA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9683 The relaxed access functionality is now provided by the `RelaxedMmio` wrapper type, and we don't have any user of the legacy methods left. Remove them. Reviewed-by: Daniel Almeida Acked-by: Alice Ryhl Signed-off-by: Alexandre Courbot Reviewed-by: Gary Guo --- rust/kernel/io.rs | 40 ---------------------------------------- 1 file changed, 40 deletions(-) diff --git a/rust/kernel/io.rs b/rust/kernel/io.rs index d5d6e9501453..06856d6a9b46 100644 --- a/rust/kernel/io.rs +++ b/rust/kernel/io.rs @@ -654,46 +654,6 @@ pub unsafe fn from_raw(raw: &MmioRaw) -> &Self { // SAFETY: `Mmio` is a transparent wrapper around `MmioRaw`. unsafe { &*core::ptr::from_ref(raw).cast() } } - - define_read!(infallible, pub read8_relaxed, call_mmio_read(readb_relax= ed) -> u8); - define_read!(infallible, pub read16_relaxed, call_mmio_read(readw_rela= xed) -> u16); - define_read!(infallible, pub read32_relaxed, call_mmio_read(readl_rela= xed) -> u32); - define_read!( - infallible, - #[cfg(CONFIG_64BIT)] - pub read64_relaxed, - call_mmio_read(readq_relaxed) -> u64 - ); - - define_read!(fallible, pub try_read8_relaxed, call_mmio_read(readb_rel= axed) -> u8); - define_read!(fallible, pub try_read16_relaxed, call_mmio_read(readw_re= laxed) -> u16); - define_read!(fallible, pub try_read32_relaxed, call_mmio_read(readl_re= laxed) -> u32); - define_read!( - fallible, - #[cfg(CONFIG_64BIT)] - pub try_read64_relaxed, - call_mmio_read(readq_relaxed) -> u64 - ); - - define_write!(infallible, pub write8_relaxed, call_mmio_write(writeb_r= elaxed) <- u8); - define_write!(infallible, pub write16_relaxed, call_mmio_write(writew_= relaxed) <- u16); - define_write!(infallible, pub write32_relaxed, call_mmio_write(writel_= relaxed) <- u32); - define_write!( - infallible, - #[cfg(CONFIG_64BIT)] - pub write64_relaxed, - call_mmio_write(writeq_relaxed) <- u64 - ); - - define_write!(fallible, pub try_write8_relaxed, call_mmio_write(writeb= _relaxed) <- u8); - define_write!(fallible, pub try_write16_relaxed, call_mmio_write(write= w_relaxed) <- u16); - define_write!(fallible, pub try_write32_relaxed, call_mmio_write(write= l_relaxed) <- u32); - define_write!( - fallible, - #[cfg(CONFIG_64BIT)] - pub try_write64_relaxed, - call_mmio_write(writeq_relaxed) <- u64 - ); } =20 /// [`Mmio`] wrapper using relaxed accessors. --=20 2.53.0 From nobody Sat Feb 7 15:21:40 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010064.outbound.protection.outlook.com [52.101.56.64]) (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 C547A2FB09A; Fri, 6 Feb 2026 06:00:53 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.64 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770357654; cv=fail; b=cguudcfJNTpnMq8NgFXWlUwQ2224HO9M/+A3eyWE+hKCVQBoWyD+ZN9NsKV0aI2FSnMzxtDjtbi+oCzBHjKXBMDDTbhKdMppHjP0uAeV/nQ2RK0wibzS6NaBZsI62IWrCRrjk/TdeFJTz6tk+4Z2mS//2rw8A0N/V2yyAWewApA= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770357654; c=relaxed/simple; bh=R+5l7bpHYh9jHoKFRUVXjwwR8pQkL2OXYMfu146wPsU=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=hjOiAHMFqJ2Y6sq2nXGRmkEZ+H8FPS1Lct4bW9ierv/QNXvduzGgCYsO+06ptA/1mo6KaWuyTkxsE5G8u5zSJkwVSiDUjsPHG7qmjos1iz4RoshKbGTMs/rtfpadSwmaZ2xgt8uDxk5er1Acmx7zWq4uLWj6Y7dAXFlz8Igrpkc= 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=LL5kA4Al; arc=fail smtp.client-ip=52.101.56.64 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="LL5kA4Al" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=QUvzB6CyR+HJ0JkmJpYk05zqO+Ix0BHwYXmo+AyLA1YqtjrfCvrl67FcxsD1YuFm29NDduxgG/k1b6Q2C46izvpJcxW89I2lIKaIV9frw6IVqZU8tiZtx3NZN9c2ZM/4bnEWB9Y818Wi5KAl9VcCSNYy4vwqfjkdNEDYH3Vxq5VeB+uiDUqqSVhqxcX8uTCCBBSXI5DCjXdLN3KgcBYPVPrxT4HyLRbx+ShFAhfPwStwdMKeNbgZchNCmwhPAaBM6gkv3jn9HcxCsobjvrRxG97XQQhSRlikx5xwkl2D6/6oWeYHAQo+kV5NaCneBrZ/4+f7fXUPAmXppK3haK0dIQ== 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=2pfpkPcRSLa/ShPSWfQA7B6ZOYH1bsb+WzPjcKNYscA=; b=T/Ft4gtbInrE7VK4ldJOl7gtTlHFzl5c0+z5tAi/7JkbMNioIjb/htLot0njfw8iJktkcPLNh9qaS/A9tFMug//KMNVgEgfJ4VP7gJONYbNj6XUgiec/LutP2R2/ahD34wXCap0+cL+BWa9DvxcTga29+M61GyEDOgEnNioruPTv5306Y9OY+b19kyefNR1z9N3agEMdZbZ2Y+tEkR6YTJlnrnERyFiGaBHlesx17mmet4++bfzV6fHEgFsE0wGlTJq61FJHOrh3JCGzJ5ErtFipOjSu8u//5H0vYWO2+LlcNCFlDB5Y4aO4w5J+GWYn4c9s9HaSEPoSCUo4HVnWGA== 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=2pfpkPcRSLa/ShPSWfQA7B6ZOYH1bsb+WzPjcKNYscA=; b=LL5kA4AlxAmHAzhoquE6Oo9Pb+Fl4r5FLTQOL6bs08E8yEgRdT0wprFlWphXa0L5jZURb2cz/o7dSV5mZxwAFwrTPUHl4wMZJoQ7tJBwsNL+3l9M+F5eB3t86UQPXnDWp4tckDwxhRN40/Kws+kymGBembie0/OKiF4CTwaXsyhhWhqvilEudHxMoeAKlCkOl05IhA1M7iHwYO65U+mexwukPG1jUO7+/BHxjUhfri58YQ4eMSf6sNvu0bo2a071xV75cpJHDvB5tMBVUQ/ECW4Vasd2w6d4E24d+Pm52B82efCgoCy6aUmea+7NyCMG5lS6mZ0y7Im/r6SMCrqTKg== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by DS4PR12MB9683.namprd12.prod.outlook.com (2603:10b6:8:280::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb 2026 06:00:49 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%3]) with mapi id 15.20.9587.010; Fri, 6 Feb 2026 06:00:49 +0000 From: Alexandre Courbot Date: Fri, 06 Feb 2026 15:00:19 +0900 Subject: [PATCH v2 5/6] rust: pci: io: remove overloaded Io methods of ConfigSpace Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260206-io-v2-5-71dea20a06e6@nvidia.com> References: <20260206-io-v2-0-71dea20a06e6@nvidia.com> In-Reply-To: <20260206-io-v2-0-71dea20a06e6@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Daniel Almeida , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Bjorn Helgaas , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= Cc: driver-core@lists.linux.dev, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, Zhi Wang , Lyude Paul , Eliot Courtney , Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: OSTPR01CA0039.jpnprd01.prod.outlook.com (2603:1096:604:21b::14) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|DS4PR12MB9683:EE_ X-MS-Office365-Filtering-Correlation-Id: c5c26a1e-6348-4ef5-d8b2-08de654513ce X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|1800799024|366016|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Yzdnc29hS2xiV0tSSWdJb3A1ZWlnUXRZOHZ0bFVDK3Z4dnZwV2dLVXFZaE1l?= =?utf-8?B?UG5pS3M2ZUd2VlF2WGIzNnV3K0labDVlSWRmSFY2U3h3WjRGSHlVYVFVeGpV?= =?utf-8?B?Q1hHQkJoWFdDdnBuOUJ4SS9PZ2lXNE9CREVSN1dRdFVXejJLYk85c1Zpa2pn?= =?utf-8?B?bXNKdUtMaTl2V2ZUbUhWVGhkQVBiOVh4VWgrTkc4T3JKMmpaL1RNdWRvdkF0?= =?utf-8?B?UzFyVi80N3VacE1palJNR1ArV2VnSFhvU0puUS8xcGRmYVNQY3A0QmdyN0NT?= =?utf-8?B?MlFxTVdxUGZnTHBISWJsazdTZ1ZNU0ZXbjZPVTFlOE50RUpFaEVtbndMWm94?= =?utf-8?B?bzZ4UElZaUVQZGNsN2dIUWIyMHF3TVpKSVI4cEplTklDQjVMZ2xoWHAzOUJw?= =?utf-8?B?bWNmeXFOK2VIbTB6c2U5OXlMQlM0djB0a1VSY3RPYkk5WHkzcS9HdFAyTUZx?= =?utf-8?B?M1lDRVNJbWw1dG80QXVFNVJ1b3I3bjNwZ0tLTWtwOTV6dkR1OWdpS1lTckpk?= =?utf-8?B?aTFURzZsd2tpSzZmbE1DdUQzR1IzdmZ4ZGlXOHdndy9OR1pxaGwvNG9xZWZs?= =?utf-8?B?OW5zOStRUk5nQjE1Y3J4VXAyaSszZ2FscitwY3VZeVVyVkRkTGF6NXdPNDMr?= =?utf-8?B?NmpVT2ErSmZTd0ZLelVRS2s1cCtuNDc1SzJCa24yVStkS3czbllxSEoyZkJ4?= =?utf-8?B?Zms1RXA0Z3drV3o3STNmdTM4YTdYYmNadTFpSURaeTg5VGV4Q2VIeFhabFdR?= =?utf-8?B?S2h6Vmg3NVo0R3dXV1B1LzdlOHJ0ODlJYTc2T21PZFVmbHV5dDhMVHN1d2Zo?= =?utf-8?B?Vi9SZmFWaVpMZ25ZSUNNYmEvRnlSVzU3WGJKK0xtN1kxdXBJcXhoQUVKdDhG?= =?utf-8?B?aHNIZzVxY3VveXlOQ0JyTTlhMjcwR01kVUZpVXljdmhkbGIyanBVc0dsOEFP?= =?utf-8?B?cm9abG51cDRzWVhEY000U0w5VGZHVjhZcUhoSStieW9zQ1JYKzNva0oyQnAv?= =?utf-8?B?UU9WSWNFY3JIL2ZXNEhVTE1VSHVRZ0o4WFExZkpOUDVzVG5ZZGUwdnFMaEdV?= =?utf-8?B?UWhlbDJJZlovZjZVQURTaTVJYmRZeEFQN0VHd1JobjBmQWIyNUhFQ0NJNmNn?= =?utf-8?B?Y3J3VlIrMVBxcFZPVXV2ODQ0bFZTeGE1cVREbHVUaS9WVU5uT01pdDlHa2w4?= =?utf-8?B?bUltOWQ1UUFpVEVxMTRkM0xkbmVaeU1VMDdWdVBCV09ITjFhYzhWWTd3cnc5?= =?utf-8?B?Q003cnBHUlVqbzVIeGsrdkwxRThjL09kcDJCbzNZdmJFdmZ4Q0QzRXlqaFdW?= =?utf-8?B?Qjhmelc4SHFMLzltUi9jMmovNDFRZms5YTlCUEpBdi9SVWRMZGV0cUxiUDlz?= =?utf-8?B?b3M5ZWJaV29hVnA0eHdpZkhhRGtzS2tRUnM5V1VHVFJxVU0wZ0pVbTh1U2F3?= =?utf-8?B?RVg3VGpnV1hnR1JrUHJyRFJWOGJSM2VpQWV6ak5ydkJ3ZmEvS1l2N1lGNi9V?= =?utf-8?B?elYyWm5vMlJDL3NKUWNFY2xaRHhyc2xWaGErT1NmR0ZyQlB4djA0M3g4UlJv?= =?utf-8?B?VC84VlliM3RQREVHemxCYWR0cURWK2tBUElSNjlWYVdhRkY4dFYvaHhVaTlQ?= =?utf-8?B?eTFVYTVZUzZBeWRZRHhEeS85V1ZJaWVqdEt6azRYY0RuVlZlVzhpNEtqZi9N?= =?utf-8?B?bkI2b0paRHpmYW1oUWtPaVowVVZnYXBQS3RqOHFKNnA3ZHM4S0xORWRwTEdI?= =?utf-8?B?Uyt0NlFpYVdFaVJidE95NVFHNVZ4QjBJWHpmeEc5UXpTbDNJdFdvQ0ZKd29X?= =?utf-8?B?TFlBMGtrLzJNTzRydGhOeFA4blVoYXo3a1BnTS95Ung4ZkFVTER3d2U0UHpS?= =?utf-8?B?WDBjb0k0U2hVVjd0NDRhbk1NTXlGWi9UNDMvRDREaXNDRWhOZ3djL3NKYzk0?= =?utf-8?B?dUdjNWZ6QjlhR1J6WmUvYnh6TnJpamcwQnZsRWdxQ3VQa0pSNWVKenY0ZmE3?= =?utf-8?B?ZUVaNDdWWDl2cWFET0ExOHEzZTBGWU82WnMxbGJFSDVSVDBVVXRyVHA1bXRo?= =?utf-8?B?V0RXT0NwQ1hPMHRjOWw1WWE0V3MrNnNFR1d6ZUZGR3J4Tnh1c0VLUm16TExv?= =?utf-8?B?MUprQ1NTSyt6WFJjMlh3UEhBaUpQaDBLRytieTNOZE1YTDg4TnE5N1hTRFdk?= =?utf-8?B?ZlE9PQ==?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(1800799024)(366016)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?T1prM2J5NEJGMTg2NVI0MldDTHdJREE4Q1NTRmtFZ0RnTmhVbXUrK3VxQjVF?= =?utf-8?B?aTVMZzFHZFp4QktQUjdzKzJNOXhNRTNQSm5tckNFdzhMYWVXL2tUNENNZk5B?= =?utf-8?B?cS9ROStyWFVNUnpmWm9nRDloajc1UXdIczlmaytBaGhkdXVCQVNLMk1GZ1gr?= =?utf-8?B?OUN4T1pCQ0lNMmpMZkdLN1ZCd2pWakFNVzhHNGhuZFFwYlNKa01UaE44UE5X?= =?utf-8?B?Rkp6cnU4dXJyT21odEVQRGMwOU52RUVTQjhWR203Z1lrQnlXZWx2L21Pb1lo?= =?utf-8?B?MUlGRHlvL3NTRzY4Q3lvRFN5VU12TE5KcVVNWDJLdy9TTFgxbXVwTjlOcG9P?= =?utf-8?B?QnY5K3pnQkdSOWdWREZGaEd2ZnZ1M3lOVU5kQnFYaFo1SWhiYjA0aUFIdm84?= =?utf-8?B?dEJHMktrVUhQOTMyRWRqcjRqd2tCSDRWR05qVzZFZFlhTEVTYm0wV3ZWUU1l?= =?utf-8?B?MGZRVzVxdHJoNmh0ZnQrejQzbjAvL1JXNFhQSkhMemFiVHAraENxWGtYN1gr?= =?utf-8?B?UGRIb2RuTDNRQWhxTm84QmJFa0FWWHVtY2lnYWE3TDNvQml5RXNNdERjUldI?= =?utf-8?B?Y053RXQ3QTFsUkFWcXVlSTJRRUVaMUtsNzQ0SHBZZFFtREkyblZOdi9HSjY4?= =?utf-8?B?VXkxbU91dWtXL2xBWkdWRGQvWTV4SlVaS0praDFOamtLZ3EvaHFlVXV5TzRv?= =?utf-8?B?SjNHUkM1a245U3c3SVFpbnNoWWFxekFxZkxYS0NPaEpTU3hldFdrNnhxREpC?= =?utf-8?B?RWdSRHl4VCtTKzBtOURSUEVYZDFBMDkrVDdlcmZqOHBkQkM0UVBpUUcvdUZC?= =?utf-8?B?dXJnNlNuL0V4aGxTcURpWlVnaCtGOExoM2xsZmVMN00rM2VmelRzUkpoaktq?= =?utf-8?B?MU1JRklxMUxxWTN1NXpGR2JwVWIxa25HZEdFcmwwTjlkN29VYnFmUm9HbnRh?= =?utf-8?B?TkVGTXRlbUlzVlBkZ3VDK1VTczdSQllUS1JPbDZHc0VEaGxZQUR2REIrUmxW?= =?utf-8?B?UVk5cHA5Y0Z4d0dLSk5RSDNZb2RnRGxaMFVLem1nOWVOZi9jK0oxaUwwWFpx?= =?utf-8?B?dG15a0g2d1pmd0RkMjczdE1wOStEdU5wV1R6d2ltWGk5SEZCVVBKQmFvaVdw?= =?utf-8?B?MXRJWVl5STMwNEdHeTU5VkhodGt5ZGlDTEdZWXdETWNtc1hEYTRac0x1RVAr?= =?utf-8?B?bmxTOEd5dWFLbGRXcUhMTDA2ZktxcS9uQTEweHViM0F2SzFTZ1QvMkNPc1la?= =?utf-8?B?bFhBdmJVamVQRXNUVXY3NlZHaVZOM2RVNmlQSGNKb2V1QTJGNjFDWERhZW50?= =?utf-8?B?UEQ0WDV0bHlKcWxJNDhMZFdXRWd1Qnl1ZC9QVjJpVjNodVE5dUxJZXlIaGg1?= =?utf-8?B?dnp3anUwTEJqTC96cUJXUVRvdHJJbUZySUUrb00xSzUyODR2Q2dDaVE2NVBz?= =?utf-8?B?VWZWeVVncFhiOG1wTGFaaml1QXZSeHlFTnRTdU05WjU5Sy9pQXBtVHRxb0c0?= =?utf-8?B?M2poRERVZWJNZkVFSGEzSURTemhLb2txR3lOaFR0VlU0ekcrWForUTlvVVAy?= =?utf-8?B?NFZuR2lxQm8zRjRzSHViZjIyRXVUQ0hWYmF1Q2tQUU80OGdSV1JEY3NlT3NY?= =?utf-8?B?M3owZlliSVNMZm5QWE40ZnJCUDJJOXJGVG40UGc1bWs4WFcrSFhmWTlVbzVB?= =?utf-8?B?Z2FsRDAwOEhFblBWcXZ2c2NEeW5GcklNT3JPSzEzNDRDVy90OG05UlBVQ00x?= =?utf-8?B?bzlKT21BUUI0MllJem9QNWtUanhXb3BpaC9pR1p4K3RHYU5qaCtPNXJuMkZj?= =?utf-8?B?K3lzd2xmZ2lDYzZiMThLTTFib3pHcVZzeHIvbjBiTDBKVitXR1UyMkVhMkto?= =?utf-8?B?bVZHUkRTdERUcXF0YlRvUmxGWWx2ZFplaHhLOWMwRWdJMTJDSWs3RFYrVTJU?= =?utf-8?B?MUdTTDh6aldVRHNzVisvdEd0MWRnR1JGaTJueXBSbmRIU1Y5UG9IbUg0bVFI?= =?utf-8?B?ZUwwd3FBSmxQeXpYWlVxeG83WmhmenhRVkx0NkZYZXdQRXZKS2JKUVlOSnM1?= =?utf-8?B?SnRZdEpWc1l6czJTNEJhUHNhNXpERU5JRG4wVVF0ZmxCRWwwaHJjWDg2cGhR?= =?utf-8?B?U25MYitNQkJuV1RHbFp4emYyV25Qak4vNHJXYTNyYWpwbFFDTnBXMUFRQ3pF?= =?utf-8?B?NENqYVlOWnFaNmVQaWZ1RGY2VjVtYWZGVHgvMUlocEYwb1NUbUZwMmFwdUZH?= =?utf-8?B?eWJpUWY1NnBHMFpaK3JWSGloakdzdnF1MHJUcyt2ekNSTnNudEdrRWowN3B5?= =?utf-8?B?UVVpUTFRdllLL2FneTdXems0Qjg1WXI0b0IxLzlKdjA1OGM1NG9sQ2NnVHEy?= =?utf-8?Q?KRsvjq505fgKBvJWkh812zZ3Zl63G+KnZVrC+rkHqaBgf?= X-MS-Exchange-AntiSpam-MessageData-1: yPi55ywhFehOQQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: c5c26a1e-6348-4ef5-d8b2-08de654513ce X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 06:00:49.3742 (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: UJ7SmDfV/TrApvadLNEEa5O+4HLAY1TUQnAs6W+OqHIrsa54Nt6nAEyBtreWWRNL8Pmy/d6BGqlMdo7lTW6eAg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9683 Since `ConfigSpace` now has the relevant implementations of `IoCapable`, the default methods of `Io` can be used in place of the overloaded ones. Remove them as well as the macros generating them. Reviewed-by: Daniel Almeida Acked-by: Alice Ryhl Signed-off-by: Alexandre Courbot Reviewed-by: Gary Guo --- rust/kernel/io.rs | 3 --- rust/kernel/pci/io.rs | 70 -----------------------------------------------= ---- 2 files changed, 73 deletions(-) diff --git a/rust/kernel/io.rs b/rust/kernel/io.rs index 06856d6a9b46..9874edda2b28 100644 --- a/rust/kernel/io.rs +++ b/rust/kernel/io.rs @@ -226,8 +226,6 @@ macro_rules! define_read { } }; } -pub(crate) use define_read; - macro_rules! define_write { (infallible, $(#[$attr:meta])* $vis:vis $name:ident, $call_macro:ident= ($c_fn:ident) <- $type_name:ty) =3D> { @@ -259,7 +257,6 @@ macro_rules! define_write { } }; } -pub(crate) use define_write; =20 /// Checks whether an access of type `U` at the given `offset` /// is valid within this region. diff --git a/rust/kernel/pci/io.rs b/rust/kernel/pci/io.rs index 8c8aab2e3f22..ae78676c927f 100644 --- a/rust/kernel/pci/io.rs +++ b/rust/kernel/pci/io.rs @@ -8,8 +8,6 @@ device, devres::Devres, io::{ - define_read, - define_write, Io, IoCapable, IoKnownSize, @@ -85,63 +83,6 @@ pub struct ConfigSpace<'a, S: ConfigSpaceKind =3D Extend= ed> { _marker: PhantomData, } =20 -/// Internal helper macros used to invoke C PCI configuration space read f= unctions. -/// -/// This macro is intended to be used by higher-level PCI configuration sp= ace access macros -/// (define_read) and provides a unified expansion for infallible vs. fall= ible read semantics. It -/// emits a direct call into the corresponding C helper and performs the r= equired cast to the Rust -/// return type. -/// -/// # Parameters -/// -/// * `$c_fn` =E2=80=93 The C function performing the PCI configuration sp= ace write. -/// * `$self` =E2=80=93 The I/O backend object. -/// * `$ty` =E2=80=93 The type of the value to read. -/// * `$addr` =E2=80=93 The PCI configuration space offset to read. -/// -/// This macro does not perform any validation; all invariants must be uph= eld by the higher-level -/// abstraction invoking it. -macro_rules! call_config_read { - (infallible, $c_fn:ident, $self:ident, $ty:ty, $addr:expr) =3D> {{ - let mut val: $ty =3D 0; - // SAFETY: By the type invariant `$self.pdev` is a valid address. - // CAST: The offset is cast to `i32` because the C functions expec= t a 32-bit signed offset - // parameter. PCI configuration space size is at most 4096 bytes, = so the value always fits - // within `i32` without truncation or sign change. - // Return value from C function is ignored in infallible accessors. - let _ret =3D unsafe { bindings::$c_fn($self.pdev.as_raw(), $addr a= s i32, &mut val) }; - val - }}; -} - -/// Internal helper macros used to invoke C PCI configuration space write = functions. -/// -/// This macro is intended to be used by higher-level PCI configuration sp= ace access macros -/// (define_write) and provides a unified expansion for infallible vs. fal= lible read semantics. It -/// emits a direct call into the corresponding C helper and performs the r= equired cast to the Rust -/// return type. -/// -/// # Parameters -/// -/// * `$c_fn` =E2=80=93 The C function performing the PCI configuration sp= ace write. -/// * `$self` =E2=80=93 The I/O backend object. -/// * `$ty` =E2=80=93 The type of the written value. -/// * `$addr` =E2=80=93 The configuration space offset to write. -/// * `$value` =E2=80=93 The value to write. -/// -/// This macro does not perform any validation; all invariants must be uph= eld by the higher-level -/// abstraction invoking it. -macro_rules! call_config_write { - (infallible, $c_fn:ident, $self:ident, $ty:ty, $addr:expr, $value:expr= ) =3D> { - // SAFETY: By the type invariant `$self.pdev` is a valid address. - // CAST: The offset is cast to `i32` because the C functions expec= t a 32-bit signed offset - // parameter. PCI configuration space size is at most 4096 bytes, = so the value always fits - // within `i32` without truncation or sign change. - // Return value from C function is ignored in infallible accessors. - let _ret =3D unsafe { bindings::$c_fn($self.pdev.as_raw(), $addr a= s i32, $value) }; - }; -} - /// Implements [`IoCapable`] on [`ConfigSpace`] for `$ty` using `$read_fn`= and `$write_fn`. macro_rules! impl_config_space_io_capable { ($ty:ty, $read_fn:ident, $write_fn:ident) =3D> { @@ -190,17 +131,6 @@ fn addr(&self) -> usize { fn maxsize(&self) -> usize { self.pdev.cfg_size().into_raw() } - - // PCI configuration space does not support fallible operations. - // The default implementations from the Io trait are not used. - - define_read!(infallible, read8, call_config_read(pci_read_config_byte)= -> u8); - define_read!(infallible, read16, call_config_read(pci_read_config_word= ) -> u16); - define_read!(infallible, read32, call_config_read(pci_read_config_dwor= d) -> u32); - - define_write!(infallible, write8, call_config_write(pci_write_config_b= yte) <- u8); - define_write!(infallible, write16, call_config_write(pci_write_config_= word) <- u16); - define_write!(infallible, write32, call_config_write(pci_write_config_= dword) <- u32); } =20 impl<'a, S: ConfigSpaceKind> IoKnownSize for ConfigSpace<'a, S> { --=20 2.53.0 From nobody Sat Feb 7 15:21:40 2026 Received: from BN1PR04CU002.outbound.protection.outlook.com (mail-eastus2azon11010060.outbound.protection.outlook.com [52.101.56.60]) (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 671412F6184; Fri, 6 Feb 2026 06:00:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.56.60 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770357658; cv=fail; b=i37hTHib7Wt9fTy2C/DoT+Bm0CWVA/McNA2cUo9PO9euRL0yAJ3VsWufoKl1NQeG3IjoVtaM+dwjB1ogm4fm5OLxh1EP45jIl+FpBFjqnh2WPljBUFsevaRwCwpOGoOPpw2A2WsehXM0scljWbwpylBtosRUa1aajW8mTgKPCNE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770357658; c=relaxed/simple; bh=GOhMCqv6pZMw2xd9IWFTixkzPobfDL9UWYR+HJfn1zo=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=LHZ+G1kFPD6Q3tDmiP2Avdovd9YItaRNw+6iD4j11NDR+7Q6CEJMqpk239vrTuMmPrLLcqfrNI9InKbPSDxy/TuECplafIbhW4scqZ5zMfSwSWy/QEd5FamikUOPOr/zPxCBv6plhsKY8/g5f9wKVDyGYhKXpLlZ+LjL0GJ7B/E= 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=N1SExH2/; arc=fail smtp.client-ip=52.101.56.60 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="N1SExH2/" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=bOzAXxr2ugTbxQ4LfoYTYHm4zq1BqhW2x9jCUXCN1joiAsif1ZQI5CRJ7dZ/4HCZ2AsmwMJwem1e0QfeZ0b3ncTW+NoUWpY6MNm0IvsDmFD6148uxf6ZZ32OOVV08u3wf5+KnHk+9HKkSLWZdFu20yY6iKGNpX/phavRwenbGzjgzqyCMYQn+ckFZXm4TmFi03ROhBfZUMaEORt8Im94dcQKXWL1t34wVgp92xKFxvZ9mOCMnBHBTg5O4rOvogCfmjvQugAnCec128JMPYDQQr+2mcNDiDZPD6drpHxNUmRh+BkBr3SmVg+XP2dgJvCgg/RZbVXN5jsRkJL8YZZeiw== 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=H1k18Gv23zOPQfWKDDS1QXoEFklcveXLLqmjdV7k7OM=; b=VcAPZqrcCV+7fSz7HTihxT2vvYoCSWTOFFMaWpzU8Ms79bmQUwtK2Oc82kjBRierrc4f0ucJVVNRg1Wlf9jPmnSSSrwU98qMlW5YPu8q2qvI4mvFXa5Vtie6+H+Z6zhefS6Z0KPN6zGIHlJcTlbj3lPe9Ho6aOQZ4dxzCcwrhMV1lbqFKWyPm3fPv9e2SwdoP6rGa4sE9BcN0Uu14BNZF+suboSrY3q8TYZRgkwoLZUZo08jAGNhefXIyNZxan/aFRKVUlhWt/usLJuUJdDBnH6na4qbqW2PFqnRhQWXra0S7js1DtrAfZt9YhlJkul1aLQi/j/svWnxhrHj1evtpQ== 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=H1k18Gv23zOPQfWKDDS1QXoEFklcveXLLqmjdV7k7OM=; b=N1SExH2/WYsX9vHzZUWH4sAnZgnyVJ5jl8K/L5Atxb7nA164PivACBmV45ULMHE6MAjbcNh8apmkk22ICp1GUbvdlqkMh3yMOumBrJTJZ5k7f4UMIjFJnLqk20NritVOY/mhmi57QpmIh1bZhQGg10RVIzcUyQgMhg8/guDG3ZTLzEmUA66K35OzRL9vCJL7mVxPHknl3fckQA8MdA3TXPGBDylARD6hRcmQDR9Hn0kAw7AH7LWYm9pk5HLko2Stuz6AzPVWr+Iy6RZhnIDNuho7VlFIJaGiLuG84VTk2SrXLIVOG5v+mm7BIY229lt5ccrBN1xyyA5I8nY7HZLn+g== Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nvidia.com; Received: from CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) by DS4PR12MB9683.namprd12.prod.outlook.com (2603:10b6:8:280::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9587.15; Fri, 6 Feb 2026 06:00:53 +0000 Received: from CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989]) by CH2PR12MB3990.namprd12.prod.outlook.com ([fe80::7de1:4fe5:8ead:5989%3]) with mapi id 15.20.9587.010; Fri, 6 Feb 2026 06:00:53 +0000 From: Alexandre Courbot Date: Fri, 06 Feb 2026 15:00:20 +0900 Subject: [PATCH v2 6/6] rust: io: remove overloaded Io methods of Mmio Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260206-io-v2-6-71dea20a06e6@nvidia.com> References: <20260206-io-v2-0-71dea20a06e6@nvidia.com> In-Reply-To: <20260206-io-v2-0-71dea20a06e6@nvidia.com> To: Danilo Krummrich , Alice Ryhl , Daniel Almeida , Miguel Ojeda , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Trevor Gross , Bjorn Helgaas , =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= Cc: driver-core@lists.linux.dev, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, Zhi Wang , Lyude Paul , Eliot Courtney , Alexandre Courbot X-Mailer: b4 0.14.3 X-ClientProxiedBy: OS0P286CA0030.JPNP286.PROD.OUTLOOK.COM (2603:1096:604:9d::17) To CH2PR12MB3990.namprd12.prod.outlook.com (2603:10b6:610:28::18) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: CH2PR12MB3990:EE_|DS4PR12MB9683:EE_ X-MS-Office365-Filtering-Correlation-Id: 3ec5bf18-3d5c-42f3-9689-08de65451656 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|1800799024|366016|376014|7416014|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?YTFjNmkyWmt4QUNNUWl0Tm9GUU9tSjlTSUtHZU5pMVVndStBVXhLMEE4RnN5?= =?utf-8?B?cFZGNnBkZS92SWU1MWlKTmlYU084NXNCL0hIcTc5QitpeWFkSE9wa0dTOSsz?= =?utf-8?B?SGJXNXQvWkpHWGR3RzZPaGZ0Y0xiWkFXRExxOUdlck83aDVLNmNBRkVuTWZC?= =?utf-8?B?NktiNmZVWkhLOW1reXBkRm0wUHV4SUhscmhQc0p3ZWVEVFBLVVBIWXdSNWcr?= =?utf-8?B?M0k0VHMvVVkyMEs5U1Q5RGRHdGczY0k2cWpKTXp4ZVFubjlJRHM2T3JMeGEz?= =?utf-8?B?aWRONitKS3dQejZkQzNIMjFOUHJkRkpGdEFkNkdYc2NWRVRTOGNncHNiOWxS?= =?utf-8?B?NUFrUThWZHcxZzQweEJzajNkZHYzQmxUdyt1MXlBUkFNODFkMDFXc1NnRHA0?= =?utf-8?B?MkdwbFRoc0h3NzJSaGZKQk8yTTFZdWVDTE5VeUgwamR6d0JZV0RxMGt5c05k?= =?utf-8?B?VUNXYUZQOTNncHlKYjJtT2hiZFBrWTFzWTVPVWRDT0NlSStKcWJEbDRuNXVT?= =?utf-8?B?MGZENnVoUUtUN1FvRWt5NWxqcFdDaFN5eWNzK3ducGE5L0xSRmFDUUZucy9N?= =?utf-8?B?WUMvOUxFVXFrVjA1TERJdmJDeWIxWTQrRk5LdWw1Nm1FdkdPZmFDWjNodE9K?= =?utf-8?B?emdkZUpXRW5zbkh4QUdGdTBoa0lNZzI2VUF3NkNyNlU4cm1RamlKazZJODVE?= =?utf-8?B?KzIwQ2s4RHpoN2tmOVJVUWMxVWhLR2RpYTIwOTFSWklvYThzN2krUEpHajFT?= =?utf-8?B?ZjZrV2I0VUlDcmhITXZieVVHK2N6M0dZZjBzL0FBYm1rL3F2K0VQdWNqNmk3?= =?utf-8?B?cTVnZE1penZ0ZWRaUHNuZnZpTEczd3ZLZ1pDbkRjKzFFL1JiVVZ1ZVNpS08y?= =?utf-8?B?NmdhQ2V5OUFDdVFQNUI3ZGwxaXlRQkVhYk9WbFJMNkdTNGlDMW5tQUphZzhT?= =?utf-8?B?Zzg4bkhhTDN5eWxPM01lRGJ6ajVsc2dVdHNGcVl2QU16aDhVMlc4UC9xYW9U?= =?utf-8?B?NUszOWFzcXlkajhmWW9pOUdTSlVFOTQwa2xwcUtjUEhpTHdGY0Fpa01vM3hr?= =?utf-8?B?Z1lxWk5UVzI1emswQW1YTG5jWWFXK3cycndxM01BZHFwL2NoSjU3RWFLK2Zr?= =?utf-8?B?M1Z5Y0JJcVY2YVZ6NmxXNnFnTzdiTStVWXVDbFpTdjVmdzF0QXdLdmtqei8x?= =?utf-8?B?SjZVUDJvTkRxZ2lPTkFGbTQ4Y3FlVXh4aTZMN1M3T2hlVmRjdDRHWThoQTBk?= =?utf-8?B?azJPakx2eXBQSnNiODRCb1kzdWMvTjNNbEZmREhaQnZnZjFXVDY2V1RJZkpx?= =?utf-8?B?bUl1UTZEaXJwU3E0djVhbC9SOEE5MW5tdEU5MWpyUWhOL1NIM3dMb0hjSmdk?= =?utf-8?B?U3pPbk5sVlhxazM3d1NyUGF1QjlleWhHam43c0NQaDlMQ09VanhGYVh2STdP?= =?utf-8?B?bkJZZ3JNQlJWUXp3RVdIdEpLM3FHcmJFbkxyUnhzMHVvNVpEeUpXVkNyRzY5?= =?utf-8?B?QkIreVhzUjBKNUJyNm9QK1dteGNWRUtCYkZiZFJVdzNQYVlzcGlYaEdoQnRQ?= =?utf-8?B?QkRhV2Y3Sll4dVBYUWRXV0hrdU5xemhHNXc3QVM0L0JMaXo3QjJmbWRWRjNx?= =?utf-8?B?b214YVM0NThxVEMxRlZzRkQrU0t3c3pmRGhic3dPMDNhSFAyWkczYzNTdVo3?= =?utf-8?B?aDdac0tlTzZ1L1QvNUhmYUlqeVFBUnVZZnVpSjljcnRTZElqUHp5aHhjMHFZ?= =?utf-8?B?RFVjODdRMzJCeGxTNE4zRVNocGNLc21oTnRQdEhUUEdvc0dQcE1LTG42Y3Q2?= =?utf-8?B?UFFORGJwd3FZbUxQcndYdSs2aThyM3dSMTE4bGtzU3VMNXRPc1F6UFVUSCs2?= =?utf-8?B?U3Rma2oweSs4UmZST3hQTU1Rdm12d28wTldONjhabW12N3JiOCtNd1pKeUdv?= =?utf-8?B?c3JuRUxhTTNMRERXZUd0emJ3enZ5T2F5MVAzSHdPU0tnUFRxMDZIeTJlWVMy?= =?utf-8?B?Z0lNS0hIaHlET29qMUkxc3o2cEZ1VG94L04rVUlNbVd3NXZ4Z21jU0d2N2FK?= =?utf-8?B?UGFDVktxc2RhenRSTU9SYjN5REJ3eHhldHFXZklCbXB6eUtaMW9Td2l3MDlr?= =?utf-8?B?eGdjT21TMFJDSVJuN0ZWZVdiSTlLV1hmTlNmd1VjUnF2eGVjVG4wV0JGTEJE?= =?utf-8?B?MlE9PQ==?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:CH2PR12MB3990.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(1800799024)(366016)(376014)(7416014)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?SFdQTldNa2hZc2JIeFcvVGg3RDF1aEp3eE96ZGZYWjdCVVJpRE9tdHAwVWl0?= =?utf-8?B?a3Vxbngwc3NIZXFLR2grYWs4OTBsQk9BUVY3Mk5xYnJmYkc5ZHhsT1dNZmxm?= =?utf-8?B?RFpFbmFQZ28vdmlhOENVS0JRQi9tYmRGMFdBSThUb2cyczVNeFN4NW5UNW9l?= =?utf-8?B?YkIyYll4cVMwVEhIcUxuR1N6ak1iRlRxZ2huZUhQZ0xUWXgvc3Y1TncrNGs0?= =?utf-8?B?V0pxR1FRdFF2Q2J4ZjlVRGNnRDVzNVZsbHMwdzFkRy9qWmJFQm1lV0J1em1V?= =?utf-8?B?L1BaOFpuU3VKQnoxdWladGlVNEdUQ2VrY1VrdmtFVldKdS9EenhWaGZxLzZz?= =?utf-8?B?aW1iVFpyWFVwWWpjL2Z4cjRFa3MxVGdJR1pQUmkzdndMOUplRTh1OU5NQ1Nw?= =?utf-8?B?S0RWM1ZEZ0hXQWJtNitXQ0VoeFkxa0RzNTRnY3RoU2lZTS9WcU1MTUFVVXY5?= =?utf-8?B?ZkNJbjFhMTdFckU1RVFHdENidGJLbzlwMnd0dThpdisvd1FkQUVhTDVTRWk3?= =?utf-8?B?WVNVUSsxaENmNHQvakFxS0xaUHBoN0xzbVQ1Y3B0NW9VaTFuY0tMcXpiZUtu?= =?utf-8?B?elVGM3FGMHBxZUhyYkpCWWZYQ29UTUJOODA0akl0ajFHWjVQUFNaaVJHRjJ6?= =?utf-8?B?b3dGQXdqQTJCTEF1NWlrRHY0d1dQNDB3Um5ZZmI5RERlYjRGSjQvUHdaNXlq?= =?utf-8?B?VC80RDkrRXlhcWZBTjFyTHhIOTdMUkVGNFpiRjZ5WHl6bDFENUtOVEhuQ251?= =?utf-8?B?bGt4ZS9vUWtHSzBsSmJQdFEyUHdDamQ1SUdTQTA5dkpIM1RjMkNLN1krQ000?= =?utf-8?B?YThBczNJaGFTTFdTTFZES01rTndnZGQ1U3g5Q1RBb3FIL1UyeWNBV1BqdEpN?= =?utf-8?B?ZVFFVElIbEl6RHFSczVDMTRkUWJ1ei9IeVREdU5pNWRNSVhMcmdkQ05GVWdm?= =?utf-8?B?TEJhWmUydktuOVdwcVlxUldpVFFWd1FsU0RXcW1CRWo2aFNhQ0RzUVRZRVBx?= =?utf-8?B?UFZIaEN4RmhDc0lYRXZJUTExNW9XTXBzTmYvZ1BQS2kwYUJwZ3NiZjI3YTAv?= =?utf-8?B?ZGo2VzZYNHBjYVgrZnVJcE1DUzJub2ZyVTkvODVDZVFFUTNocW83TzV5MHJt?= =?utf-8?B?d2JMZTFBUGVBTjZDd0I5ZlhjNlhJS1BTOWFoRE5LTkc5Z3BFTjZSejdESkJR?= =?utf-8?B?V0FIOGNoTFFjSTVIY0hpN2pQRUd4QkJ5TXlqVmdKZXlmVk90NGJSNDNlczlw?= =?utf-8?B?WENkRGt4YzZUaW9SU0FlU1R6b2hHTzl0L3p2TGJTZDNJWFU3QUw1M254Nm0w?= =?utf-8?B?U1pKYyt1K25oM0RRek9YUmRmeEw4RUZ1dVYxTEFYM0M4QzVEYzBGYjdvOEJz?= =?utf-8?B?ODlFcFdjbDJrb2dDNUV4cU5HZUtuRlhxSlR6VVNkc3h0V2xwRUQwZEt3b0lO?= =?utf-8?B?dU5NV3VoZ0dPdVRWVEQyWUs2S3RBWGpEYWg5bWNaU1Blc1Z4T0M2Zkl5UlFa?= =?utf-8?B?Ukd2emlQVXdQak5HR2kvSXh6VWVDNFZJTjJjMmcxbkF6dlZjNEhXQU9KNEl3?= =?utf-8?B?Zm9ia3RSTjYrV2xvd2lEMjBINFY5OTZLbnBiNUFvZG94S3U4MEFXUVQ0bmJz?= =?utf-8?B?OE85c3ZCbWQyRGZFc2Rta3EyeTMwa2Jsajl4b1lPV3NxNE5scFVJcHI5ZTFz?= =?utf-8?B?NEhKVCtMN1VEcS9mM3lBRWhKSlU2RGZqVmtNVWxXOUxEc0lCSTNnbUdhbFFn?= =?utf-8?B?RTN0YmxrUjdNVVhTUVBUQnRiVUtJd0lwZlpXbXBwZk90dkNwZk8yaHNmdzhk?= =?utf-8?B?VDdqSStwNXcveHViU0haaE0rV3dFamhyUVN1cUhJa1RCVkhVb01mQUkxY0hI?= =?utf-8?B?SlgzVVpIZGU0VFRCQzhrc0c3cGVRM0hHRE1MdENBWkhNQUlKSnAwOEowaXNz?= =?utf-8?B?YSs3c2xaSDBMSUdmeDZ3VHBjdTlIQTNIZWZUUWJBczNoY2JLSEs2cTRjMXA0?= =?utf-8?B?dmNEdC9DQ3VWYjJDY0FNZFZvMmRrbGJkUXJuU1o2UElrdWlJd3czeVN2V2Fa?= =?utf-8?B?VmR5dGJvSW1ZZG11TWN4WitTUWhoYkMwQS82VmQyMVRTYmtIakFVVnVTdEtP?= =?utf-8?B?UmZnNzhnL2Q1YnM1cmdGVFlNNTEzektWekZIbVdLRkh1OVAzUTNrZUtMS0dp?= =?utf-8?B?TWxYZ3VjZXNVczVmajVuMWg3eU1sWVpvR1JDb0s5YnM3WEM0OTduNnFTVEJp?= =?utf-8?B?TUpNaVRjdnVWRVh1L2E0OElZM1BNQnJkOGdIWUQ5cExiTXBhT1JKQTdCcGRT?= =?utf-8?B?dERtcDdIWFhQMEdlRmhIbnFia29BQXBKOENJUDBMWXd1S21tRDZEQTFpU2Mr?= =?utf-8?Q?qiHUSOO5sOYDRyBIqavqnsyOHOUq19BUAMQOn9ODFE6KK?= X-MS-Exchange-AntiSpam-MessageData-1: a4J+K3uathEmKA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3ec5bf18-3d5c-42f3-9689-08de65451656 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Feb 2026 06:00:53.6489 (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: N6KPPJSegJbBkew7YXr3B6HPVAfy/uS4mgDvXsiqHrV+YuVFWrpS3rdKFvH5C+d2y7MlFhAVMAgFmkoNup9mgQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS4PR12MB9683 Since `Mmio` now has the relevant implementations of `IoCapable`, the default methods of `Io` can be used in place of the overloaded ones. Remove them as well as the macros generating them. Reviewed-by: Daniel Almeida Acked-by: Alice Ryhl Signed-off-by: Alexandre Courbot Reviewed-by: Gary Guo --- rust/kernel/io.rs | 161 --------------------------------------------------= ---- 1 file changed, 161 deletions(-) diff --git a/rust/kernel/io.rs b/rust/kernel/io.rs index 9874edda2b28..b150743ffa4f 100644 --- a/rust/kernel/io.rs +++ b/rust/kernel/io.rs @@ -137,127 +137,6 @@ pub fn maxsize(&self) -> usize { #[repr(transparent)] pub struct Mmio(MmioRaw); =20 -/// Internal helper macros used to invoke C MMIO read functions. -/// -/// This macro is intended to be used by higher-level MMIO access macros (= define_read) and provides -/// a unified expansion for infallible vs. fallible read semantics. It emi= ts a direct call into the -/// corresponding C helper and performs the required cast to the Rust retu= rn type. -/// -/// # Parameters -/// -/// * `$c_fn` =E2=80=93 The C function performing the MMIO read. -/// * `$self` =E2=80=93 The I/O backend object. -/// * `$ty` =E2=80=93 The type of the value to be read. -/// * `$addr` =E2=80=93 The MMIO address to read. -/// -/// This macro does not perform any validation; all invariants must be uph= eld by the higher-level -/// abstraction invoking it. -macro_rules! call_mmio_read { - (infallible, $c_fn:ident, $self:ident, $type:ty, $addr:expr) =3D> { - // SAFETY: By the type invariant `addr` is a valid address for MMI= O operations. - unsafe { bindings::$c_fn($addr as *const c_void) as $type } - }; - - (fallible, $c_fn:ident, $self:ident, $type:ty, $addr:expr) =3D> {{ - // SAFETY: By the type invariant `addr` is a valid address for MMI= O operations. - Ok(unsafe { bindings::$c_fn($addr as *const c_void) as $type }) - }}; -} - -/// Internal helper macros used to invoke C MMIO write functions. -/// -/// This macro is intended to be used by higher-level MMIO access macros (= define_write) and provides -/// a unified expansion for infallible vs. fallible write semantics. It em= its a direct call into the -/// corresponding C helper and performs the required cast to the Rust retu= rn type. -/// -/// # Parameters -/// -/// * `$c_fn` =E2=80=93 The C function performing the MMIO write. -/// * `$self` =E2=80=93 The I/O backend object. -/// * `$ty` =E2=80=93 The type of the written value. -/// * `$addr` =E2=80=93 The MMIO address to write. -/// * `$value` =E2=80=93 The value to write. -/// -/// This macro does not perform any validation; all invariants must be uph= eld by the higher-level -/// abstraction invoking it. -macro_rules! call_mmio_write { - (infallible, $c_fn:ident, $self:ident, $ty:ty, $addr:expr, $value:expr= ) =3D> { - // SAFETY: By the type invariant `addr` is a valid address for MMI= O operations. - unsafe { bindings::$c_fn($value, $addr as *mut c_void) } - }; - - (fallible, $c_fn:ident, $self:ident, $ty:ty, $addr:expr, $value:expr) = =3D> {{ - // SAFETY: By the type invariant `addr` is a valid address for MMI= O operations. - unsafe { bindings::$c_fn($value, $addr as *mut c_void) }; - Ok(()) - }}; -} - -macro_rules! define_read { - (infallible, $(#[$attr:meta])* $vis:vis $name:ident, $call_macro:ident= ($c_fn:ident) -> - $type_name:ty) =3D> { - /// Read IO data from a given offset known at compile time. - /// - /// Bound checks are performed on compile time, hence if the offse= t is not known at compile - /// time, the build will fail. - $(#[$attr])* - // Always inline to optimize out error path of `io_addr_assert`. - #[inline(always)] - $vis fn $name(&self, offset: usize) -> $type_name { - let addr =3D self.io_addr_assert::<$type_name>(offset); - - // SAFETY: By the type invariant `addr` is a valid address for= IO operations. - $call_macro!(infallible, $c_fn, self, $type_name, addr) - } - }; - - (fallible, $(#[$attr:meta])* $vis:vis $try_name:ident, $call_macro:ide= nt($c_fn:ident) -> - $type_name:ty) =3D> { - /// Read IO data from a given offset. - /// - /// Bound checks are performed on runtime, it fails if the offset = (plus the type size) is - /// out of bounds. - $(#[$attr])* - $vis fn $try_name(&self, offset: usize) -> Result<$type_name> { - let addr =3D self.io_addr::<$type_name>(offset)?; - - // SAFETY: By the type invariant `addr` is a valid address for= IO operations. - $call_macro!(fallible, $c_fn, self, $type_name, addr) - } - }; -} -macro_rules! define_write { - (infallible, $(#[$attr:meta])* $vis:vis $name:ident, $call_macro:ident= ($c_fn:ident) <- - $type_name:ty) =3D> { - /// Write IO data from a given offset known at compile time. - /// - /// Bound checks are performed on compile time, hence if the offse= t is not known at compile - /// time, the build will fail. - $(#[$attr])* - // Always inline to optimize out error path of `io_addr_assert`. - #[inline(always)] - $vis fn $name(&self, value: $type_name, offset: usize) { - let addr =3D self.io_addr_assert::<$type_name>(offset); - - $call_macro!(infallible, $c_fn, self, $type_name, addr, value); - } - }; - - (fallible, $(#[$attr:meta])* $vis:vis $try_name:ident, $call_macro:ide= nt($c_fn:ident) <- - $type_name:ty) =3D> { - /// Write IO data from a given offset. - /// - /// Bound checks are performed on runtime, it fails if the offset = (plus the type size) is - /// out of bounds. - $(#[$attr])* - $vis fn $try_name(&self, value: $type_name, offset: usize) -> Resu= lt { - let addr =3D self.io_addr::<$type_name>(offset)?; - - $call_macro!(fallible, $c_fn, self, $type_name, addr, value) - } - }; -} - /// Checks whether an access of type `U` at the given `offset` /// is valid within this region. #[inline] @@ -594,46 +473,6 @@ fn addr(&self) -> usize { fn maxsize(&self) -> usize { self.0.maxsize() } - - define_read!(fallible, try_read8, call_mmio_read(readb) -> u8); - define_read!(fallible, try_read16, call_mmio_read(readw) -> u16); - define_read!(fallible, try_read32, call_mmio_read(readl) -> u32); - define_read!( - fallible, - #[cfg(CONFIG_64BIT)] - try_read64, - call_mmio_read(readq) -> u64 - ); - - define_write!(fallible, try_write8, call_mmio_write(writeb) <- u8); - define_write!(fallible, try_write16, call_mmio_write(writew) <- u16); - define_write!(fallible, try_write32, call_mmio_write(writel) <- u32); - define_write!( - fallible, - #[cfg(CONFIG_64BIT)] - try_write64, - call_mmio_write(writeq) <- u64 - ); - - define_read!(infallible, read8, call_mmio_read(readb) -> u8); - define_read!(infallible, read16, call_mmio_read(readw) -> u16); - define_read!(infallible, read32, call_mmio_read(readl) -> u32); - define_read!( - infallible, - #[cfg(CONFIG_64BIT)] - read64, - call_mmio_read(readq) -> u64 - ); - - define_write!(infallible, write8, call_mmio_write(writeb) <- u8); - define_write!(infallible, write16, call_mmio_write(writew) <- u16); - define_write!(infallible, write32, call_mmio_write(writel) <- u32); - define_write!( - infallible, - #[cfg(CONFIG_64BIT)] - write64, - call_mmio_write(writeq) <- u64 - ); } =20 impl IoKnownSize for Mmio { --=20 2.53.0