From nobody Sat Feb 7 15:22:30 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012024.outbound.protection.outlook.com [52.101.53.24]) (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 E067D326941; Mon, 2 Feb 2026 08:13:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.24 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770020019; cv=fail; b=ZPLox6s08JsG7iqtFfLj15ttnnu4vPAerZ9nL0khJ0xBZ5lnO31E/tTFYKasrnxHtorIGvpEDz8TXb8E2QO2mj9xzAxaejSMvlmbrPgr74sid5GSt78B4gej2H+MK5flzgsGmgaktD7QZygBieKzgOMlQ4FlSvO4JVOBPUatNf0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770020019; c=relaxed/simple; bh=V2iqBH8TeSQLs3aW5CNBX9JjX8/JC3EFjpPntS3mrAs=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=spQRLK9AawLKSkNpcwBf+wtpV+7Z7TCa8SPOx/Y9nvXSoVkGWaiWcpK5PwIMj5idomIgn7xiVvMfSGeazp94BP52WHFnjPKnpUTxZ77wd4XNdyH3vR2V27JlygA6p6s0v3Ki6MFTEeNdS9Vk3twA7cxwAAUNyO38cZE8szcoxMw= 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=EvPPojBy; arc=fail smtp.client-ip=52.101.53.24 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="EvPPojBy" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=xHeZWippQyYgLx7o7425Tj9ePkA3LPG2Zi75UY7xTc5CrWZajU5tqr70bcrczCbLwnyHZkhrkdd5KE9PoH7bmfrBqwj4FwPwtzHGKyGtpGbKroIE3vihKdE/GJPPasL8Lu6OTiyTJZlbJsJ3m/P3uPi5oS8qbNhEcHLR1YjXRRmZFnqwhl4shcmBK1HSsWco9r9GENFvy9g8IywrFA6xR2EyNXXep2/SVmfi95etmzvY1ZLhJ/gR/zfphvFY3ybINoIIYs1UuVzqOEEeA48J/aNgaY2CYdhnffWrph/C12b10uDuapofa1n/s/GzztGamV1hSU6nCqi1yx1FUTxhLg== 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=KCuLjav3FCiH4jtqG9kkEDAVMMqw32ABXXw/p7YIcyU=; b=CAmvwhfO07YtfhvXw8TrgAbzAmeDTI9Y9dGdd6wl4NqP5S1JAXSlPFLJ966FGw3oMERaZ5DNHWSHI2fRTdUgOezjz/6ViYTJt7L6vV8Kd7j+dO3tsnQXIKU01pzZBDqWunR89tnAkQr89XdG1cm98SAEJjQN/f13/+sbdiiZPsYADslT3JEBf0eS0MDnr6Gn9BfTOUP7gc/ZJ6PFhyTbYcfZs5ApPuZeaOIqwlc33AIcm5IQ755yGpxsWT9CddQMy7QbNUQkClfVpViOe/pFFdhQ9itL4Wdf2ix/qO/hLWNvt5c52w4RyaO+7MFhE84VZ3VY1N/hxldi0y2XmHtIHA== 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=KCuLjav3FCiH4jtqG9kkEDAVMMqw32ABXXw/p7YIcyU=; b=EvPPojByqZJiAPOpmSElUktVUt7yofu2g5h0E8X3gRqUTs3+UneAJTYE0AD/fw6DX7XbADRpjBt6iC/vTqXCOVRtNYCsP5IGnHtml/Ngl/gX8iw0knrH60mLqVIh5FC8R/QkDWAUcjJQ7ehJBq5Ov2Pm682wvNsf7RK65DbqhN5eZIVJbQDSfXUnV5uMw7WaUE8GtEx5iNf1SJ9BMs+u/rfEFCXBRf58ZwTtmUO4SHp0ZWtylx1yOTQn3JSFKiKHOlaKLk25Q0u67uvz6aO4pFvraVCY265mXR0x5Etx2f9LK3NoyKMONoOXVZ+2O2FY4Q8VPcf0cuz1Rs1ptPe7AA== 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 DS0PR12MB6416.namprd12.prod.outlook.com (2603:10b6:8:cb::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 08:13:19 +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.9564.016; Mon, 2 Feb 2026 08:13:19 +0000 From: Alexandre Courbot Date: Mon, 02 Feb 2026 17:13:00 +0900 Subject: [PATCH 1/6] rust: io: turn IoCapable into a functional trait Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260202-io-v1-1-9bb2177d23be@nvidia.com> References: <20260202-io-v1-0-9bb2177d23be@nvidia.com> In-Reply-To: <20260202-io-v1-0-9bb2177d23be@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: TY4P286CA0029.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:2b2::6) 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_|DS0PR12MB6416:EE_ X-MS-Office365-Filtering-Correlation-Id: a3f053bd-6808-4701-822d-08de6232ecc0 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|1800799024|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?ZkNHajQ1azFMdmhJenJtTE9pejY2T0x6UFZwbTI2aThzRlJPekxicjZxaHFt?= =?utf-8?B?dHFTRjRDaE1ubnA2Z0EwZmp2TU1VazcrVWc3N2pBWUIveTJybUJXdXhUb050?= =?utf-8?B?QXZVUWh5UnRLcXZ0Zm1ZWHg0UWRTVXRkeS9HbVpVaVNvQTJCclZ4ZVpta2k0?= =?utf-8?B?SDZwS2JDeHAzc01YMWNYM2ljTzFRSlV4WTZUQmVqT2RBM1ZMbzNWN2JMRnM2?= =?utf-8?B?cjhTZFd2amJrRmtRVEZXVFZDVk9vY3JKU21ZSEsrYzdqQVpJNWJmSUFJeTkr?= =?utf-8?B?eGcvNkR4Qm1uaDQ3eExpNGdxK0lSOEg4ZE9PQW9WNnA2SGNPMVEzbnd6M2pY?= =?utf-8?B?cjd1dWZGR3VhaTVmb3R2cG5aRUtDekhaUEM5dXNuR2lKbmZXOVUzNWZqUnBy?= =?utf-8?B?OWxDdGw2Uk43ODhsVWVRMHlycUMwTmNpWklsM2JURjZVeTNzSVFSRUdMbFEv?= =?utf-8?B?OHZQS3BDWTF4TFJ6Sm94OHdHUCtiZDA4KytoMk8yYWFQdHE5UXB0OFZIWWNE?= =?utf-8?B?d2VsYVkvOFdrZlJSWWgvS1R6R2owbHEzUEhJa1hDekszeFNLaTlIQVRLaG1n?= =?utf-8?B?MENVMGZjNS9xMHlXOGl5RXZLUzJoVkZUK3FCak1lWldJSFFVL0IrcFIrOTZq?= =?utf-8?B?amdWWHFkbVZUOEZ6RndzL1h6YXl0M0NDVDhBRE83S284eHAvcnhlQzU2ZlJo?= =?utf-8?B?U3NIY2JFRWFIWml6MHYvbzlvTVFqTUZxMHJyYTM2TFpOdU42bXpnYjFNdE52?= =?utf-8?B?bTEyYzdWczdnSTBIdHcyaDA2LzFMNlkza1hwZjYyUk5FYzZHeVN0cklLajN4?= =?utf-8?B?aXVWOXROUkJLcEdyWnNnNlpiY09LeW9pdno0TUNsREdJQXhOWFVlUDU1MkM3?= =?utf-8?B?WC8rVTNLamdLam5KRVVzQnFERkM1MWI5M0JtaTY1bDFmc09jSlpmWUVDZkhY?= =?utf-8?B?N09aK2tCZ2xlOU1nNHZTaEhia3ljTkl1WFN4U0p6V0VOdU14K21yMFUydkV1?= =?utf-8?B?bU02ZElNUUJhNnpyY0tEZC9oSThUUG5MMkRIMDM4U1dONHZqZnpwNzd5ZllI?= =?utf-8?B?WVVjQzFFZ0JtLzdmdFZDby9ZK2NwQjloOVRiSmlHN1FoUmY5aDhYNGpMQnJS?= =?utf-8?B?azIxVThPSFIvVnZnMnBWM05XNGVqN2FPQ1YwTXp3anZyQ2wvajJzUmVSL0lI?= =?utf-8?B?WE9kcHJycys1Q3V4SDhBeGdVcHMrWGtwcFZMbTV6Tk1KckUzd3kzK2p0a2hY?= =?utf-8?B?UEw3TGNBeXJDbnFlSDlhZmNoR0RnZUxkN3UyZ3VEWkVIU1NEb2IyYkFKTUh6?= =?utf-8?B?d3p4RzNTdHVlazQ4Wm1jOVllY3R1eDFXdElYNmZNQTJFTUFBbk5rZkZMUFhn?= =?utf-8?B?eXNGcHVvaXBPUXk3ODJNbWZ5N084TUhmaTZ3U2M0K0F1SDlLVDFyUllVbTRq?= =?utf-8?B?ZlFkNnRxMkhCTldhYlVBU05OTUJ3VVBxZThNeXFFNDljeWpUNXZHcGptc2E3?= =?utf-8?B?UTdSK0Z5cmxkR05lRUs0VXREUnB6TXhRRnkyUmxxUXd1RXZVYmI4YWlzTVl5?= =?utf-8?B?eE5tZm80OTEvOGNnVmdvd0ljOEFUR3EvU2RPRFlxQURmNGtwUW9wclQrYmFN?= =?utf-8?B?aUtLR21lQXlCaW9QanAzdmEvbzBjR3hkdC90NjZ4MzkvVzBuZW95MUFYSC92?= =?utf-8?B?Tmw4Q3BUUU40azROZ0d2eGJGTTF3QmVQZkNtOWZDRUxIdE9mT0hCVEZHQWd0?= =?utf-8?B?RERxWktvSTg0N3ZKZFhYRlRNNkk3NXdYaUZRb1BwZG9ZS0hYOHJNWlNzelRF?= =?utf-8?B?UE8vUnkzMVo1RkorZkdqWmg3TnpTeGVQbWZYZXducCtRMmpvclBkdnVEUU9s?= =?utf-8?B?djJEeUdTNmtnT3pmZXFxOVRPRWw4M3MweXhqVFFySlUrc2oyVE5CTmNpMUZS?= =?utf-8?B?ZzVMYnVDYUdNRnNibksvMnVnQjVmb1hISmVjaTFjUlRTaWgxOUxraHBVbkdZ?= =?utf-8?B?QzQ3bjZKczZiMHVuYkIwN1Jaa0tGQldXMWV0MnRHZmJIa1BBaHZvQ3NuZWt1?= =?utf-8?B?VjhmbkpQRS80dFRhTEREUElxR3NhbVdrT0hqNGJlVkVYdWZwdE9Ha1lvTFRW?= =?utf-8?B?MzhNSlhsTXNWdnNEUFJ5ME1uSHlNcmY0NUhCb2dZTDJOYXlXNEtyWDBtZ0hK?= =?utf-8?B?NFE9PQ==?= 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)(7416014)(376014)(1800799024)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?VWpOcGl3YU03SUNGUXQ2MjNrVXQ4QkowTlRnUGpDR09RTE1LK0VxRVBqR1BD?= =?utf-8?B?bXpFM0xxcUVtQkFiK1ZKVFpzOUtwNjIvK1o3RXNpMkdiVlBuc01wQ3R1d1pD?= =?utf-8?B?bm4wQ05NV2F4WWhnU090RE5pcHRLaWVZVHV4b2RXSWlmMGNrSFdNSzZMZ0xZ?= =?utf-8?B?dkk5bnk1RFF0QTVsb2Y4VlZ6Sm4rN0lrcExEUWUvN2lTUVBqRkMvaHRodlFR?= =?utf-8?B?T1ArUnkwZTJZaENIMzZkL20wRUJWK1g4MlJYRDMvTXdtRXEzSjFvRG1CMU5i?= =?utf-8?B?Vk9PZFpwUy92QUpJYU9qQXQ3cGdEbDUxa0YybU8yaE9hSXR1T295bHNxOHp6?= =?utf-8?B?M0thOXUrVjkwRGF6N3puZHJMNG91ZXVQdjJHL2ZDQVpZVVVPRFhEZWtyVFVS?= =?utf-8?B?ZWRGRk9nSnlMMWREcHN3MUdXTWpCT25pdjIxL29nMGNKa1FlWUxzSnRLMzlk?= =?utf-8?B?RkFGT1RzZXFBTDQ2dE1HUm5vVVRpNEo5ZndlTnkxMGJ3TVJWbERZNTB5R01o?= =?utf-8?B?NlV3QTBSbHZqZ0VQMVB2ZGRjTXQ5cEV5WGJzN3BGb3pTUm5MeDEwQktJQk9y?= =?utf-8?B?Y2p0MGRJblY1ekpic2FYNHE3Wmp0Ry9naFU5VktwV2paSjlPY2hyYTZENkkr?= =?utf-8?B?TjFIeHBmZXVCTU9tQVJzMzh3bHpaZEJIWGpydFAzdXhJMnFqeGFUOEpjYVg4?= =?utf-8?B?R0ZJcWJKb3R1RTR2KzFKaC9Xb2VkeWdRT1dkc0RrWjIyRVB3U2RZa3VDb0RX?= =?utf-8?B?c0NWSmc4RWMvMXM4eXFHekdlUkZUdlVwVUVVNFRhTlVqWmNyK0pxM2lpZExv?= =?utf-8?B?WHhVVWVNaVRKMUtORVVidElwcE1tQkNXTHRVa3RpN1BRQWloUlBRTVc4UEg5?= =?utf-8?B?cnFOSVFmaFQxVVRJTFVvRUc2cHJ0TE9acFNFQXUyRUN3S05kOWlOQmNtT2lT?= =?utf-8?B?WGJKWm04V2NUV2hqT3phcFYvMUVVaXlDL2psZTlzWW85V1pjUlBsaXV5L25s?= =?utf-8?B?VUJUQ1RxZEJzQmY5Yk1FaW5vUjNIcGd5M2FvcmpMbWlwa1FrK0ZLclBWZXRG?= =?utf-8?B?dk1HOHI2TmxVRFBzYWFsam5lbFVINFk3dDd4NmxhS1NnbjBpL2tZQlpwTlYz?= =?utf-8?B?YzFzbW1pZGRHdUdmbmpORFdQTnJZZVhvN2Q1UmpubkRIN2xSUHdNbklTQ0Iz?= =?utf-8?B?NmpkTlM3eHFmUWF6Vk14bDY2MXJFNDY2ci9CY0NIeW9TZ3E3bVZEaEcwU2pk?= =?utf-8?B?YkpUbFk3dWFRemJoZ3RjWmlwVkZ5MkpkYm1ybjI1dSthSngzSVZCU3hSUG91?= =?utf-8?B?aEhDVlFGWUMwMTJmbzc1Y09LL2JlY0dlajhyaXBWYWN2UE5ERklvY3pIOHFm?= =?utf-8?B?RTEzKzFmUWM4NXUvbm5OL2YrVHRYY0dRL2p3Y1BIdlJZVldXQ1J4cUI4UXlr?= =?utf-8?B?Nnp2S3FYNzRUanVjaDdmVElxeDFqb3owUEc3VDhsY3JxbVUxcWZDekhGbUFY?= =?utf-8?B?bzlqVjlSOFQ0cUs1MWw5ZWNva011cHRFQ01Dc3B5VkFoZE11ZjcyeVV6NGlx?= =?utf-8?B?U05rakFxTENKaGlqMTBNUGtLci9DcFFaN09qUGg2TWtKcjZWdDN6bElINHJV?= =?utf-8?B?RnpYMDRPbUFQUGV2Ym5UR0V4RzkvZGFSZGJpNDlQZ3h5UTduMnNoZFkzT1RO?= =?utf-8?B?MDRzNittV3AzM3NNc0UwY1AyMEQ5ZW5PRHA2Z0ZRS3AwVkdxMlFvNnhydG1z?= =?utf-8?B?Q3VESWY3WU1jTHRuVHVES3BQM2Rsa3laWmNqT29kNnQ0Q3V5Ykg3c0hhQ3pR?= =?utf-8?B?ejdyMlVodm9CYVVEdjhSVmNKL0hsWVJzVytSWmxSajJhQ1I1R2Z1UVhqRi9l?= =?utf-8?B?TWFEZW9ibG83d0JVWXEzY28wTytqUmVpODJkWHFQellNZTRjc1JZRTlTSmxz?= =?utf-8?B?SGdqRzlZSWRmWUtVem1hc0N6blRnNEk1Um04UGdLZ0crQWFVMGVhYU1GbXQz?= =?utf-8?B?M2xLSXFLaWNtNHYveFhTNEFldkNsQzJJRlhFNlN0Q25UTVpYSHdYY2lRNG9Q?= =?utf-8?B?cG1kR01ab0cwYk5qM01mdDNZUmc2VGxCcldINTV4Vmc0QnkzbkY4NURZbS9a?= =?utf-8?B?U3FkS0RFdFl0NVd2VUx2dHl5SnBha0dYSy8vRW1NTFRsdmdjWlNVYTVTaGZq?= =?utf-8?B?YTNZRzNLMGxNNkpEUk1HdFhvMVM4QkhEUzZnK1N3czFEejMwbzl5RVViajA3?= =?utf-8?B?SGZraU9XdS92ZVF6ZzBNK2tmZlF1bTgzNHlCRGpuUTBoWmFhUW5tMVZXUEl5?= =?utf-8?B?Q2dpODNmWVI1MVFRWldKLzFHWEVNWGMvNUhjRmdJbk5SdjhXZjBPR1FGSUoy?= =?utf-8?Q?xQVGymAwNwkpSiLKnwbXZojO8J8mnWcO/FQzomJNhLPmL?= X-MS-Exchange-AntiSpam-MessageData-1: g1Vye9TTmep39w== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: a3f053bd-6808-4701-822d-08de6232ecc0 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 08:13:19.5226 (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: i7xtIJW9expX2gOypihVx2Ztu1K8tHP24rKRLlHB5h5XMuOwXxpniB3fbBkzbyKoCRbmbEuCUbfuGAGfE102XQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB6416 `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. Signed-off-by: Alexandre Courbot Acked-by: Alice Ryhl Reviewed-by: Daniel Almeida --- 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.52.0 From nobody Sat Feb 7 15:22:30 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012024.outbound.protection.outlook.com [52.101.53.24]) (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 BB369326D51; Mon, 2 Feb 2026 08:13:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.24 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770020025; cv=fail; b=hfzLAw5zwInUMby5d0oCZod/zYsdf48aJj7JFOc6puSUHuIoiK/etraOp5S19volWa+mxX4CsIbvHCW7Km038cEyf6x7lz+vUKCHlVwGwLyv8MpvEosGQCXpzU+rTindiQAIeVigZWX5ophA/GetSSKRarl3RM35hobOkSHxIuM= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770020025; c=relaxed/simple; bh=zxAa+REJmcm0njEOcm4OYj/KH3PrzIZDivUY39mwd2k=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=n+BTrOfdaM8mvitv/9FHQmS4/7kdRIObW9hYh57+n45ICDIRjAgnqkpRfiskiOnHiTA9FkYZpMMdwMqtlLmQI2R9y3ZvcExUVXo8XyIDWPWMaO8f6T6IN/MOodEVyLkaP5yEpAAk/t+bdyfjtS8Bmoc+POdaSQiw6RN6ep65szY= 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=F5UBGe+2; arc=fail smtp.client-ip=52.101.53.24 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="F5UBGe+2" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=B+WDjGMiS3v3xtraOMRmbSd9N9YaYIcASYv+q1l/YG1lTb9FzaFFdzA2440oGS0xmv+07z4p+oh5KxXcB8vIhf7NmDTYiVa4gx4bA5iV9IjkQ+vCskTHVPaBjt6tTd2dnKdFY3+X1LRbknpaIreuSHs0yLdT42Qes7ACsDgzgAtUgQ9h+tVop2h23TsP9/F4MqPMQjWydwCS5nAe+wdVIkGwOWAi8qNarDr+iGQKfpXBX6TOKqRgSki7aREpewB2z+uyl0CknLez3c5OkOozDJB1t3icKOvWLakzR9q6E791ssCDTcBfIHVL0sEZayGNij7D4SMoFiDlL0AZ8IQfaQ== 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=iwFLPFCZ+Q/b+O4RAzsDjtOaScCudqTxeuot9NgiEaE=; b=PzumG7x5kSkmRzOhbFhyi/fexQvfBtm2TezNSrZfUtH9B40NxQhQlctor5SgH4sM6dH5Ple0mRvjHTRyuzWjGleWhQMqAN2VQZnf7sdKI9APFcp8pqNbfBYUl5aNvrzKxgJziIuWlaT1LCWOyZe8jFgHXqrcYjeTm32mehuHonjSADpFbwtOGmI54GXSzlaSY4jgtkCm3Sv9clWT/+7YZbMAkbN6KByWFg/tGJjO7Hi57VVwsHjQS8zjBdKfFWTJB2CLuCgAi1lZzdCJO9P930NSTfUY652BWj4smXJdj5cZS/Br3WbHszDbmTQvYPR6MilRI4hX6Y2tG+gsjk3OKw== 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=iwFLPFCZ+Q/b+O4RAzsDjtOaScCudqTxeuot9NgiEaE=; b=F5UBGe+2pMYsWjGxRJPWQYcjrCM5pKrtEEUIIn/A0cLIEUfw2IIP+PpmGruz94ZdUiN3oIlknqebDRFvT2NBumq0W+c5xSWPkPxc9uVErVedDQDwSkQoqFfjnWzHk1L+nqwswuMPBSG8bDE3KdcVVTTwU9ecAmJyoI51unQhmVba/1sxxM6UUfs9LeIh6kLETjAgngJjTcxnRaoiXLibTr7Gy302ldLWlmqRpJCiHd+A80ZWyv0M62lgqrCBnkC7I3xeSNJ9sGp23ANv2TxQM96NMf76BGNF0y3ZNp+i3gAWn1Cyjb4kOcEga1DWqoK0q595/Kk9LMNRPAC7HQuikg== 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 DS0PR12MB6416.namprd12.prod.outlook.com (2603:10b6:8:cb::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 08:13:23 +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.9564.016; Mon, 2 Feb 2026 08:13:23 +0000 From: Alexandre Courbot Date: Mon, 02 Feb 2026 17:13:01 +0900 Subject: [PATCH 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: <20260202-io-v1-2-9bb2177d23be@nvidia.com> References: <20260202-io-v1-0-9bb2177d23be@nvidia.com> In-Reply-To: <20260202-io-v1-0-9bb2177d23be@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: TYCP286CA0145.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:31b::9) 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_|DS0PR12MB6416:EE_ X-MS-Office365-Filtering-Correlation-Id: b039d591-70d5-4120-e8ef-08de6232ef38 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|1800799024|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?a1hXVGRYcnpBUlY5WFh0UmpuR0lPRExaUFBkSFVobFlNbUd5WE1LU1Arb1lJ?= =?utf-8?B?VnpRZVFibjF4TjhRUTBDWmVVMlpPcXIxWDJQMUhHNEhITTlzSEFWMkE1a2VQ?= =?utf-8?B?Q3I4UkxnWmtwZHZzdSt6SkpHSVFURGNjM25ML045TnhnUWFjN3RieXhBVkIz?= =?utf-8?B?MHlIZVE2Z09maFRRS3dYV0svc3Mwc1RPb3lwcWptS256RHZrQ2xzZVJDYVRj?= =?utf-8?B?Zkh6TW5GUVAyd3R5UkdheGM0dVJwY2FFVDZFRDg5WWNkUHByZkRJcGpZWXo4?= =?utf-8?B?ZEM5VVNEQ2VCNVhsQkdLaWNndEVoNmwrTDlpdEVvYkFlSmZJN0FPTlJiR3c4?= =?utf-8?B?dHhjcmptdGhWUlNUa1Rra1F4U0IxazhEd1ZiLzhmSk5ubGNDU21yY3ZhcTBO?= =?utf-8?B?U1NXNm9lK1VhRW1zNlZsb3FpWVgza294aExpaUpCVUtYajV3dm9NQVlXZ01w?= =?utf-8?B?WnpVdWM3cHBWTzFxR1FvSzFDVEw0c2hOWERJNEZMNEYrSVNoRmlqUWtpb1hL?= =?utf-8?B?MzRJUlIyaTQ0cUozOEZ5emVhRmdxVXdhS2N6T1hvT09icDdFWFQxTU5GVFhw?= =?utf-8?B?V2d0UzVodWNGR2l3NC9iNDJzQkd1dGhjVmJwdlYvdEVMTVBQdXkyTHR1NXov?= =?utf-8?B?dDhoMkNBS3VJeWI5cFBoN1F0ZWVDR2g0K2tXaHhQRHdVSEVRbmVQaXVZUkxi?= =?utf-8?B?aGx6aXNnRjBJZitZUmJZUHpWaWdSV2VUbUkvU3BKRU1Qc0x0ZFQzb3lmaWZl?= =?utf-8?B?dXdkOG11MTFWL0pHRkFvNUdTNGVya2RyYmV6SU5UVUxjbmQvL2Zrcytoc3By?= =?utf-8?B?SklOQklVS280SjN1aE1SWjhqYlhKeHF3QTRSci9MRkQ4cnpOenRsWFdWd2NM?= =?utf-8?B?ekJ5cFZsbUUrZVJNTlpoTGV6SGRTS3lJWVJnZGZFWVNBdGFEeG1HQjlQdEUx?= =?utf-8?B?MkJsdFdxUVRqTHhBU0V2WDhXa2FrTXBMVWpsTjdNdERmUGZrcG5iL1JGcEIz?= =?utf-8?B?a1JodTQvaGlISmphem1ucWRzMWdtRXBxNyt2VC81L2U4dzVNVk8rcTk3UHZ1?= =?utf-8?B?WEJYVmJoWndMcm9ZRVdBanBTcFdreUc2YURieTcxNlFkZG1iMk0vaTBPRTNX?= =?utf-8?B?ZVppT1M3S0dkMncwYllSejJLR1ZGKzgwTlhjc0JSczIzRi9BY2JyWklWMEkv?= =?utf-8?B?emZ3MXhwTmJkdUdsSkhCRnVDOVBWOUpBK3NRYS9PVEhnM1oyQWJQM25QbER5?= =?utf-8?B?aHR0QzNCNnFSOUtXWjNXSG9BTUtpS1U5S3ZKMXJPZkNicnlsWXhuM3g0ckNH?= =?utf-8?B?MXBYNVkwanJrYW1UUU9uNHJWRnYzaVc2WmVRa2VpeE1EZy85cW5PUVM0YkFM?= =?utf-8?B?UFJmTkVRVFdSYVRzNGQrK2VxWjJ3TjJieHZjZjg5dHJOanM3OFh5VlV4KzBN?= =?utf-8?B?aVZzUGlScEl5N0Q2ZFRONDd1QUtRVUt5aFVoNGx4eTlMZ2hBbU9FeXFaWnQy?= =?utf-8?B?Z3dnYXdPclMwNFlPWW1sTEIwVzZ5QkJsU2NPUXZkUW93am95UFIvSUZkVkRN?= =?utf-8?B?NzF2aU9YUElMNmg1V0hici85SmZLZE5vczVKTDRzZlVHWmF3V25PRWtYSU40?= =?utf-8?B?OWYvVGdWbmJuMkU2OUlNcXMxOURidmgwUXVMUnVqOUhpdjJrNXFSQlhNVHVO?= =?utf-8?B?UGhlb243ZWVqNW93U01qb0VjSjBqK0UyVFRmSEZGcjVTV3pMa2JudElTdGVo?= =?utf-8?B?b2VnWHlDM0hydEFycFZvd2dIb0N6VEdZKzhxNTN5Z2h5L2RqckFzT3J3aG1i?= =?utf-8?B?Ykl4VmNUSHZ0ejNrUXNSYXNHbnQyTUpiL0FKVUp3UW9vdU9tbDRER0lZVXhW?= =?utf-8?B?YmRrU2lMUmVyMk9UU3lUUkZ3c3RpWHBzOFlWOVczN25XWkhaMTZXazc4VHll?= =?utf-8?B?RG5xamFiRm5oS2VleEdnQTd1NHR5NzNhN251b2NEaFFsNjNGazlvcGEvbFFn?= =?utf-8?B?N2lMVWJkSWZmaVpRaFRYYVE2RzFaYWpkWU0zY3FDd05LdW5ySGxDS0tTaUE5?= =?utf-8?B?OUhOcGtyWlN3VFlPdHRHaDMzbzZxQ1FTTjBvQnM5bjl6cDc1aHFBZ3ZrZ0pO?= =?utf-8?B?c0JWc2pSMjBHQmVSM1FRSjNEOGpWTUkzekFVMWVtazlPSGpmQlNnWERkVXda?= =?utf-8?B?MEE9PQ==?= 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)(7416014)(376014)(1800799024)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Rnd2OE5la1JKNGtybnMxRkF5YituZ2lxSjB3eVU2VGdjRjZ3QlVITWlXbHBN?= =?utf-8?B?NDhmc0YyU01pMThVWDRMMkR6R0UwU2IxN1VGaTJnanpoMGdtdEVXL1JubURX?= =?utf-8?B?MXdZTjNURm1uOTZnbUwzc3k5N3hVdWN6dlVKYVFzZk8yNDhYdGdHTXJ2bU5Y?= =?utf-8?B?cW5nS3h0YkRlVU9kZ25MZCtNNnQwd0pxZzVubHRkV2J3SlRTYkgyT2lvMnlY?= =?utf-8?B?V0dubW5WOXdkazhqWVlqdmNEd1JwMm1VZHpJVWRPLzBFc0srVklPRUlPWWhp?= =?utf-8?B?Tlk0M2NPbEZMMmhQY2FRMGtxeXFNN1NuaUpkd0lXUkxVNHEyL0FyZG5leHVF?= =?utf-8?B?UTNSYXp0N0N1UVZuSmtwUURhc2pLelBPbHZmMWlxcGZSMkVocnU3cTM3UHVy?= =?utf-8?B?VjFQbGF0REVKV3M2djFGRUJZZUtqRCtYd0RqWXFKc00zSnZlNXVMQmVsa1FH?= =?utf-8?B?N1ptbTEwcm01a1dqK2p1OERHV2hhczhHbnA1aTVDVXJDbjdOUnU1bnhBQnUy?= =?utf-8?B?MDQ2MWZKZ1c5b0dDcW5QY0hxVXJWUjN3NDhRV2NJTGtFeE0zM2xmSkFRTUpm?= =?utf-8?B?Z1RmdmdZSGIrNHpmNkp4ejIrZ0JYVlB4RlRMSy9jOGhIc0FJd1pmZWpVVHgv?= =?utf-8?B?NUlaZDZwNGtYamM1VHFUU3JreXdITkVXRTY3ZzdVa0V6ZmdaQzNMVkhhc0tP?= =?utf-8?B?eGhSTlo1YStEdkdsa0Y5bGlTVFdwQ0I4OXZIMXl0V3FOelBKQ2hpaXJ4Y2tO?= =?utf-8?B?azhvWE9FTzlsaW9RRlpsNnU4dm1lbjcwNGxXYXU2YkpNYisrOHZYbWZXMURF?= =?utf-8?B?RWx4ekdUNnVUWW8xVjR2MHFTWndOc1lNYzI2MllmUGg4cjRma1ZPc21OY0Ur?= =?utf-8?B?ZTdpQW1IVWlIckUvQy85eXBpYjMyYUJhTm1mTWhqY2JRQzdGS1RaeWVEUk1P?= =?utf-8?B?MGpweE5XUlNuU21DU3JIcnVVM04vOW0yZ0RvUS9uY0RzS2txWmhGZnhsOXZx?= =?utf-8?B?SVlNSllLWDJiLzQ5K0FxcVNEZmV1ZjRGYnA2RzJHaFo2L1EvYXRkYlJMa1g0?= =?utf-8?B?cGIrRWMxdXRkVmw2YWxkdFVDaFpoRk8ycEdMdnAzdnJ5MktwRm5lYytzVTBS?= =?utf-8?B?aVVCTVlTRlp5Y2tuQnVPdTJhNS9jb1piZG14T1lJZkpvTi81ZzB6R0dZc08x?= =?utf-8?B?OEFxeTF4L3EyRkhoVG1seDMxeWZGK044ZlpSa1JvV2FZYXV0ZzdsVDFySjAx?= =?utf-8?B?Tk9EUlhVdHhpVy9Hbmx2UlFvc2tGWG5ISFNIVDJmYlA1NllHcFBnaUJlYS9W?= =?utf-8?B?bXlGcG0rWTVZYmZCNm1IeThPd0lLOFZGVDg5Y21lS2VDbm9XM2JIcnYzSHhL?= =?utf-8?B?ZDNucWNoU3RJd2RIdFQ0ajhwQytMRDU0VVkvckhiQUFPUW5FZHFvZnkrajFk?= =?utf-8?B?R0krVy93eXdSSVljOW1JME1pS0JueE9DNVhSL2J6TXczc2ozSUpuYXJPQmM0?= =?utf-8?B?WHBYNWpaWVJvdEhvaXV2M21pN0VmODliNHBLWVdpM0RIaXdPL1dpL05FamJ1?= =?utf-8?B?bGlYUW9qSlY3YlQ0VFh0V3ZiTTBuSENITTBzbitXZHRIakZObDVhWllRa3Iz?= =?utf-8?B?Skl6YnF5VUpYS0NGcjZ2NEtGa3dzemcxdHVaV2c5TzdzOXpvL2FEMjNOYklJ?= =?utf-8?B?YmdyNWJTa1RNSnpWeklXd2hBQjlJNWY4TFFXSnlMNEFQQlBNNlEwMk5jUUo1?= =?utf-8?B?TmFXUVJzYUNnRHVxaEtJZG1FdThYeVRBN1A3dkhWajVqYm81YmRrRittM2Jh?= =?utf-8?B?djQ5UjZrYmlGU0hRdlppNXVxVWI5cWh2UVV0N2Jmc2FMaEUwK3JEL1h5c3Zi?= =?utf-8?B?TmRNOVlnYkNZN2hYQzQzVjBadVNUMEF3RHoxSjhUSU50cU9jR0tOaThBWnRW?= =?utf-8?B?MmtQZ21XU0lnOXVuSk5BM2VtMEFhSFNVRlhUblByUGsxY3FURkhubVowMEpq?= =?utf-8?B?eW9ZNWkvd1Q4WFhYeDZ4V01wRFd6clcvM1ZLT0RBcG1WL1Z1OE1WWHFOWXhL?= =?utf-8?B?RTNCeWVLZjh6a0hJbVhqRzlTNmx6cnlLMWJTWGZ2eWd6cTAxTytXSndUSEJp?= =?utf-8?B?TW02OXFwak1aTm1CNkFUZTAvMlBvRmdQYndueEIyWEh5Z3NKV3V4TGpucmN0?= =?utf-8?B?a3hDcVhzUGtNYTJLVVRJVDNYa2srM3hxRVpIcWFCZ05ISEJDNm1ZSzZRL0tH?= =?utf-8?B?R1lISW9uK3U3UlFDR2VORUFpYURsdVZWSzJnNlZQRmIrSTBMZXFrOUcrUUJ3?= =?utf-8?B?ZDArYk02TG9JcEJkMmYxTlEvMXZMZHFJKzc5N3NON2VoQVVhYjhEaXZ6anVQ?= =?utf-8?Q?CLJvGq+hlWzIn9crtq1SQfQt4Fnxp6Rl5X8/glRyTaxFD?= X-MS-Exchange-AntiSpam-MessageData-1: qqJVVS2DfCpH5A== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: b039d591-70d5-4120-e8ef-08de6232ef38 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 08:13:23.8074 (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: amM/RL0vAQLhsxoL3EgMod/of+rXYHhFB8YgKcSVQAFO+RvTPuNh8PQEoe+Q86UxhhEBQrX3d4VR+VrlKaAGiQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB6416 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. Signed-off-by: Alexandre Courbot Acked-by: Alice Ryhl Reviewed-by: Daniel Almeida --- 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.52.0 From nobody Sat Feb 7 15:22:30 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012024.outbound.protection.outlook.com [52.101.53.24]) (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 0E40532B99E; Mon, 2 Feb 2026 08:13:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.24 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770020036; cv=fail; b=qlJsDfrYw8XoSBf8ae+SYn2B2JhjpyCzP2hOSmCsOQzjaDhyvJllm/KvziXIKxLTnXJOyEiN8Nsf3pqnGZYoCCoalxGMSGASh3jVTuBef/4O2ddhDrHuKOtWPA1B92B4rQAW2AqfQrI+UG474PXcjxYFwedIHyK5QXHSE1TL100= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770020036; c=relaxed/simple; bh=rzE2Hku5WTNp7Lz1u1wmYFvLp/VwPqCr7RLy4WFgG+g=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=ANAL2quUrpqgDn0vbByBp1UYlWJw1idVagWGpeqA6R22taC9hgtvg8S8AHZEpe5lm28qhzwPRx1bQhc1lmWEX4k9jGnkCbon2H6ALofKOs/xK9n/86afElHpzissVj4kx1JViRa0UESXG9mkZgJf89FBmo2vFey1qvvgGwU47Rk= 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=OV25pgTJ; arc=fail smtp.client-ip=52.101.53.24 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="OV25pgTJ" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=MHZWTlJ7fFUDI3oC+WifUTcrhXkeDUAuEAh6grEBcbAq2R7BUTTn0fn1TWgEvaPMMl5cpf+1ReALk1ktz2RjUFuVJwN/Lsm9oA4D813TUmXNwA4aAAsptEFiAcZaeoCIpYPHp12m8cjLetCWB4lCKQEDpoLqq54ktfEAQilTskGEMuSWbxQ1RnKWXTpuI816fBpKNS7YArvzldbNLDuZPt67rDw5EaNnH+PMqwTpoNXG7BtjZmAvJNzMR5J8ntPRA+nkipxySmtLxQ+5+nFsuUqhNlpk1CEN7SW3WkZnO1kt2mI5OpGJcumU9aym7tr05uTrrW0p/lg7gHraqQvNiQ== 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=GDgvOLh9GqN/5hFyj8uUysfDyxwPRORb2D5rgDAtfM8=; b=nDqe4NR5dpS9H1RsCUn4PKmrv+s8vZ5q7xDaPSQ+npArlHadSjogoxu9jTa0S2FSJVLrA1mAwD8+Ut4Dzv7/HMK20le8vBzSRadjMeJI2xsjAicliYeP5mXyM8lxRFBpixjKEmXYkpqiHQ1ZylDzGWzFYmWfNymFO3cmkkSNzXQhYMDFvrO1MEQFlPtuQsb4zvMS7UZ58YWTlcVwZZHYFW7Gp20mYkKiuMPItrvz3RacAhESpvEy2/FYicCyeLnZ2G0IKGQmA/nz+cIIBMM0KcdxQ8rn1Irx4wo32NGGUHEg17YMzvAldMNcIubZBdRj8cq8ettgUK31vpoTuXrXsw== 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=GDgvOLh9GqN/5hFyj8uUysfDyxwPRORb2D5rgDAtfM8=; b=OV25pgTJFDEogKmw1vWTQ27BmFr/6vhyXQmXgy86AxzjF2nelBvzsXeCt+yaO22IZJMv6LDFTgREgEQxbarlWVCmmPezzvtgyAN9VxW0d8DsgSil5V8ke2qLQC9SSSIYe++HIVMs1P2ExOd+CWZRt7GpgbhMuwsizD4bD3y/oVs04JatoxjbousFQmRMb7veh0KlvAHQSBcn1e3jnqMlsA0UZ85JzH++tkRSoW26WdyJ6HXVO6ycgX4+4AIE0GR2bfO2qtzH/1MCo0GW+NSiKDcTPAxpMsRtxIjny8kYXqIMHm3Q+3OpOFcqQHjxg83Q+JvXaXqWbXtRRNmpO9DE0A== 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 DS0PR12MB6416.namprd12.prod.outlook.com (2603:10b6:8:cb::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 08:13:27 +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.9564.016; Mon, 2 Feb 2026 08:13:27 +0000 From: Alexandre Courbot Date: Mon, 02 Feb 2026 17:13:02 +0900 Subject: [PATCH 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: <20260202-io-v1-3-9bb2177d23be@nvidia.com> References: <20260202-io-v1-0-9bb2177d23be@nvidia.com> In-Reply-To: <20260202-io-v1-0-9bb2177d23be@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: TYCP286CA0364.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:79::8) 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_|DS0PR12MB6416:EE_ X-MS-Office365-Filtering-Correlation-Id: 696d5c80-1d80-442a-442e-08de6232f185 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|1800799024|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?amF3aHJrN1RjTGo3MUxtbVNydFdkQk1YaityRFIzNHduUzJORkpka0hIeE5D?= =?utf-8?B?NzgrWk50ZlpqaFlrdzdUTE53T1pNaU9lUHVWVlVUSFFrN2pXbkxXcUFxanlP?= =?utf-8?B?UVhtcWNwUDFoQk11QWljWVVQQWZhMTkwNUJrNTlTdU9ibWkwZHVwQVZSUmNC?= =?utf-8?B?cnFlMjAycVUzaTQyT0kyTDVReUhtT3hCMzZiNTkrb1B6aTR2ZDYzQ1JwYUtG?= =?utf-8?B?cWxFZjFzblRZOEx4UFltdzNWZG1RS1dGb0gyc1NMV3l0cG1jVTZZTHpJbnJB?= =?utf-8?B?aWorY1F0eGpIaGo2dkxXWVJRczdodUEzejB6MTZLWkhXTlZUazlBWTI2dEV2?= =?utf-8?B?d25BdEJCd2dDK1pZdzlOTE9nLzIvalQzRUVyTXQ4NS9CNFZYVlFiWmJOakdw?= =?utf-8?B?bTJCSktLYUx2amZYdWlDc3hhV3lwUUx1aEh5aUxJYlg3TGIySGxneEYwZmc0?= =?utf-8?B?UndCazlPZmdNQXFFQXpETmxtVmdoNUQ1THVSWVFPS3VsbjUxTHRLcnpFd1JE?= =?utf-8?B?Q2MzWEVLYkxpbkUyK083TW5oK0oyVVgzcVU1cnpjbmxFY1dUeVlYREVoTUVj?= =?utf-8?B?bEpJbWprdVRRSnZFR25WRGo2bTl4NjVPRWdJbE9qM0dLQUY4dnhCRnV6ZWRl?= =?utf-8?B?TkxkSmd1RGVuN0dOR3dyUjFoUUl6YUw2bmNWZmEzVWxyRHNrMjE1ZW5qbnlY?= =?utf-8?B?aGlnZWFOT2gzRXVVbEpmc2hhcFM0NDRPamhCQWpzWDk2RDlURGJOOHhUTmpx?= =?utf-8?B?aXFGR0xwaWUvODhveE5yblMzZkROOWRnRlVRdTM1VkVERUFuVVdycXc1ZXUy?= =?utf-8?B?QklHaHN6dTFaNmJlMFdSY2xWU3p5WDY0Y0NJbjRoZkRFVWhIK25yWndZK2t2?= =?utf-8?B?UERQYW53UVR6NWJzcXJhWDlCSzVna05TVlBWeENjc2I1N3BmaFRYeUVVVWVI?= =?utf-8?B?c3ZsTzVNbTR2OXBmdjBXNytDakNhMit4bUxyc1l6VnUzblhCMk95eDkramd2?= =?utf-8?B?M0pZQW52YzR0MFFXd21zNmdQNUwwdFZRdW42WVhCMUhvT3ZxdDF5SXlDZ2Ri?= =?utf-8?B?MkU3R1prdFpKZkk0QWxPTHd3Z0lGSjNWVlU2WVd5bUk2RTVwZ3h1TlJGMjZI?= =?utf-8?B?T2xoN2tpQWtLZDNVMmIyNnpqL05DZ0VqakF2Zmp6Wjd3VkNwb1Fnc2RGL2V6?= =?utf-8?B?TmI4MUl6dTlyNUJTaEozcjBTRitUL1JucDA3eldrYmxzc3ZDS1V1MlJvU0R1?= =?utf-8?B?bzdNVHJqRUV6SFduU3MydHkzOU9BQllmQ0NLRk9FTmJ3SHNEZEtHNS93MEpX?= =?utf-8?B?OGk5R0FCMEViZnlXbVlKeTUrWWxlaU11bWdOaWk1NkZoemFOdlNMR0NFZUdO?= =?utf-8?B?R2dmQUZRcjFJcVVlYUtUVExjclQxS08wK2RxZU8zRUN3M3lib0tNUlM0d3Nv?= =?utf-8?B?SUNmbForVWsvNlY1YXpuWlN6YkxNell6SVFFV1RkcXpiL1lNd2R2MFNWYk9L?= =?utf-8?B?M0MzRXJ6aG5yUFc4NUhhQ0IyOFd3Q2VBa3BYVkViMnZBNnBHSndRM2NZRkln?= =?utf-8?B?YjNRTW5NbTlOM1Nqa2YvcTZiNWh6WUd6bnVHZ1dmTnhkNVFtKy83ekl1WFFG?= =?utf-8?B?Qm43V20rVUtaWGZRajhybWg2M0pjUzdobTVwK3c1UDd2bkx0NXQ5OXd4amF5?= =?utf-8?B?dVFHU09aVDhXZ20vTHZxZWR6Tkd5V0lmWnExdXpBUVVZblBITmdjbFphcERm?= =?utf-8?B?SWRKV0ExdWl1OVBNZ29ldmtTVHc1dzlmQTdVcDM4dVoxNDZpajNQdFhLL2dn?= =?utf-8?B?S1BEYytoM1oxTmg2OVhBTDdwMHpmVHlkb3BRRjNtY296L0ljM1BLR2cwOUVa?= =?utf-8?B?Z3J6eTNROEpNODVHdC9samFkUG5wZ3dYaUhWS1M5QkhDSzBVQWZpcXBIalJL?= =?utf-8?B?cGViZldrV1NDd000V3hoczVHRlkya0lHWjl3TEpUcm9qckl2TytKZCtUZXV5?= =?utf-8?B?L1Y1TW9RRGZOcE4xN0I5RE1iYTFJNFl0RXJnb3RIbjdWdkVjaDJITk1jQ2E3?= =?utf-8?B?bHU2T2Y2OGhxdFNlcWFUQ3dVcXdBaEVsam13aUNBeC9EVGJmTmd1L3Y2Rzla?= =?utf-8?B?clZFOGZkRXB6VGhDWEV2dHFVVmoyU3kwVkt1WE85UUt3Y0VSMGZkQjByQVdh?= =?utf-8?B?QWc9PQ==?= 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)(7416014)(376014)(1800799024)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?Z01mUktoZHZ1cHR3MjQ1SkZiS1N3MTFuaFdPelFPeWl5Wm0wWXVzRlROOVBa?= =?utf-8?B?Vm1pMGpYdWZsODM2M3dXdU1nNWVQazVXdUQzYzNlekpsWXN2M2xVektETzht?= =?utf-8?B?Sm9DN3AraS9vN1NocnpVWXRhVXNmNlNNQ1pZdHhUWURNQ1M0dEJ5cEV1NCsx?= =?utf-8?B?OE5zdE9Ld09GMkJLSDZDY05MeG1pYXhGclJ2SUdHOVQxS3prZ2FpMmc5MkVF?= =?utf-8?B?TFBRQ01uZGZ3T3dpc3BDT0lzaWlKdXNjTUg0U0s2eVZSTUdjZmFZZXRlZE9C?= =?utf-8?B?RWF6TXg4V0o2djBXMWNBdk1CajdYVHVlN0FneEV6Sk03L1BGdjErZUdab05p?= =?utf-8?B?cHFzRmNDZnRXcVpnenJkY0VmVmpNaitSV1I5NVpMNllZNjdXU1IrRE8rbFB1?= =?utf-8?B?MkxIZ3A4eXhtS29OK2g3UmM4czhzbDhtRnpQQ0hlVlRjbFFsY3RCbGFWY3pu?= =?utf-8?B?U1A4cU9RWFhDVVRCVXZJeUVCTm5kRjlsMXk1UHU5amlBUktLY0FWTHJsYlZk?= =?utf-8?B?NWhnVlZtbE9xZFFaNk9oVUJGK1JWckdNWEd4eFJya0FNelFid3NyL0FvT014?= =?utf-8?B?UFhRTXdlNmp5a0lodWgzeUpOUmdPZmxKeTh3OEZTQTJXN3hLajlVbXJVd2Yy?= =?utf-8?B?R3pWbm50YmdPeTBhUUxzOTdZVWkzTERnWDByMHAwYkcwWmFobWJVc1loQzg2?= =?utf-8?B?QlBKS2IxeFBGNkRyZEhBWDIxdEdhT2JGSXljVm9jeHd5cDZlN1VqcWdqQnBW?= =?utf-8?B?MzdsZjAwakUweitFYk85T3BiUXlWM3h6MjRDbUl4dHl5ZmpIMFZicksyODlo?= =?utf-8?B?amJjblhWK3BibytaQmw1TUNnaGt3RlgyaGxobkdGWm5YMENpS1g3aTR6WWM1?= =?utf-8?B?Mkp1RUFqcWpIK0xkL2hkK1lKWmErSnpYWkJBVGtjTlFoVjZDTDJ4ZnhyS3E1?= =?utf-8?B?Ty9oMGNsZ0dORjZCRDBPQjVOVXFySFdzclcrZndlbnY3Rlo4ZEhTR1FHTGJl?= =?utf-8?B?UjlZWlJ1V1NYK0E1RUllRXRaMmc3SDByM3BMTnUrcjMxdHFVMzRyR0xKTTlV?= =?utf-8?B?NzRlQ3kxRk90NUY1SUlpS241YXZhUklOTlVxNHpnL21LVi83ZnlEcWl5RXBO?= =?utf-8?B?KzR3WHYxditkelBjNzBZcWxwSWJmdUlkR09rYktjUHM3UHdQS0UvRnJSaHdw?= =?utf-8?B?QXFzdFdlOTVIV0NOcUlPRGI3Z0xET21PUEluREgwU2IrTkQ4V2V4Z2xmUng0?= =?utf-8?B?SzFFc1d3bEl4bUVkSU4rbGM4YWcyMTV6TE01UDhnU2tXczRUeGVJYWNIdFd2?= =?utf-8?B?TWRtM0lobFI5VndsSVJBTCtIRkRqWTNXRHZJSkVSMWVFd3BvTXVOVUFJMFFy?= =?utf-8?B?cjVjejUyaVU3ZTBIK3o0L0tBL0srSlk5WHFSWHFaZ0tzT0g0Z1FTQ2J6VnA2?= =?utf-8?B?N2RhNGRuUDdETkVMUVV5TmJHcnUxOEVxTDZqbEdYcmR5UTU2NHl3K0JMYjhG?= =?utf-8?B?YU1RL0dFbWlTdklzZU5DYnp4RkRoSEJvODhDZ3VMamYyMEh3K0FqWE1uVlhv?= =?utf-8?B?Qk82ZUxLeFlIMWZkTGlVNEhSaktvc0hZbCtPcU95TVNDQjRnT1ZCWE5LSnhs?= =?utf-8?B?TTJHUkRiSUZxUmc0Mm1LRnVhNFRQSlU4TDhtZkF6d2NXVXZsbTNPZk5rWDBE?= =?utf-8?B?TlZEZXphVmc3U3RrQUVtWVFqbjdkeno2TWE4UVZMblJ6QVVsMzI4OGIzdTJZ?= =?utf-8?B?eXVwenhxVmJGNlhLeGVZdWY2bDMyM0ZTdDBjNnc4UUlNc252SWhFUUVXRmMw?= =?utf-8?B?Unl6R2RXL0s3LzlzaXpMaGJQdEErTjlaVW0xZkdMRjdIN0hPbTIwY3dTWHUz?= =?utf-8?B?aWhVQjJYd1hFeTNwZUZ6UDhzSHo1RTRTanp3MUJub0doeU41R0E4OEhjb2Fp?= =?utf-8?B?d2UyMkY5WFczcHUzTU45RExVbUQxdUdyWGpKU2hxS1IyZmVkZlR4cndXSVpT?= =?utf-8?B?VXdUaTRMVDRQQkxiemVEWXZVVEwvWUlXbXI3WlR3QWRXNU9JQnBJRmtQSXFz?= =?utf-8?B?VHkwZlJhR0NWNzBDbG1zR3JRV2lhZjlINDFuZjZkQUkxbzI2cUF2b3A0dTg4?= =?utf-8?B?VmJLNXVjRlhVTUNlenhleGh5SzBXVUZjNk13NUxJZ3hOYllERy9lc1FmZFRZ?= =?utf-8?B?ZXNmNUZ1SGt1cklJVlZlYTVDaUxkbTdHdzRNOXJ6SU5McmdyQW9mdHZ6c1Ji?= =?utf-8?B?M0pZQ3BJV2ZJbmkxeDcwYThoMDFONHVESDRCNUNxRkdXVk1taVVBZHk0Z2dJ?= =?utf-8?B?blhvMkVjWGw3UFl4dDltR2JPWnc1ekhFNHluVklHaTlNai9BcW5CWGEwUkhG?= =?utf-8?Q?SHJpipyN53yDSYVW9UnTmusfsX8SFpjAICCQby9XkIs5Z?= X-MS-Exchange-AntiSpam-MessageData-1: BSfis+lnsgtTuQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 696d5c80-1d80-442a-442e-08de6232f185 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 08:13:27.4898 (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: 9VQH3+8C+75lu2cm6LvMlvr244FA39f1UcR9pwYW05I5tNoKrWreuEvtKHcF/OqsK9JbRrlLat9VAjtLfmhBHA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB6416 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`. Signed-off-by: Alexandre Courbot Acked-by: Alice Ryhl --- rust/kernel/io.rs | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++= ++-- 1 file changed, 64 insertions(+), 2 deletions(-) diff --git a/rust/kernel/io.rs b/rust/kernel/io.rs index dc894a45bbcc..baa8d3baa20c 100644 --- a/rust/kernel/io.rs +++ b/rust/kernel/io.rs @@ -556,9 +556,15 @@ fn io_addr_assert(&self, offset: usize) -> usize { =20 /// 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> { + ( + $mmio:ident $(< $($generics:tt),+ >)*, + $(#[$attr:meta])* $ty:ty, + $read_fn:ident, $write_fn:ident + ) =3D> { $(#[$attr])* - impl IoCapable<$ty> for $mmio { + impl<$($($generics),+,)* const SIZE: usize> IoCapable<$ty> + for $mmio<$($($generics),+,)* SIZE> + { 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) } @@ -695,3 +701,59 @@ pub unsafe fn from_raw(raw: &MmioRaw) -> &Self { call_mmio_write(writeq_relaxed) <- u64 ); } + +/// [`Mmio`] wrapper using relaxed accessors. +/// +/// This provides an implementation of [`Io`] that uses relaxed I/O MMIO o= perands instead of the +/// regular ones. +/// +/// # Examples +/// +/// ```no_run +/// use kernel::io::{Io, Mmio, RelaxedMmio}; +/// +/// fn do_io(io: &Mmio<0x100>) { +/// let relaxed_io =3D RelaxedMmio::from(io); +/// +/// // The access is performed using `readl_relaxed` instead of `readl= `. +/// let v =3D relaxed_io.read32(0x10); +/// } +/// +/// ``` +#[repr(transparent)] +pub struct RelaxedMmio<'a, const SIZE: usize =3D 0>(&'a Mmio); + +impl<'a, const SIZE: usize> From<&'a Mmio> for RelaxedMmio<'a, SIZE>= { + fn from(value: &'a Mmio) -> Self { + Self(value) + } +} + +impl<'a, const SIZE: usize> Io for RelaxedMmio<'a, SIZE> { + #[inline] + fn addr(&self) -> usize { + self.0.addr() + } + + #[inline] + fn maxsize(&self) -> usize { + self.0.maxsize() + } +} + +impl<'a, const SIZE: usize> IoKnownSize for RelaxedMmio<'a, SIZE> { + const MIN_SIZE: usize =3D SIZE; +} + +// MMIO regions support 8, 16, and 32-bit accesses. +impl_mmio_io_capable!(RelaxedMmio<'a>, u8, readb_relaxed, writeb_relaxed); +impl_mmio_io_capable!(RelaxedMmio<'a>, u16, readw_relaxed, writew_relaxed); +impl_mmio_io_capable!(RelaxedMmio<'a>, u32, readl_relaxed, writel_relaxed); +// MMIO regions on 64-bit systems also support 64-bit accesses. +impl_mmio_io_capable!( + RelaxedMmio<'a>, + #[cfg(CONFIG_64BIT)] + u64, + readq_relaxed, + writeq_relaxed +); --=20 2.52.0 From nobody Sat Feb 7 15:22:30 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012024.outbound.protection.outlook.com [52.101.53.24]) (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 1148E328633; Mon, 2 Feb 2026 08:13:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.24 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770020043; cv=fail; b=tlfDIpW1S2t4DLstiGWVM9MV/W+h/grdGeTR7ihb/OMDCo/iO0b4HbedskpvhQqBRXGxI9vQ6+PuJJC+MvYO/3IRb1pnYJaE5U59/edVZaIjH0kgu8RuSiQ5Ex65VtJupyeOKdtCpB+shVxhkJvZhRcdc+24/5rkpvFNmqTX0cw= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770020043; c=relaxed/simple; bh=VnMoadKo2y/CkAULBeTVCHRY0ypiYB2iC1N2RCDU2Mc=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=OdHiqS74UIGqAAAeiy+Xw2XFmzuyx9pyFb4jnV7vKUFkTXQuVGVteuggtwtIsFtEzYSytdP5yHrp6HzFnD9oLgnk+TzUOfEP0H0xMq/3Ift7DUhVnn0Olsfs/KWWf11hcTQj4GkIuxMV0KqIf/WaPaXw8NRvSKCYim2Tx+sJuKg= 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=SkZsbTS4; arc=fail smtp.client-ip=52.101.53.24 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="SkZsbTS4" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=wj7OnYRtluWf9VWOlI0dWQ3CENO3p2i3EeUMuzvDFQ1LvXT4awsrVjzOHavgc0gFb1Z0jyUr2f6OZtIcylOz9n732GoJLFJZKOHneqDTn9dxp87FWGikBRDmfNBZGkt09iSsKg2mORhQraDGqEH5XjHYmQjfr99jIc3yxcrItUjfZHJQ66lt8HiSVWzZpOnPL+nYXxskxwV/XW5Z+WCS0wbfZpBnYW7u9Jw0GLvxh48acHb/VLc0zQ0UrtA+qIRQZ1HkPR6tFfwSCFat087c5BySN76R7BSz8tgSScl8JIlPZOXGYLgfZPcQwd8gb4n48YTZ3F/eTc6Z9YSF+AxGQQ== 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=99TKQ1j08r8iAcMiW5WUdAbQaI7Luciy73SDqvX9REI=; b=lhQ7hn7h3ft+8a+wy8ZqTjVBYVoF3ffGZM2fOjR1SxGM3WUmgie2gbX3Bv91g1/utcgWT1JaBGQMroEX5OqucJUOMEotkWmaK7VRWG555E+sBmnSKwa9XOgEamtonh0B7tCvypyOUsJVGp4mHXNle4ciNuaTjDv3cIy+W8l9zR0MBHoA4oECdBGK9XK9XTO60mKc8HqbLzqKl5qn1OuFmMaTcM3dlf4pCL8ZM9qgx+RQO1/WhH/b0qbZ6Hk7ON7kKMZ9VPaEb4f6y1iN3+IsEXwf7uuZCwbKlNhKfzfQnUwNb+3h/0lMnwHqHs+Qk1MLys7xbhHpUJl9rdBEMS2FKw== 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=99TKQ1j08r8iAcMiW5WUdAbQaI7Luciy73SDqvX9REI=; b=SkZsbTS4NjWa+lB2IlW8Wp1VQ+yr1CdW+W4qY1+2F5tXQ2mXcqRPPkqKNtNKPXZzA4ZZTtedwBtEl8SEdL8fo06xvJLm7ji7Md38YjMsMGrpLXJr13ioAOrl38dNdHQ4z/8gFSHio1ZqMo+Si1Lj+4TEcvZpMxKAzuZT2s1oUbmTjv2crIBL9wKhBfy9FsvAZhTKWKIVMhM0jvBYHYkRvjzWMbPXdQ3ZoYIWW3quI/iCz4mIYpO0oM0/RWd5BL6p2lqak0ipHNW+E0H1lVw9JaqqMtyrjZy3Yw1gCXwttI6lQrHW/TQMmUUc4di5m0pHQeSNloB9Y6VVHX2A3EkKvw== 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 DS0PR12MB6416.namprd12.prod.outlook.com (2603:10b6:8:cb::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 08:13:31 +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.9564.016; Mon, 2 Feb 2026 08:13:31 +0000 From: Alexandre Courbot Date: Mon, 02 Feb 2026 17:13:03 +0900 Subject: [PATCH 4/6] rust: io: remove legacy relaxed accessors of Mmio Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260202-io-v1-4-9bb2177d23be@nvidia.com> References: <20260202-io-v1-0-9bb2177d23be@nvidia.com> In-Reply-To: <20260202-io-v1-0-9bb2177d23be@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: TYCP286CA0295.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c8::10) 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_|DS0PR12MB6416:EE_ X-MS-Office365-Filtering-Correlation-Id: 3666f24d-a29a-4a1a-84e0-08de6232f3be X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|1800799024|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?WTRpSDl0bmM0a2tvdEVCQUx3VHJsL2hWQmI5RkZvL2hBT0hKS0ZuR2lpOTdB?= =?utf-8?B?bm55cjlGYTNUL0RadS9VNUVlQXlhTUQvMVp0RkxVOEh1b3NNUkxyNk51RTNh?= =?utf-8?B?aWgxZUdIUU55UzlraWVPaThrMVJaTzhGY3R2VGN1MWsrQ0NyMFJGNmVNeXpq?= =?utf-8?B?ZnRQSmVsdnNUVlJhYWFOM2hzTURMSlduaENVc0R2a2Q2NmttUVFrNXhUV213?= =?utf-8?B?c05uV01YMnV2dWdtVEtjMis5bEJ0dWZLczBLNXVBZk1uc0JNRmxPV3VzY0JW?= =?utf-8?B?N2JZMHA5U3p0cFdGRnV6anFLazkxL3pINlRwLzI3bXFyV3Iwem0yK255R1VN?= =?utf-8?B?YlQxMnhBRU9CajVVUmtYb08wbVQ1clBVanZPenFUdUdzSGNkZGlsR2VUYXJu?= =?utf-8?B?R1llaFZjaWEyQXdoQmVuZXhsMlZhZ0hPTVNGS2FMbzhBMmNFd0o4dUNROXVE?= =?utf-8?B?SW1vUEJObEFNQWs1WHBoYmpYN2JRdnIwVzQwVUo2MEpkWmRZLzRXY1R6VXRw?= =?utf-8?B?Q2pndER6azkvczRvb0ZtSS9XQnlaTDhrR3N6SmtVZUpYelRGMGM0c3pZNk1a?= =?utf-8?B?WjFiMmVHUkZIMTZJZm5IeTQ4SkZOYmRnYjYrdG52MzZab21GQ05ZZnZWdUY2?= =?utf-8?B?bDFabVo3aHdONllaOHNJSXRvVms1SFFObmVXaEZNZ09ZVzFqZFhrdS9XeFF1?= =?utf-8?B?cW1iMFR3M2RHOUN3aHN3TUdWUmVYRkh3Q3d4UUtJOG5PUHBjMFpDQXZvYVBl?= =?utf-8?B?S2Jady9GK2t1SXNhZlg4cHVhVGEzTGJEN1BUUjIvK2ZoV3o3TCt2U1VwRkZs?= =?utf-8?B?MEV6U3NUTk8vV0tNNi95YmI3RUtMb1lHdEF1dmdsUTZTaUlSNy9TcmRpYWVC?= =?utf-8?B?dTROYlVzalVtTHZkRkpjZzV4ZW1NaVJlbTBpbVNKWk8wMytValBSWndManpz?= =?utf-8?B?cXN6dkZxUXBRbTFMRUpMa2hzZ1ZUREM2bzQ0MmovQm5lM2FpbHhXRERmNGZn?= =?utf-8?B?a2t6MVQrR3YrUnBTYTZyYnhuSGx2MjNsbjNSM1htckNiUk8wM0dnR3ZSaTNj?= =?utf-8?B?QWdlL1UyKzRaM0hqRUxEZ1VrVDZvSiszZFp5RkhyRm95UEYvbTRYTWUrNHFl?= =?utf-8?B?clNxYVFLbFdWNlJLWG9tdEVVbzkwQUtUV2ovRnN3MEphc3ZSWlI2eVVlK1Vs?= =?utf-8?B?WDAyaytBcXhWWThiUEhJby8vQWQyM2hncUdTOCt2TjlKVzhLaXRMTmdMRDVu?= =?utf-8?B?RGdGVzE2YkhXQVBFMkRjcTJ6V0ZBUjlMR0w4cnc5UkJhZjI3SmRkQm1zOWRY?= =?utf-8?B?SlhNTi9wRnhjakxYUVRWVzlsYmFvRWZhNTAyOExjZGhtUHN6cDZrUi9JUUsv?= =?utf-8?B?VDV5ejNxUFlidlFzM0trSVpEMHB2MEx6Uk52clN3R0kyY093MTNYZkcyeDRN?= =?utf-8?B?NlR1bEFyYW9KTjNmV2VvK3h0L0d5RzhnQWZEY1Q2N0ptVlhBZWZCcDN5U1hu?= =?utf-8?B?NUxrRFVTUWZMWFlKYTZRV3M1Y0M1Vk9DQ0JjS3hxV00raVgzaVB4LzZxaFJv?= =?utf-8?B?bk5UZUxtMFlYK2NRRlk3RDVKaEpnWFBNY0JreVIrbHU3eGxPOGtlOFZ2RXZJ?= =?utf-8?B?dzJ6QnMzWDZROUxKZmM3VVBiMmN6WjVCMnVYS1Brb3Z1Qms3M2RjRGNUQjRw?= =?utf-8?B?cVFNU3p3REJIYVFoRlZwZVpCd3ZXUUJSZGdYWXhDZVdJTXduZUp5TUZ6T2Ri?= =?utf-8?B?VndnSHNYZUU1K241S2RaRG5rUWkxemE0ZWRYcUE2aWdTVGZwalgyWHhHeXlZ?= =?utf-8?B?VDBRZ015d2ZzT1JDbEJVK3o4N0RPRm9RdEVXdnk2WHphNDRiZmpmTUttU3kr?= =?utf-8?B?UVhBK0NyZFZMbjJBTHBRREhlRU11KzhoQkpYa1pPN2ZZNVlNQTNYRk5nVjFF?= =?utf-8?B?V25veEZWSU8wMjM1UUpaVkp4QWM3Y0RHTmIrV05RdThpYzY3NUMvd2ZWeFpo?= =?utf-8?B?UEVFY2VLb1dCT2RobXpvNnJSMCt2RmNTcUJJeVdMMThwcjZqSTNSMUpvLzFw?= =?utf-8?B?bWdMTzJ5STdGTFppaDM5OEg2TXNJMkdZaE45dDY1Q3VyTXhlKzVSMGxwMGtY?= =?utf-8?B?ak5yMCt6NUdSeExRUFV3RUpOeThKQVBwaEJWQW5rbzE1VVlzeEFUV0k4OEp1?= =?utf-8?B?elE9PQ==?= 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)(7416014)(376014)(1800799024)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?di9UdGg5TW5veFNMc3ZTdVcrRXdGWExTZlVTcUtueWVXWjMvWlE5V2dLRldp?= =?utf-8?B?bWplRDFJWXF3WUFjeFJiSk4rUFprY1hFMU5BYWtralhFb3cyNkhramZLcVEw?= =?utf-8?B?Y08xTGlYMWhyTEFjWTVQTW45eVVmTitBZ2dXNW1OME5KUGdFM2g0R2Zic3pU?= =?utf-8?B?S0xwVlJpdzR5RXhqb1NSMWpQUyttMGRseDZhR05qbm1FWHM2SjBSUHVmZ25j?= =?utf-8?B?bjB1OGZPemZocGZON2k4a1ltbS93YVFEajdIaXE0RHhtcDR0RDZjaGhKMlVJ?= =?utf-8?B?ajM3NitTbHB5dE5jV0k0aVRsdzJxNitxeWJHSmZHQzZKWjRxNjVnamZGc1Jr?= =?utf-8?B?SkpvVTRjdFNRVjZjRWdOYnlkam5ja2RWUWMrd1pUWkJlVHNCUkJjVXA2RFlu?= =?utf-8?B?L3piTlN5Y1VhVnpNTm9OMFZkdGN2MlRBOVBzcm9JZWh6RkhVZTNVbjhqWEtz?= =?utf-8?B?RU00SVdFbkZxN3lzdkhmc0hRSWw0SXcxeTRQYkdYL0NveWxpTmM5K0lVdU9z?= =?utf-8?B?TjJCOE5Ob0FNSlBZUGRqOE5DOEo4WTk3eGFCZGtWUHhNTndKdjlTWXhqUW1p?= =?utf-8?B?NnRXellrN3JqcWF0Y2NnYktHY3V4RjVhcmRuN3dmdVVoMVExcW5LczBLY0Fq?= =?utf-8?B?aEVVWVFhQitNNGliTW56M1NZdHg1OUpWQVdocmFQbjlUbWlhWVljaGhhUFdZ?= =?utf-8?B?TnczaDgyUi9tZTZic204eWdYQStoQUF3cExza294bVZUK2JaRmpVZWkvUzky?= =?utf-8?B?aFVQR2liWkZCZmxadHlISDVHaDBNUTJtUUxnVkozclhUMFJwTzZaT0FaRllq?= =?utf-8?B?ZVJLYVBkQllFS3hiRUxMeloycHVYc0FFZW9wU2ovVzRROFNScXhpTXkvOHhD?= =?utf-8?B?dHJ2OVZqZE01Um5hb1U2cUttSC9ydmZPRlA2a0lkNjFvLzdSdGpyRVZRYW55?= =?utf-8?B?aXJESGRFVGw3SjQ3bmhpMUplOUdGR25lZW5oNWpyUW1zV015VXFCNUdicGZ4?= =?utf-8?B?NlZ3aktnRkJMRU9vRmpHbHlWbnl6TWFjdG5XVmV6SWUwTVlvV1c1cFNEaSsr?= =?utf-8?B?NHVCQmFxemdoQTJBVWhnbjI5VFZidDV5NFREaUZXYzJMaGlEWnhsc2F4STJ0?= =?utf-8?B?MHUyQUJ6aDZHTmFEMzArODlycXNaTkRYNEhpUTg0Z0IvYUxpWUhMZzlxbTVj?= =?utf-8?B?Sk1SNFpQUTVBcE5YM2Q1WTJMNWlZNUhycmhSUnhLZjJnOHFNb1JEN0JHRmc5?= =?utf-8?B?TDZmTGtOdjhCRWNWL1VxL0ZrL0l6R2F0QTJKSmo3dk9mTjVONk9CVjV3VDFZ?= =?utf-8?B?UTl2MThrOUJ3Z2lyTStISHVvWVhIWnJReEFLTlB6eFFNcEUzTnFtYWJqNlhz?= =?utf-8?B?TUgvMEtyVm9HZTFxYTgwQWlzSERSSEZrUlZncjdsRVhxbzNoWDhGR2d5czBj?= =?utf-8?B?QnppMTBlRlJUdzdMRS9rTTBYaW5VQUo2V2RyaThydGNWQzd6RlhtWVlVT0ls?= =?utf-8?B?NVhDL2wzUmNGeWlQVTlidGhVWFEvWjVkZitDbDJ2UTFKSUhCeFF6S0w4WS93?= =?utf-8?B?U3FwcWJOVU8xQWhoZWtLcUltbkxRazNudnlDU2FPRGVCSE1xOU9DL0puU25h?= =?utf-8?B?a1hRNjdkK2JkejFMQ2dtSnY2VHJrV0RmZFowQ1F4YVpNQTR6bzROcmlUTmVH?= =?utf-8?B?c3pmcnJSQ2Jhb0p4U3RaOTZLYlZ0bnRBdTBpbTlFM2R4amwzOFJ6aU5EVnpp?= =?utf-8?B?VGRaVFRCQnRKMTBCTEljQnhwajlyYTlaWGQ4OC9LYVZqWnlidy9jMTNHUlFj?= =?utf-8?B?R3N4dnl1NzVldHRQdFJQZ0tCNGd4MG00Z3NOSWpQd2RnYk16ZEJOM0xSZ0xQ?= =?utf-8?B?MkVsdGN1cUthUDMyKzdNaEtkSXI4Q2NBdjYyRWhZN1d1ZitqemlNZFRvbTk1?= =?utf-8?B?UDBhSVNyOXFMalBUNU43Rk1EZUQzdWFhYnJqWDlQdnZ0cmJLdnl1RTFqZktE?= =?utf-8?B?WE9lYTk2N09aUllFR3JxRHFscjE2Sko1MTZMV05mbHE5R0hLR1JYaURLMDBo?= =?utf-8?B?VWhvUWJ5TU1CeDl2TmgvRzZGMER6cVFKcHM4aGNBanA5aXh4KzA4bjdlYk1z?= =?utf-8?B?T250NXBVK1JDMmExWEVMQ3prVWd6ek42VzJNTjFSdWtIY3BNSGtYY1BRcEQv?= =?utf-8?B?NXZKTGpSM1RteC9kajZZWWIxckVRSnFQMUJ3VlpJdTJYT3JyMmZwUmU0MjNM?= =?utf-8?B?SWZ1SWpRMituYXlpWWx1ejQ0QWc5SHR6eVdLOGpRMnRSZUdoci9oZDgwR1pY?= =?utf-8?B?WlJLUUpVbVgyd1IxVkMyV2VSSTc5NnZCYmV1aTRKaS92eDE3dk5PaXlPUzlI?= =?utf-8?Q?kgxwPAI1PQigTsT7YLoCgzQBuM62+/tJLTBGoxMJUfdxb?= X-MS-Exchange-AntiSpam-MessageData-1: YTKwRjCLwxCKrQ== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3666f24d-a29a-4a1a-84e0-08de6232f3be X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 08:13:31.1697 (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: ih0EnJpXSv+WgqTSffbNS4LSEc2nsJb5u1D/m6a/IGxC6TfAqClbVymwSyVQZlS0F5Jh2JKwzFqo75SSOo0FKQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB6416 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. Signed-off-by: Alexandre Courbot Acked-by: Alice Ryhl Reviewed-by: Daniel Almeida --- rust/kernel/io.rs | 40 ---------------------------------------- 1 file changed, 40 deletions(-) diff --git a/rust/kernel/io.rs b/rust/kernel/io.rs index baa8d3baa20c..e1094a237ff7 100644 --- a/rust/kernel/io.rs +++ b/rust/kernel/io.rs @@ -660,46 +660,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.52.0 From nobody Sat Feb 7 15:22:30 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012024.outbound.protection.outlook.com [52.101.53.24]) (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 D1A30328273; Mon, 2 Feb 2026 08:14:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.24 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770020051; cv=fail; b=imGxVdlQP133m7dY8MTik3d4ZlsC/NyGe1K2fFszk+NgywYXW0xC6kT+p5wnXfilS6sxrksMfRADH+ofr6Jeq82XwBBfKPrKWvgMXLFIQw2jcymIA8p4mB0zB9QP/ks/A0ORY8J4z7+iU0iv/Y5plLlXUMRQ3zpXpvkRA642ULE= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770020051; c=relaxed/simple; bh=f2HWLyuuEwKvpIMqcdxzl2UvojO00VUm2L8zG1/Skxs=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=QmDUj394xy4kGOaLeBGyh3AgIS2EaByolPcOslCESZSW0dwIlUpIjW8Q7Ep89JdSdweX5fI4hsSYXdc99nhsXO6J34M+kISYeDxUYWR3YGf1n30oDTO1onZwvHb0orvirswBbkORoJEHvULXHtq00sUX4DL8bNlm+5lNP86GNOU= 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=gIsvi+pd; arc=fail smtp.client-ip=52.101.53.24 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="gIsvi+pd" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JKw6Y6et6at0hHErZES93HUGVY1Il+H8k1LLdBU7aT1zt4iJWGRqfdY3sJsQoA81tPKD8dkLa3lZrdLWQrPeNkvkPBgKOfe7SJF61qnhC6SELsiu8slY92QYDwY1QGMn2Yfey/n0t6ZaFhRS6AXBFGcGgToozXM0l8KAgnZpsfqRQf5WoILk/vEtbRRu2YVXHlJ4lnq0ocHUEnFFSgdmMdg6iIrguOhDYxw7eZJNoQwjs2oiiKmkYDW2DXTASrUsFnPdkuBDWd2N5oBJHwXXd7wHP5BDKjb/QqVVc0wmTDcyzrvyPZV+1//XwU/1EfSwcKiMxblbs3zfg3RLAu2/rQ== 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=yjldlf8dliVrBChKUPVQGAPWqKsJT6n32/lLFg/yIyU=; b=O6QnNUe2qKskjhJ9szp/Yt87po7DZGQ35mLDzMXFRQx9LI9jfgKIQCRt9tIwITBPtNgAqT2WckRhT8pVYnu0l5Av0G51hCVRrnlvLFRnlqAtYFvgGZP83WziNrYYs2Yryys8VpvsTCSlRqexMYEZSNdTEaigBU81Bw7PhH6vJfu/rQHLalEwlmFeGBJS0LSUgL/A8inzpKGIQuUiRrLn1HKUtC5z4GrWBpw3whZC5WtnpRYbBClTOfXCsd85BLEBqWH+pnQLvyeblrkGW5Z432uGbYBBntMhuM8G3SOfWynCy3D7Mf/V5mYGhXFWfvl1HV/bYKlG2L2ZSGEK3i4CNw== 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=yjldlf8dliVrBChKUPVQGAPWqKsJT6n32/lLFg/yIyU=; b=gIsvi+pdKeKvLWi+az5OSTJEaPM3MKRnowZsOoyFgmQSc3ggjkokq/hp5SNstwNB2x3NKhDaCQsulqWrQsOhDQixS3+u3l+uG2YELbtR90LbIwYkwWWCEu6Mh993ZqCxWNENH3ShDJfucmSsJoVoVcW5Bs3YMqn8TN+/4wnHlRZrcVqIi0yZQ8BmK9YG4VhbUtzJfrkgnjt+D0GK5UVt41sTHIZjfry+vRTHK3t4guAA/KlkV7eVCS3/M/xrJnI1r6J3YJXkfb7OgtRwe0Qd+nGYB+1MPgxT5W1rt5O2zH4RWWKtmRRNQq9hvM91oZ5m1LTem0vDeIA2CG0Sna8ABA== 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 DS0PR12MB6416.namprd12.prod.outlook.com (2603:10b6:8:cb::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 08:13: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.9564.016; Mon, 2 Feb 2026 08:13:35 +0000 From: Alexandre Courbot Date: Mon, 02 Feb 2026 17:13:04 +0900 Subject: [PATCH 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: <20260202-io-v1-5-9bb2177d23be@nvidia.com> References: <20260202-io-v1-0-9bb2177d23be@nvidia.com> In-Reply-To: <20260202-io-v1-0-9bb2177d23be@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: TYCP286CA0369.JPNP286.PROD.OUTLOOK.COM (2603:1096:405:79::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_|DS0PR12MB6416:EE_ X-MS-Office365-Filtering-Correlation-Id: f834371b-76e1-4f8a-357a-08de6232f5f2 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|1800799024|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?bHhaaHBuL01hWXZ3N2hWclhUVDZSdEd6SXJhaGxkcUo2ejBTQ0FhK0FQMlQy?= =?utf-8?B?ZldUdDRBSm1rYWR2TTcvcnVPTWcwOUUvYUFuNlpVcEJGWVVPbkpEZ3ZJT1Jp?= =?utf-8?B?TUdqV1JtVXp3anlNeHJsZWNWQXY5VkxCNFp6Wks3cEp2MXM4akxOSE5pV0tw?= =?utf-8?B?eUJHV0FqcGZHc0FYVDNCNFNWVkVZMVJrSlNtOFkyd002UXgrSzhBTDZ3Qy9i?= =?utf-8?B?R2VhY0I5ZEJBK05PSzZrVjRHaUR6TWhCVmM3K2dXNkNyNG9kSjF4OURiYXYv?= =?utf-8?B?SmFOMFZ2bWxOc25uSll0cGF4M0QwaUs3VjJuK0M3UmdINTBDdmc3SytuZ2Fk?= =?utf-8?B?K1B1cXVHbGNvUjAvWFVSd08zS1V0QzlpZ3NZM0lxOUd1MlJDMkRoSWVmT2hk?= =?utf-8?B?dmhyMDRKODFvM0FBMGRlaWJDaWlES3dURktva1lFR0UwVVRMbk05dklWR2V3?= =?utf-8?B?bWx6aGtpaVhlQWdIWUUzMjVRUUJKanlMSUprbW5ndlkyTkhiY0pYdE04UThR?= =?utf-8?B?TkpINmJBWXhqaFg4ZlZsUWlEQ25Delp1dmFzZkdGNHptQ3F3OERrelZjNmg2?= =?utf-8?B?cUdPbUpqVkp0V3dCVWtxQU1uVHBtTEdTWW9zMmJKSi9EbjgwM2FwaEw3Nkp4?= =?utf-8?B?MzlrTmVLR3U5MnV4QUV2cURCMWFsbjhPc3oydXJuMExadXZDanZQcjBFbk04?= =?utf-8?B?OWlaM1JyU2tLSDdvYXo5cURtK2pOVldqMCtPWVRPM08ySGFrektaWGZ3V01v?= =?utf-8?B?TFQybXk4Yng2N1gwYlgwK09kVnYvNjJGVmJoWVF5Q1RiODQ5MVZRU0I3bmRy?= =?utf-8?B?WThJdnQ3UTdnSWlweDlRTExndzZuWFYwZXpMU2JIKzdJQml2Mlc2VTJvWDZ0?= =?utf-8?B?T0xLS09Ta20wV0trZk0yd2tTbzBDQ3kvMUNZNXRwdUVxaitNd1hMZkNQb0ZD?= =?utf-8?B?VFMrMkpZSkZYbEJpMG5oamUxN3NJcjlZeDA4clV0aHVCcFFoVll3UkxqbnZh?= =?utf-8?B?UEFnTjczV0NrSUFaU2c0U3Yycm9MT3NxTTVTeXpZMVhMbVc3UUZvVm5BcHNx?= =?utf-8?B?N1hrYjFvMGRaSFlZS0I4RnJWRHU4MlU3SmF4Q0JtWHZoL3M2YkQ2bmt3Tk1u?= =?utf-8?B?RDNhWlh5N2lyeWhacVVMNnNHWUNKclIxL04zRGZMTGozTE5hOG9BR09GZWwv?= =?utf-8?B?c0tSUTloWGdZU1p0NzdjNCtQL3V3WHpXdkRLaG10R2FhazN3UWxtWSt5U1Bl?= =?utf-8?B?Ky84SDlRaTd6Qnl1ZkE2S0taWGp0OTRYODJHTlBPUHFQTlBJaVovOWxBYTRk?= =?utf-8?B?b0YzZ2xsREhNVE5uMjl6dTZpeDh0WjJmRGxPYisyNEN5Slkzc1FpS3NrdG9r?= =?utf-8?B?eUpIYTNJbG01eEhhbDhVM2dnQlhNZnppVkM5OHNBbmZtMlpLZk81eGxOemEv?= =?utf-8?B?dTRRMjBlY3pWL3NTa0t5QmtFLysrRVpJT2R4dFNxRHRSeWhYOFhVT3lZWmQ3?= =?utf-8?B?VG1kM0w5UytNOUdvN2dFT3RyM1pkelM5dWFUeHJVUWNEUitpdlV4L1d1VlFm?= =?utf-8?B?bkl0TkRoMXdMS3pkWGRhWnBaZEJnRmJzOGY2MXU0b09tTU1DeTBycVFiMmVG?= =?utf-8?B?Zm9DWk9NUERKTDlpZkpIY1ByWjBVZ2NQczl3ckxRU2J6OEJDTkdkVlpjcm10?= =?utf-8?B?TzVzZ05wc05MVjd2aGptdU83T3hZcUUvTzJySENTQVlsRkdlUjJxaTF0TGxZ?= =?utf-8?B?TnZVTUFjeWliUEJzUmhadTlOTUxqRytBQnJYTTBSM2FLTTRUbWJqV0pvU0FC?= =?utf-8?B?NER3U1JRUmNvc2lpR1F1a2prWUpFYlpSN1lVWndzMlRnenVmN0JIajEwRkZj?= =?utf-8?B?VGpJVmVvcTIxb0lBT1V6dEdTOGw5WVNIbDJYWFJJT0U2bkwwaElORnRIN1ZP?= =?utf-8?B?SVBYeEpUTHRhT0VEWTVQNGFoRW00VFVKWVBHcGRYTDU4VHI4cHRHMStKeHdx?= =?utf-8?B?d0RvQitKdlNIelEzWjZxaHlXWDNRM1RmcWVUeGJtSUNjaDFvZ3ZtSVJ3ZTBI?= =?utf-8?B?bTloelRMYXZQN1pML2VrbmJpQmxLbjI5VnRIb25SYm5EWk55L2wzLzVtQ3Zl?= =?utf-8?B?ZjU0NDdHNmozcG9OZHpFWExnbTVSTDJxMWM1eGhhMEFwZWtLZ0dkSTJoZjJG?= =?utf-8?B?OHc9PQ==?= 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)(7416014)(376014)(1800799024)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?L1c1ak56emk1ZFEwM0V6QVlUSU1nWTA2R1FPSzB0S3ZkR1oyNlovZVh2enc2?= =?utf-8?B?dXJQdTBwM25UTCs2QldWYzZyYlh1VERHSFluUWx5cjdtcitHU2JBVzZlWHhs?= =?utf-8?B?ZVo4VWdtQlVMM2wwdDF0V2tlNm43SDQxWGkxc3B3bjhsZDl3L1dYTjB1RDRn?= =?utf-8?B?NTY2TzhVRG0yZzhmZmNKbDU2bVJHRW9Pa3AvaXpsQ3V0SGlja1MwWTkxaGYw?= =?utf-8?B?Yk5TVFh2RkRNSDB5U0kzUjZRdWNDcStoaUdVeURwRFdiUHBQZWNCbFY4QjBT?= =?utf-8?B?YVJXR0Y3L280Rzd4SEZUdm5Da080SUNNdCtiQ0htYWRpbytPN1hsR1RmVzNQ?= =?utf-8?B?dG1UdUZjWkQ5N1RkQjdMOFhXVzFxeWorWlBnS3hiS2toRDVTbmJoZzVPQmIv?= =?utf-8?B?WjNjVURhdGtmbmY5SHlRV0RNYlcrTzA0aEdhU0xYMCticUpldXJodGNXNW5z?= =?utf-8?B?T2trZGxwUHJUMWJ0ZWliYmxsYTl4N0JyaFVzZFZNT3ZRL1BiMkQrZU1LVlFP?= =?utf-8?B?LzFkWFFiVUpYNTFJZE1pN3FDVkxsY2ZzUkEvUkloU3FMOEFYU2UwSDRWb2xj?= =?utf-8?B?MHNCVjRKRXNFWGY4UGQ3U0xVWUFXY3BmeW8vTG9uWnBwSVBWTWUrRjcwVkkr?= =?utf-8?B?Wmo4UlMxbXpDQ2xCRkFZUEsyeis4bm1PY2JLNTFTUStzay9ZQVdDaFp0azBj?= =?utf-8?B?K2FQTzRVMzJvNzJaSVgyaXR1RzN6aGQ4STVpMklNb2VhMlFla1BRbysxQitK?= =?utf-8?B?RkVGWlRabmVXczVqR2RXUlljUk9NMmZlKzhuOVJaSDZFNCtsbElNbCtMWVdj?= =?utf-8?B?d2dEREp3U1FjQ002dzJ1YkhwOW01bHo2U2M4SlUwY2x0N05USTJwTVg0dnFj?= =?utf-8?B?YU5FQ3dEQWkrdU5CRVlnUGtHZEM2cksza2wxaHNvUmhzUGwzWG4vTzVzc0Vz?= =?utf-8?B?S1hsQ1pYeDB4YTk4TlF3cW9ldTlSTnRTTUFsdzZJSDhCdEsyMm1TTElUc0VV?= =?utf-8?B?ZkIzVmJBT0hhSTdOQnhzekFzRVA3Y0dqbzljZW5hSGhiSnU3NjU4NnBnVnVL?= =?utf-8?B?U1FaRk40T3dndy9keEM3akNtV3V6ZmZDUjlwSjlGdDZkMG9qVVBibWNEUlUv?= =?utf-8?B?OWFFN1hPUnRIbjBMSDRNem8wbVhFR1JOYXhmMW5pNzVVNHh4Vk1lRmhxNThM?= =?utf-8?B?M0R0MWxQNmx4OWRJRWtyVmJud1JUOEpFYkZsR2lUTjF2QVBaS01PR0ZsZ1R1?= =?utf-8?B?SEJPNTQxRVY5V3pFUlBoRTdvRC93V3NCYTl0QUtEWWNrWEpmYmpnQmMwWUNs?= =?utf-8?B?ZG50ZUY3MnFVSnFOb1lRU1lJVHpQTTFEWS81NWpZU1BhN2ZURlFaN25nS2FG?= =?utf-8?B?eW11MTN1bXJCczRVbzM1T1ZLcno1L3gwSXJZNlV3NGNZanNUOFlqQjloMmRF?= =?utf-8?B?bWloZFhBYXFDOStJeE9rV1Z1YmR3bi9mNE83KzFnRkZFUmRMcEkwV2ViWTlo?= =?utf-8?B?eHdJRFhaZXA0VjRjWEpGMkpTM1NEbjhHbVJGVVNvdW5URjkvczc3S3U2a3Jn?= =?utf-8?B?dFQ2S2NXbFF2eUZyWmZXbXV1N1RXVm9HQjQyUlpUR3ZuNjh5QWxuYlpkRGQ4?= =?utf-8?B?bktUbDYwYnMwMmlvVHowc21hd1kwRGFDNC9LRWF6dm5FL1o0WVJyM2JlU3pG?= =?utf-8?B?ZGE1em5rdW53SWdPWGZRQ1BFbU9RK3VCWk1TQ0pmL3BqcUpUYmp2OGtCaFhh?= =?utf-8?B?WGMxWm92QkR0U0g2S0hSeForMStzV0lFSDFvUVk2WCtpd2lEN0NIdjRWckw3?= =?utf-8?B?elNNbzdjNjc4MkxSbHVRbE5qZ1BwR3I3ZTF5UGtXU25iVWJTd2Zwb2dWN3k5?= =?utf-8?B?US9oa242QmRnR0RjS0dQb3doVlY3MmtQYVhzUVo0Q2dTa0dXdkNqdG1RTXM1?= =?utf-8?B?M3QrcWNDZjZqY1pvUkZKajJ3TGRaWEI0M2tOd0tHTkpaTUVSaHo1eWtKVnQ5?= =?utf-8?B?bVkyUnQyUFlwQ0hpYkxnVFoyd2FJMzRGWnIreEtNTWZVMzRYRW16K3ZSU3V4?= =?utf-8?B?RkZYbzllaFdPNVFRNE5iZVU5Mjl4enFEY2xqd1RNMUx5U3c4Ym5vV1Q1VDRw?= =?utf-8?B?ZE93Q3NOdGV3WE5HR2RqVTRFSU1lQmxsQzZncjBsQ3M1SERWZ05RTlhUWWpp?= =?utf-8?B?YmlDcHpKdXZRaWpwZWJacWR5QUdwMHVpUEVIRHBvQUpGK2lmL09sOTNxdFFq?= =?utf-8?B?T3kxTmhWK1BMeVlVdUtlOUNlMEx2c2VSWWJLTlFrMHZoTTIwSFhCRVRmU1Mw?= =?utf-8?B?S2RIbjNvN3VEOEtZeFpZNnRkajhITTRNaXBuSU5uYmNDamYvcm1TY0JIbjd4?= =?utf-8?Q?0xsYhO1+BHeUYIKpEUWkqSA929XwZ7L6O5Csncqj+N/Vu?= X-MS-Exchange-AntiSpam-MessageData-1: jMNp+OV9H7mDoA== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: f834371b-76e1-4f8a-357a-08de6232f5f2 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 08:13:35.1868 (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: 1DBi4Xxg4NvgFFSPqYgd+7+lJ9CiaEKIdftiHJ7E/O5QMKikjSB/UhroRFUMFdqpnYS3mpRUgCpmpfn6ubFcIA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB6416 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. Signed-off-by: Alexandre Courbot Acked-by: Alice Ryhl Reviewed-by: Daniel Almeida --- 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 e1094a237ff7..0e8031dfe0f0 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.52.0 From nobody Sat Feb 7 15:22:30 2026 Received: from BL0PR03CU003.outbound.protection.outlook.com (mail-eastusazon11012024.outbound.protection.outlook.com [52.101.53.24]) (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 95F4D33066F; Mon, 2 Feb 2026 08:14:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.101.53.24 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770020057; cv=fail; b=C8ag4bGK6M6vAcwLSxoYaIg0MM9F2hM8A62GEY6P9YRLV15Nl3DyHC5w7etTS/M/x++92jukV6v1UNIlcWCpjeOefgL9lu0SYN9mnQbUJ+Oc9JB5CtT6qPV9+fhd2VnKgHpaqi6HpWJEnUAF8RMf3zONWqCYYLAD3KDZwTfq7ro= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1770020057; c=relaxed/simple; bh=ALctEAGMWAMfoMQqbv3SyfQ6/lTVmb45RlpNEqscN94=; h=From:Date:Subject:Content-Type:Message-Id:References:In-Reply-To: To:Cc:MIME-Version; b=TtrZc9Vq/KSlXJO2dw2k9J58tdzjivPLBy7dk3tIwem9h00rOHZB9R0Y9r/jC28bhp2+sEfjDuaeg2vXOyf2eM8VKqHVS3zU2uHyPXhtR5usDpfSnOwwKNwSYBzqhE8IupDXg4xuEtQZC2tSUiCrUsaPNEbIkygR4cR5JoeZNYY= 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=YVbczKP8; arc=fail smtp.client-ip=52.101.53.24 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="YVbczKP8" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=OHkvQW9lMn1C+fjwSTMeM6hzM+VpAwYZlwp21qMnF2DYQXJVJyoxl5f9lA2y0uLCgTW5yXLDVeY0ivZlR8jQy5OmRUJ/E3+IAlTR3akVgmNmAFk28Um5Mi3SXhkPntcwSG9QVLr2KMA2k1koF5UZHoy0Ij+l4+KzrkHt6axXGSQjlrXufdBSwjLHPcaDa/OJINi+sHBNMhORdPWRh428qq1dCYX/SqeePcGFH1rkNQ20rdQ8EO2TPTcjJmvnly2qW/iFtqOJNnS2KYArGF0UaL82IiNJ7qLO85/A+rjopcUNyy58MTYIlDmr411bYhSETjsJAIa0DvaEnHM6n07C1A== 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=Hpxs4gBEnYgAXmzh3SJZ9Wtg/IzKVzoK7Zrfzhv/mTo=; b=YurBiS8tcUAR7VONhb3N+vwsxQJy6scGw/M+zxjQcjccDdH/i0PmklZ9WCJW+IcTxQaAN1WDc3KzyqOUGukxbTpDtL/xy4aPuPwTHMzi68zZbpfhz6xORjuYfzVYG7mWzPVPWvHvYiAsM0ecV6HXJpVVKr1dGbSrZwTVZGaCV++sFVnXyganVayeN/bilH3HJbku8xaiQqyH/Vr/yrAuIx2yyqwrNN0F25QaOxxI9bkZbBA8YkREs4kgSj68XnFwdbd9g+F+HiioM2UaW0fzna9ijA+Xn9RVjYfxgrU9LXoaoasczDd38NZn8KUbRIS7QC4UQ2mVZjsTr0cFaJT7og== 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=Hpxs4gBEnYgAXmzh3SJZ9Wtg/IzKVzoK7Zrfzhv/mTo=; b=YVbczKP8929ciPco6o3YYOzQ717KzFLtYWD+zHZK8NsBQqsPxjutqTErGSTHdZtxXhWMwNEqyqVayM175FMB5mf8fDrHNolBm3eFp6Z86Zq7bthd5DTewtNGxMc5FWUFzXAZ9VwbTpDaicDw2mVVZ9kOI5KQmb7Gcl3VMs5tS5JU050EpEBCLn8ieRsj2gWSStJImeyDsblYI+6h1ilOotub5mghpv8WhjX5/um/5txx8duj7Tr9a734i7gUqcS27FP+Sv5Z/gH+5gPX/Rv9nSJ/7gng3TxW8MTMgLjw7QJ2p9GEjLT2UtYSsirZnjhYuVVKYfILKj6B/gGVxQcjUw== 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 DS0PR12MB6416.namprd12.prod.outlook.com (2603:10b6:8:cb::6) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9564.16; Mon, 2 Feb 2026 08:13:39 +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.9564.016; Mon, 2 Feb 2026 08:13:39 +0000 From: Alexandre Courbot Date: Mon, 02 Feb 2026 17:13:05 +0900 Subject: [PATCH 6/6] rust: io: remove overloaded Io methods of Mmio Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260202-io-v1-6-9bb2177d23be@nvidia.com> References: <20260202-io-v1-0-9bb2177d23be@nvidia.com> In-Reply-To: <20260202-io-v1-0-9bb2177d23be@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: TYCP286CA0286.JPNP286.PROD.OUTLOOK.COM (2603:1096:400:3c8::18) 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_|DS0PR12MB6416:EE_ X-MS-Office365-Filtering-Correlation-Id: 0b669a49-aa53-4107-bde1-08de6232f886 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|7416014|376014|1800799024|366016|921020; X-Microsoft-Antispam-Message-Info: =?utf-8?B?Q21CbERtaktSbVU1V0h1eEJhSGwySXJSYzZlZEF6a3BYdjltZk1SY2wvYm4v?= =?utf-8?B?cVdwbnUzNXFYUU5Va3k0dDNUKzlHSFlWWmVjQ2o3TmdZbHd5TmJ2d1BCV09n?= =?utf-8?B?YTNFOEtnU25pMGZNbEt3WTRBQVd0aFpOR2RraDU5WHd5MEY1YnRqa3ZlZUVK?= =?utf-8?B?NEFzOGF5T3dURzdZTEQrUGVVdm84ai9FQmwwbjdHQmxPUFZFZnhMdEtZTmpN?= =?utf-8?B?dHRsc05PZXFYNkpabDJTQmpTMlhPM2dsV2JaR3VFS2tmVW15MWw3QmZZaWN1?= =?utf-8?B?VERxVWl6VDlpMm1xQlV0ZitUSU1MK2FqQS9JbG9QOTVjUzhkVzd0Y1QxdEdT?= =?utf-8?B?bkxOeHJIVzAzMmx2Q1krV0RlSHFwdUs4NldZdTZyMVVybnVkdEJFV1FuOE80?= =?utf-8?B?VWlkdXFDVDZOOGIybVhuSTR1eVpqL3dsWlI2RE9HQmIwbk8rWjZVcWVBRlVG?= =?utf-8?B?SHlXMFFlTDE5NFBjQWRuSkx5SzkxTGtrWSs0NjkvM2tOQXdORTFHM0RWcndB?= =?utf-8?B?ZXNNRFV3N3RTdnpaUUxyN1hPOEExdWJEaXBaWEVIWTJRSVhRTlE3dWgwUHFV?= =?utf-8?B?dmo0TVlRMEYwb3U4eGFZY1hLL0daZHl6dHN4WWVDd29kS1FjNmowYkNjb1RH?= =?utf-8?B?eGkzZlF6MTFqYVdOcTlGbXRMZFJselJRdEIrdjhkRDYzUUU0YmZUU3pOcjdn?= =?utf-8?B?T3hmY3NqbTRuTVhQR21CQTRpZ0lKUFRFT3hqYnRxc2ZmVHkrbE9hQkxzeE5E?= =?utf-8?B?WmRoV3RGVGZvK3FBa1FEUklnaDBIT09KUlgvK3JWTEJwU0VVam5LUmtvYzZS?= =?utf-8?B?ZDZsL3M0RVZmV3crN05CR2ZpVUtadE5ZelQ2ZHJuOU9YUEgrOGxaVUNUdmhJ?= =?utf-8?B?QUlIN283dE14a1E5anpOVTl4QUFCcTlpZi9xaVdQK1Nla1FacmRsNmRZQzJW?= =?utf-8?B?cUJyNUtCQ0p4cjJZU2hIN1U0OHFQdnQxMHJiQnB2dUMzMUVPbDV6ZG5NVEtu?= =?utf-8?B?ZFB4Y05rSDNJL2NTMDcrY0RzYUxvaFRjU3BpbnhpaFZ3YWg2Mi9JNUN5YlVm?= =?utf-8?B?SnUzcGg5dEZTUzFCZHhVNXl0WExGNFVPUUlzNmlVZDV4ME0xK1JrZ3g3T3U3?= =?utf-8?B?NUw0STd5bERqdnV2MFBXQytNOHU4MmxPLzYxd2xWUnMyek9ucDlnYWl6MDN3?= =?utf-8?B?cERWU0dyN0dzMjdaclZyNEZQR3VIOEdwUXc3eEJsV0tGSUhrZnlsaXdmWDNS?= =?utf-8?B?STM4S2xQQkk2V3F1Tm83YVpROWc2R256MnF5TWUwQTVPQlkyWUNXa2xlYjlI?= =?utf-8?B?Um9QenBrUnFTYWxlNGRpTmphWG5EN3pWcWlBbFJpZ3lJMjdhWFpsOGRLR1FB?= =?utf-8?B?MWlxNHc0TXE1OWFyOGlPRlRUQUFFYUFudDcvV1diOEdHZ3BFNWtVREljRHRQ?= =?utf-8?B?NVdRazdwMmkwaElkTjJQRVdqcENzU2ZRMC96N0JEWGJFUDVWZFZhNjlVbkZY?= =?utf-8?B?ZFpzTUJlVDNyZ3ZHWW5iNU5jWm1PeFFGMzh0dzlhUThMN3RWcUJzbFl5dVYz?= =?utf-8?B?RmlGRmtScnhyK2U4MlQxV2VqdkM2d1JEYWJUTGJObDBOeGIzdFg3eEZTRVpG?= =?utf-8?B?N0Y2VnJoRXlGekoxY3NJbS8xWHVEdzFjMUlmR21mamtMVTlZcG1NdmtCbVp3?= =?utf-8?B?QlZQR0pWaTZQY3NmaG55SjQvSk96aEVHR2ZnM2xJMEJTNytZRi9DeGhJV3lw?= =?utf-8?B?cEppUVVZcmU3NjVCY21OZnBqY1M4cXprQ0laSDNOVEZ0QkV4MVBSeTNrL25w?= =?utf-8?B?MzNlWlVVRFpRSUZ0dUs0WTAwQkFCdWlNUGdKbHRueHpYUklkNkl4aWtnUW01?= =?utf-8?B?b3Rla1ozTzRTeFNJSVdvY1N2ZG4yOEVOYzlWTXp0MS85SmpCRUJBZnFlZVdQ?= =?utf-8?B?ZGp5dlZlM3d1RHdqKy9MRzZtMnJ5Ui9La1JPUXAvbVRpQUFZZlJqY0NFajlL?= =?utf-8?B?dzIwVWlzRFBMQUtqdnI1V1YwTUpwanEwRnREUHdvQUtnM1hMZlNHVjBmVnpN?= =?utf-8?B?NThlMGJOM28xR3JuS1NYMm8yRittQ0RqNU0xcFVLcCtqUE5ZMXpCTDYyQURr?= =?utf-8?B?RUc3MHZYTExESzBHamFvUnhadlMxZ3phUmJXTlNjNnVNSW5OeHgrVUZDOHEr?= =?utf-8?B?R2c9PQ==?= 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)(7416014)(376014)(1800799024)(366016)(921020);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 2 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?B?eFB1MXNocnVXd2VMZlRzUk1ZdXZpUWtlcEw5S2FaNzFSeGMwYzAyQ2RaRDJp?= =?utf-8?B?aFBySlBtQWowd0dpQzRmMTJXc282NDBHb3RKSVdHbms4Y3hDUWEyOUJwQUxY?= =?utf-8?B?dXYzVVRZWTFpa0hJTmU1ZVJySDNVdFNTZ0pkZDcxVG5JT3RnQU4xUENwc2hw?= =?utf-8?B?bEpGTGZNcEpNRFhxMzFBNHp1K1lGRVlZOUxJYmNpVmd4cjJnTUREeDk2RXla?= =?utf-8?B?RTlPbEY5SUhZbnNZUG1ZTTFYeldJTllpM28yZUxBU2djS0t6dlI5NkliRGxx?= =?utf-8?B?SlczaUEvNC9LZ1A0c1ZISlN2MUw0ZzlpTUNSckVZOEk3eXNFQmJuYm5yc2xz?= =?utf-8?B?bkhZSEpuWVJSaTFxWVRsTG5SMGdBU0FMK01vTElTc24wU0NjNEhScFZKVDBJ?= =?utf-8?B?UHZpWEI5aDJWekJUM3VYQ1FpcDdNdms1aHpEd0ZIRHhyMW1VbStKeEJLTkw5?= =?utf-8?B?UGZpQXZoKzdra2xaK3llc1pPY3Y3dGF5MU0xYXV6M2VzbTBCZTNCQUdoNjV4?= =?utf-8?B?cnB6OFA0OTNLekdSaEgzdzg2TVJ0ME5ZSlRKa1NRZG5CMXVVVzNFa0piaFpI?= =?utf-8?B?MklXVEwrRzYzTTR6VFB2dG5jV0JvZ1MvRFIxUVd1ZmlVRUlBV3NKQWFGWkpt?= =?utf-8?B?SGJYcVhwQXlNQXZjQXNkdEszWjdqVTRRUXA4QWJNL0tHUnBwZGowc3Z1MnJU?= =?utf-8?B?ZFlLWnBiVWJkaXB5NTJYYzU0VUFJZ3pzRUxRRzlBWUNpUjd1RTZSRFd3K00w?= =?utf-8?B?ZFZGdkJmOFI5WG5zWkRPK1R6anRMdjYxYUwxNS9FT1d4TGNHdTA2d2pseGhO?= =?utf-8?B?Z0JCUFZaY1RiQ1l5SVdiRU5aMjEwVkQraWlueVlQQjFscU9MNlZjYS9lSjl6?= =?utf-8?B?ck40aXcwc0ZnaGRpMUdvOGJJY2NTUXFBVkVRRUQwTDRESG1hMWdoK2VjY1Q2?= =?utf-8?B?QTV0N1FxWGJXVWhUM0tSd1liZTFQdC9SejdKQ29NU2xieWUvZU1vUFp0Tm5D?= =?utf-8?B?Znd1Z25VbFlRWFRYUy85VUZJdWNncGlpcE5TeWFxTjcvU2RmL3o5N2x5SlF4?= =?utf-8?B?Z1NxM1N4RDNHeHdGTGkvMW8wUjZ0eUQ4S1I5U1BEM2F4dklyOWxnWWVOdktY?= =?utf-8?B?NGVYU1pqaW45OEJvZzZja3l3cXFnVWlpSExyRnJzcmplMmsrUGlGb1N1L3lj?= =?utf-8?B?ditsaDVmdTFWK0ZDcDFyd3Bqb0p6bitKMEFGdEltZDNmUzFIWCs4OTFzN3g0?= =?utf-8?B?RWU0d3A2WDVJK0E4eDhuS3J1TlZiQ3pqT1NXNXVqaWU5K09KTzhCVzZjSitY?= =?utf-8?B?aDJNRWwzWlFlSXFyOVdVTGNjV1YrQlhRVFRwWXFkaFdEbGZhT0VScGwyaXVt?= =?utf-8?B?RDk0SEZPclFCMHFpU2hxNjUwSlc2Q2Z6WWpDbThSZm9lTVVRTWdYallJQnhk?= =?utf-8?B?NUJHYVpaK0hWRzFJekd0UEx3dERMaGhUNzV6M090ZkF6NzRyMmNJYUhLYlNz?= =?utf-8?B?ZkxZeU1kSW5ROTJmbW00cWp6YjlpQmh6Z1lLSlhQUGpCUE05NjRURTlGVTB4?= =?utf-8?B?aTJMVEY0UTBBOVdWV0VVRlphNWlBN3RQSCtTV1ZUSHJPayt3UHZnQTVISjBj?= =?utf-8?B?c0VEeDJVRS8ySzhrQitJS3JrdW53N3BpbDQvT1c4aVRBZDdtZ1lIM0R6YUNY?= =?utf-8?B?UG43Nk5pTW5idWdjQ1RYNHBkd1BWaWVhZ0k3Wlk3VmdMMENBeTBRU1BWK25w?= =?utf-8?B?Sld3NnBkNHNtZHhTb213ckxTZDNxVmFZK3Z6ZlRQbFhxeVJlWGJsTlU2YlBu?= =?utf-8?B?V0JoQlpDODVXUG42QmV0YWt1eWZETGFSNlNZSzM4ZUxZeVJvaURvS2RiczM4?= =?utf-8?B?R1NnOHFPZnFYRnVyYWttMVkxWWFRZDdoVXU0Y21QU3FnQm1ENmcvT3JmYmNY?= =?utf-8?B?OTZFMkgweGJkQ1JpakQ1TzJodFVybGxvV01zMlJXSDBRS0pBdjNyNkVrcDRm?= =?utf-8?B?L2hvTmx3aXhvWWR1Vm80Sng0L1hoa0pPVHZvVjFKT3lNbEZwWmlRUGRiR2Vm?= =?utf-8?B?anI5R1g2M2FpdjVKRmxxTHFORk9SSVRISzVjdXFpOTUwTUl0UnpmaWN0ampi?= =?utf-8?B?TjgrVURuRGV0RDFiTjdVUlJ1R2VPSzJvaGlENEtJY3ZUdnJOdi8xNXJqcW5i?= =?utf-8?B?VXFyK3NvRzFBSmpCSDRVUThmcTFqV0x4b252aUtuckFua3lENkxWMEordm9k?= =?utf-8?B?TUljZmQwTXVmNWloY3FqK2ZEa3krRTIyTXpISUR5MkxORHBHNnI4Q1EyeHo1?= =?utf-8?B?S0dIb3BJNG5aaGs0OW9YMml0c0VJK2ZwUVZqeTFadnFadjU5bjUvaHE5aFdM?= =?utf-8?Q?svakHly2iz4c1dIe56zeppzdsoOW9f+My7pBYAcseEQBk?= X-MS-Exchange-AntiSpam-MessageData-1: RU5S+VJdZl4PDw== X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0b669a49-aa53-4107-bde1-08de6232f886 X-MS-Exchange-CrossTenant-AuthSource: CH2PR12MB3990.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 02 Feb 2026 08:13:39.2074 (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: vpqcyF1yVOiXpxHtgou8+BX/Y5Su3ml+aj13QkXygCtxe4KrH9MqEe6T3pv2AUzpXk3jrZ7cSGfCnVl4sijuqg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS0PR12MB6416 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. Signed-off-by: Alexandre Courbot Acked-by: Alice Ryhl Reviewed-by: Daniel Almeida --- rust/kernel/io.rs | 161 --------------------------------------------------= ---- 1 file changed, 161 deletions(-) diff --git a/rust/kernel/io.rs b/rust/kernel/io.rs index 0e8031dfe0f0..d2e498c9a0d5 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] @@ -600,46 +479,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.52.0