{"id":2225775,"url":"http://patchwork.ozlabs.org/api/covers/2225775/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-pci/cover/20260421-io_projection-v2-0-4c251c692ef4@garyguo.net/","project":{"id":28,"url":"http://patchwork.ozlabs.org/api/projects/28/?format=json","name":"Linux PCI development","link_name":"linux-pci","list_id":"linux-pci.vger.kernel.org","list_email":"linux-pci@vger.kernel.org","web_url":null,"scm_url":null,"webscm_url":null,"list_archive_url":"","list_archive_url_format":"","commit_url_format":""},"msgid":"<20260421-io_projection-v2-0-4c251c692ef4@garyguo.net>","list_archive_url":null,"date":"2026-04-21T14:56:11","name":"[v2,00/11] rust: I/O type generalization and projection","submitter":{"id":76823,"url":"http://patchwork.ozlabs.org/api/people/76823/?format=json","name":"Gary Guo","email":"gary@garyguo.net"},"mbox":"http://patchwork.ozlabs.org/project/linux-pci/cover/20260421-io_projection-v2-0-4c251c692ef4@garyguo.net/mbox/","series":[{"id":500833,"url":"http://patchwork.ozlabs.org/api/series/500833/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-pci/list/?series=500833","date":"2026-04-21T14:56:19","name":"rust: I/O type generalization and projection","version":2,"mbox":"http://patchwork.ozlabs.org/series/500833/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/covers/2225775/comments/","headers":{"Return-Path":"\n <linux-pci+bounces-52839-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-pci@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (1024-bit key;\n unprotected) header.d=garyguo.net header.i=@garyguo.net header.a=rsa-sha256\n header.s=selector1 header.b=ifqdLYA2;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=172.234.253.10; helo=sea.lore.kernel.org;\n envelope-from=linux-pci+bounces-52839-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (1024-bit key) header.d=garyguo.net header.i=@garyguo.net\n header.b=\"ifqdLYA2\"","smtp.subspace.kernel.org;\n arc=fail smtp.client-ip=52.101.195.111","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=garyguo.net","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=garyguo.net","dkim=none (message not signed)\n header.d=none;dmarc=none action=none header.from=garyguo.net;"],"Received":["from sea.lore.kernel.org (sea.lore.kernel.org [172.234.253.10])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g0QbQ5825z1yGt\n\tfor <incoming@patchwork.ozlabs.org>; Wed, 22 Apr 2026 01:03:30 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sea.lore.kernel.org (Postfix) with ESMTP id 12F4030AE629\n\tfor <incoming@patchwork.ozlabs.org>; Tue, 21 Apr 2026 14:56:38 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id ADAE13D8917;\n\tTue, 21 Apr 2026 14:56:34 +0000 (UTC)","from CWXP265CU008.outbound.protection.outlook.com\n (mail-ukwestazon11020111.outbound.protection.outlook.com [52.101.195.111])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id 1FFAC30E0E5;\n\tTue, 21 Apr 2026 14:56:30 +0000 (UTC)","from LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:488::16)\n by CWXP265MB3558.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:fc::7) with\n Microsoft SMTP Server (version=TLS1_2,\n cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9818.33; Tue, 21 Apr\n 2026 14:56:27 +0000","from LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM\n ([fe80::1c3:ceba:21b4:9986]) by LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM\n ([fe80::1c3:ceba:21b4:9986%4]) with mapi id 15.20.9846.016; Tue, 21 Apr 2026\n 14:56:27 +0000"],"ARC-Seal":["i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1776783394; cv=fail;\n b=iV8gRLb/hmlQIROHX5AkcvjBdbbab/M0yFs7z+HowajUys0CB0vX3BWC45dCKMrtDXF3d+nLGGc2xC5MgEW4vmfCuD/pFog+t18ZxrgH0XZTYjeNEOi6ZIXnR9uXzXG0mKDUq6Km5xo0GsaoigAGEUD/lltybreQT9IisQH/qgA=","i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none;\n b=lRvvcmx5FJ18V4p+GoXb0zltNWEslJJhWE+T/h2jlAY7Pp57RjEvCZKGa7Ds5LTmsmf2X3NN4g+AptTVUnIMJLycnN4ee4hqk01EbUjmny4IfQHG8cVD9Ueis43C3CijUVAH/MGN9azgOIcEs+rWVbBLu+Hdyj0mbzIDaZK3NM86chzk4ZCtzhn6VlISJCsnDBOnEgSQatxVnuXFtLbZA/7r5OPrReKWer+GTDFVG4g1bHlEaL5C5z/W4JZv7HnQ4frknSMfUawFQLya5zBQbXOzshgM1Km7LYelAdTuWxu7vdl0kOxo1xBjyjQa8NDLNeuJt2pio9zyQEz+xQSIeA=="],"ARC-Message-Signature":["i=2; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1776783394; c=relaxed/simple;\n\tbh=Sx5ASB/s1JTnFW22MELsFVBJd+afu94iWVkqh0/qKrM=;\n\th=From:Subject:Date:Message-Id:Content-Type:To:Cc:MIME-Version;\n b=HjKhufqJohWiGv+xkZFA4nU+fsRKccxbxkSodk1MFMoggiPDRwdhHUWUGdhOGXUFIi79LDONvyMlD89HrMcQrz6y8n5nXhkWXIhxUzaEFQ2XheI/Fm6gmRL56eR4TigWvGmTgwnJnv258uyQzYIZTLFmr0Sez2mCBe2x8wJzS8Q=","i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com;\n s=arcselector10001;\n 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;\n bh=lCfV2+t++hO2k8Fn1VZHy6caeMFxqr4HNYPKk7oJ1Ak=;\n b=r2cub9jGPkP92rTTzLxhIL4lx7Btl0rEDul6hBKZi1jHobZeKzrzPx/Pd2r+Yc/X67O0YZBBpQZCooWoCWgpTYGMNehNTKzoIgV3ey7IoD5Imls7u2xJqB+nH9Tnx1aC+B8gdVszyA7ClDEoW/DXu9XFLi1Nejrx1nwq2pyCvsCrrg4xSs/fAlMxD1FxzJAzTlCfKN+sCBa2UTe39PIK2NslBnRKTZzp2zdPp84kiju5CaqwUL5d8isFHNnIT5INmEjle+hrherOUdU+/GZwybqTiior71kZ0XnqCnb1LqY2V3mY5jXSq3VlrW+L+5WgFjG08SkhkWIbKAA7Bs5N9A=="],"ARC-Authentication-Results":["i=2; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=garyguo.net;\n spf=pass smtp.mailfrom=garyguo.net;\n dkim=pass (1024-bit key) header.d=garyguo.net header.i=@garyguo.net\n header.b=ifqdLYA2; arc=fail smtp.client-ip=52.101.195.111","i=1; mx.microsoft.com 1; spf=pass\n smtp.mailfrom=garyguo.net; dmarc=pass action=none header.from=garyguo.net;\n dkim=pass header.d=garyguo.net; arc=none"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=garyguo.net;\n s=selector1;\n h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck;\n bh=lCfV2+t++hO2k8Fn1VZHy6caeMFxqr4HNYPKk7oJ1Ak=;\n b=ifqdLYA25e5BOHiIzCFeTQKbPSqgJGMInsU4qRqxGD0ofUsUxQYu6cWKzamoBNOi69OqGEYO16J20dkiDbOLe1Qf/DcZm7uN1lmRKcTahKvfoeTZFlB4+JpQEKxhwUaDTzaNY975Nwdc/iUPbVlJGBvssa3nVcULUKU4qcU9Iak=","From":"Gary Guo <gary@garyguo.net>","Subject":"[PATCH v2 00/11] rust: I/O type generalization and projection","Date":"Tue, 21 Apr 2026 15:56:11 +0100","Message-Id":"<20260421-io_projection-v2-0-4c251c692ef4@garyguo.net>","Content-Type":"text/plain; charset=\"utf-8\"","Content-Transfer-Encoding":"7bit","X-B4-Tracking":"v=1; b=H4sIAAuQ52kC/02O7w6CIBRHX8XxubsBiS5fpbkGeCtqggGazfnu4\n Z+tPv62c8+5EwnoDQZSZRPxOJhgnE2DHzKi79LeEEyTNuGUFzTnDIy7dN49UMdEAiuwbLRQssS\n cpJvO49WMq+9cbzv0aqEXyU54fPUpFDfs10nZtcIE/CXCx0Y5gse3809Q5YnKIxVKC14NbDEqG\n RC0a1sTq8ziGGF/lpJ6nr/IBvSO4gAAAA==","X-Change-ID":"20260421-io_projection-16e7dc5ba7e4","To":"Greg Kroah-Hartman <gregkh@linuxfoundation.org>,\n  \"Rafael J. Wysocki\" <rafael@kernel.org>, Danilo Krummrich <dakr@kernel.org>,\n  Miguel Ojeda <ojeda@kernel.org>, Boqun Feng <boqun@kernel.org>,\n  Gary Guo <gary@garyguo.net>,\n =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= <bjorn3_gh@protonmail.com>,\n  Benno Lossin <lossin@kernel.org>, Andreas Hindborg <a.hindborg@kernel.org>,\n  Alice Ryhl <aliceryhl@google.com>, Trevor Gross <tmgross@umich.edu>,\n  Daniel Almeida <daniel.almeida@collabora.com>,\n  Bjorn Helgaas <bhelgaas@google.com>,\n =?utf-8?q?Krzysztof_Wilczy=C5=84ski?= <kwilczynski@kernel.org>,\n  Abdiel Janulgue <abdiel.janulgue@gmail.com>,\n  Robin Murphy <robin.murphy@arm.com>,\n  Alexandre Courbot <acourbot@nvidia.com>, David Airlie <airlied@gmail.com>,\n  Simona Vetter <simona@ffwll.ch>","Cc":"driver-core@lists.linux.dev, rust-for-linux@vger.kernel.org,\n linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org,\n nouveau@lists.freedesktop.org, dri-devel@lists.freedesktop.org","X-Mailer":"b4 0.15.1","X-Developer-Signature":"v=1; a=ed25519-sha256; t=1776783386; l=4249;\n i=gary@garyguo.net; s=20221204; h=from:subject:message-id;\n bh=Sx5ASB/s1JTnFW22MELsFVBJd+afu94iWVkqh0/qKrM=;\n b=+bzmrS9xdeeVnlweBLz6DjizV9+0yqELImt2Wk5nGlB/UwGdGcTI5ZmsCSVCDI0H41z9VpaGl\n f/2DvECszc6Do+dFcTeCio+PotO4ReIoQAXeR0Xfu8SdjXkbZsR9kD7","X-Developer-Key":"i=gary@garyguo.net; a=ed25519;\n pk=vB3uIX95SM4eVrIqo1DWNWKDKD2xzB+yLLLr0yOPYMo=","X-ClientProxiedBy":"LO4P123CA0142.GBRP123.PROD.OUTLOOK.COM\n (2603:10a6:600:193::21) To LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM\n (2603:10a6:600:488::16)","Precedence":"bulk","X-Mailing-List":"linux-pci@vger.kernel.org","List-Id":"<linux-pci.vger.kernel.org>","List-Subscribe":"<mailto:linux-pci+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-pci+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","X-MS-PublicTrafficType":"Email","X-MS-TrafficTypeDiagnostic":"LOVP265MB8871:EE_|CWXP265MB3558:EE_","X-MS-Office365-Filtering-Correlation-Id":"b05d3aa6-a5bc-4484-ef93-08de9fb629e6","X-MS-Exchange-SenderADCheck":"1","X-MS-Exchange-AntiSpam-Relay":"0","X-Microsoft-Antispam":"\n\tBCL:0;ARA:13230040|376014|7416014|10070799003|366016|1800799024|921020|56012099003|18002099003;","X-Microsoft-Antispam-Message-Info":"\n\t9uXyyxKup4sRzKADW2cCUsRUn+x8hiX8Bkzog2SmEQYyoMz4QzUV6y5HQoBd7cOx95ZS2JOopWfBSf2gWrgDjouNZJOkQERGFAjp7fK5BFBgadVuCeCbS8jqX1hHkxPLMy1spwM9hEkh+BFX6F4USq854eUMnV5zWi0nCGnAej3PS0DVMAa49rCF7Y9QgC3QRUgFnvNc6HUQ80aAYV/YhCt6HuMZ57AG9q9LvNoq+IHgu4FAKJv/GvhXJ7tGxhZTihVnIItXMp7rehURKkVS+QypLdLSZk/9dKmPMlAk7823i0AKLNUWoQP2x8n0ooNeEXzSgt51NWvXT21KzAuQ2HidUaIxGm5E1qIwv7OcXMaOx3Cxy5BKAzUmQO43qE6hiNSfS5rPoQdY3rRNAuIvG/yLkR9tonY17C6It4wWqBfoDqOcEfmipdJM+zAt9paqxukJ8ZW2Za2ZVeG6XBg114VjwkEcSEVeQeSnQxKCHoWQHnC7wm1PZDHdhGa9zMCrcmLcVvUETkS5Va015FDx0qjg+E5ee/p3McP7Epwjnfzja3yXNFZuAAylsgg1cRuIa9Hzsf7jHPYI6yShJMt14lohYryGna7gJsFkT++ivGhZVnIXJ+Kem6JNFV/Z8IxMrTjCZ8tF3DosrXMGc+ZaPnMWWpDB0c/BPkupcP2qxTcw+Z/ksiJooNe/m0ujWz8loIYzXxpCdaSaZi6Mgw1UtwwmFZLdz823C5INPz92FYw=","X-Forefront-Antispam-Report":"\n\tCIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(7416014)(10070799003)(366016)(1800799024)(921020)(56012099003)(18002099003);DIR:OUT;SFP:1102;","X-MS-Exchange-AntiSpam-MessageData-ChunkCount":"1","X-MS-Exchange-AntiSpam-MessageData-0":"=?utf-8?q?EXPeR3E6SNkhgvXNNnBh0jeb1DtJ?=\n\t=?utf-8?q?723LBSTz7LYbFm3L8cKS0SbG2zHYgLIxrkuZoKKcprIGiNDEp2bNpY7ZzAeMv//Dv?=\n\t=?utf-8?q?130+t6DtXoqf+IAJJDLpm+Nu+bZ90Pq1jv3q/qgjtUx3FhAVBhgJgRqTPim4owmWw?=\n\t=?utf-8?q?E/cO4enJY8iZ3LFn8L9SQnwvYAChulwTny47QhGHdRK+oxc5HKj7tR/G5SfGvwYHr?=\n\t=?utf-8?q?2pbEKb2PRRoExeufcQxgWMNfWCzEJzH6/+xqGkRaxxZgY+sy7a6zgnyKhe5TB4uXr?=\n\t=?utf-8?q?QxMiBmOROtBwErJTKhsUdg6TK2pP0Iw3e4lgSWdLEgYoAcMPeBNH8F8iHLir0SUU1?=\n\t=?utf-8?q?byr0tsAGfBhn0MURHk8JIPnp3YqQT9VOu4O5chgB2U0fB+g71WgThugl6pbHNXIrB?=\n\t=?utf-8?q?gjHv5gvSc07tePx2K7B3el/LZP7GuD4pEMKIY+C9K9wKKZOojxqhkWAxn1lyVFL3X?=\n\t=?utf-8?q?8gLrqsPwjMdwWNyY42rhJfWLUeXJzV/R1m50roVyeUKY59crzo40CCmyd3vl6IdUe?=\n\t=?utf-8?q?CLUy+jCTmvvXRcWdofX/d3iR+Nqz70YdlrA16bFYhC0IwcJ8KLYlXXjesAoK+MAfp?=\n\t=?utf-8?q?nbksqY8Uhdj9vgwxvzdZO3jwFoY85oBRRT8tDP2jq82xCMo/j8U7eKE5WpNsLadZq?=\n\t=?utf-8?q?oxKFKB8+QEeeTpvD6XYTsH/A8qy9+N+vC/oZbFLxOiSJofYjjt4N8/WjKW2JQYOeA?=\n\t=?utf-8?q?JTT/NhesRcP7Zc7x2E6XsLd1OXNPX20ctF8wyTZzy3MABOag7WkupnZKMqY1OOn+y?=\n\t=?utf-8?q?z6EYhDmsgU6liCc9pxsUs7YhDPy/XwdrbgAmdpZbEDgbkjliEVUnvSsKPfRS3OxH1?=\n\t=?utf-8?q?xJQRSijnmEsTHzSQjPG17aAOB1G5tAglA1Ph0ZVNUH2c3Xp62EB5eoEt6tgzR6FnM?=\n\t=?utf-8?q?KnFEWDzI1svr+DdWoyys9zqS0jQcKT32Zo3iLnRi6p8KCUzlJ6+wOaQNiSazl32LY?=\n\t=?utf-8?q?ycDNlP9JJ9vJgLRVxiLbDTJ3Q4aIvEWxNNH9Udg0SETg8LyrbzHZTlCnzCBL+5PJ7?=\n\t=?utf-8?q?JX74CwkNGAY+ZHhD1ih/Cd+jzcmdqEDlaFcIb7Hqm99tBlRQosbIKa9AF13wml2m2?=\n\t=?utf-8?q?NkJbA25UGnxrxdAnsvpfDE2z3Vab5Vk5YWKZQYRAuTsZgMSY84kPPTEq0qcq3HGfL?=\n\t=?utf-8?q?azLE5O/aXbJnmnaORY1ROABED/5n6hakNgmancTCpFcunVRiAN9wGKdjT80XJTPHT?=\n\t=?utf-8?q?+/u5Lmi103d+GlotzyaYEJMcZBbmfrjga9pNalKbJXj+LhXzkcgp/ecwym1iX44Bz?=\n\t=?utf-8?q?FNAZIaPUAn+6k3RXDeLZDF+wqimJFHuBjpbwMdNSB728EPXHrpvHH2fUgYxJRbr3r?=\n\t=?utf-8?q?0NgcsXgUxqJcYmTZYgU879TbBFiXBVijx9gi6MPbtGP05I2gM70XoK+2Fz8pc9P9W?=\n\t=?utf-8?q?O5jFUUk+35ZtRP60eZi71HMQ+SAI2F1QasIktH06TOTFA+1jRiA6FwrDcEVaXhzDu?=\n\t=?utf-8?q?raZm72LrICf99M9rgakwFnUM0+GzXxhPkuF1MGBPg3sAvpo+mohiUWrmzfMil0kwh?=\n\t=?utf-8?q?YIJwEfUVhVLhGnQqeo4EC9ctcOtsigNaRbTH8pbfM7tO8GZKYcBsIWVHjtwEvAGhD?=\n\t=?utf-8?q?3/pTvCQPedD+q3hDEwnaS2lG8jOAQJA5G8XMMAhnONWLF0qH2GvUQbHU7wIccj7Wu?=\n\t=?utf-8?q?XPCEsXBS/LDX7YLUh6t15jGvSgB+UrcA=3D=3D?=","X-OriginatorOrg":"garyguo.net","X-MS-Exchange-CrossTenant-Network-Message-Id":"\n b05d3aa6-a5bc-4484-ef93-08de9fb629e6","X-MS-Exchange-CrossTenant-AuthSource":"LOVP265MB8871.GBRP265.PROD.OUTLOOK.COM","X-MS-Exchange-CrossTenant-AuthAs":"Internal","X-MS-Exchange-CrossTenant-OriginalArrivalTime":"21 Apr 2026 14:56:27.0207\n (UTC)","X-MS-Exchange-CrossTenant-FromEntityHeader":"Hosted","X-MS-Exchange-CrossTenant-Id":"bbc898ad-b10f-4e10-8552-d9377b823d45","X-MS-Exchange-CrossTenant-MailboxType":"HOSTED","X-MS-Exchange-CrossTenant-UserPrincipalName":"\n OQ3EEvFMth9NOwTativDAe2vIwjgxZWOXiknG7oFoHTzU7E7YdRya7j4CWwfi/x4yTNA6JcfAz9rfFpy7Tw5iQ==","X-MS-Exchange-Transport-CrossTenantHeadersStamped":"CWXP265MB3558"},"content":"This series generalize `Mmio`/`MmioRaw` type from just an untyped region\nto typed representations (so `MmioRaw<T>` is `__iomem *T`). This allows\nus to remove the `IoKnownSize` trait; the information is sourced from\njust the pointer from the `KnownSize` trait instead.\n\nThis enables us to implement `Io` trait for `Coherent<T>`, enabling\nunified handling of MMIO and DMA coherent memory. It also paves the way\nto uniformly support shared system memory, which Tyr will likely need\n[1].\n\nBuilt on this generalization, this series also add a `io::View` type\nwhich represents a subview of a bigger I/O region, and a `io_project!()`\nmacro that provides a safe way to perform this. Some Nova code has been\nconverted in this series to demonstrate cleanups possible with this\naddition.\n\nNew `io_read!()`, `io_write!()` has been added that supersedes\n`dma_read!()`, `dma_write!()` macro. Although, they work for primitives\nonly (to be exact, types that the backend is `IoCapable` of).\nOne feature that was lost from the old `dma_read!()` and `dma_write!()`\nseries was the ability to read/write a large structs. However, the\nsemantics was unclear to begin with, as there was no guarantee about their\natomicity even for structs that were small enough to fit in u32.\n\nIn this series, I've introduced a new patch that re-introduces the\ncapability in the form of copying methods.\n\n    dma_read!(foo, bar) -> io_project!(foo, bar).copy_read()\n    dma_write!(foo, bar, baz) -> io_project!(foo, bar).copy_write(baz)\n\nThe semantics for these are modelled after memcpy so it has clear\nsemantics. This also makes it work for MMIO, which maps to\n`memcpy_{from,to}io`.\n\nThis series depend on the projection syntax rework series [2].\n\nLink: https://rust-for-linux.zulipchat.com/#narrow/channel/288089-General/topic/Generic.20I.2FO.20backends/near/572377073 [1]\nLink: https://lore.kernel.org/rust-for-linux/20260415-projection-syntax-rework-v1-0-450723cb3727@garyguo.net/ [2]\n\nChanges since v1:\n- Rebased on projection syntax rework\n- Added a new patch to forbid use of untyped I/O accessors and register\n  macros on typed I/O structs (Alex).\n- Fixed a few safety comments (Andreas).\n- Added a new patch that implements copying methods (see above).\n- Link to v1: https://lore.kernel.org/rust-for-linux/20260323153807.1360705-1-gary@kernel.org/\n\n---\nGary Guo (11):\n      rust: io: generalize `MmioRaw` to pointer to arbitrary type\n      rust: io: generalize `Mmio` to arbitrary type\n      rust: io: use pointer types instead of address\n      rust: io: add missing safety requirement in `IoCapable` methods\n      rust: io: restrict untyped IO access and `register!` to `Region`\n      rust: io: add view type\n      rust: dma: add methods to unsafely create reference from subview\n      rust: io: add `read_val` and `write_val` function on I/O view\n      gpu: nova-core: use I/O projection for cleaner encapsulation\n      rust: dma: drop `dma_read!` and `dma_write!` API\n      rust: io: add copying methods\n\n drivers/gpu/nova-core/gsp.rs      |  44 ++-\n drivers/gpu/nova-core/gsp/cmdq.rs |  65 ++--\n drivers/gpu/nova-core/gsp/fw.rs   |  84 ++---\n rust/kernel/devres.rs             |  11 +-\n rust/kernel/dma.rs                | 232 ++++++------\n rust/kernel/io.rs                 | 769 ++++++++++++++++++++++++++++++++------\n rust/kernel/io/mem.rs             |  10 +-\n rust/kernel/io/poll.rs            |   6 +-\n rust/kernel/io/register.rs        |  40 +-\n rust/kernel/pci/io.rs             |  80 ++--\n rust/kernel/ptr.rs                |   7 +\n samples/rust/rust_dma.rs          |  14 +-\n 12 files changed, 948 insertions(+), 414 deletions(-)\n---\nbase-commit: 77a9bb0193d790fb71c0edfc567bddc1b56fb3ff\nchange-id: 20260421-io_projection-16e7dc5ba7e4\nprerequisite-change-id: 20260415-projection-syntax-rework-b790a305bc52:v1\nprerequisite-patch-id: 110c29f61d0e7259d64057b6f364587c5ee501f5\nprerequisite-patch-id: c157387d475fa22e32fc87d831a1ec384d256ca4\nprerequisite-patch-id: 4109733485cae727763b2cd9ece69742e3d17cbf\nprerequisite-patch-id: 5b686696f7dada42bb0768d255699dda0252234b\nprerequisite-patch-id: a736703c95dc35a23e8c52bbdcba0ca9f38b55fb\n\nBest regards,\n--  \nGary Guo <gary@garyguo.net>"}