From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id 57234C021B2 for ; Tue, 25 Feb 2025 16:06:23 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id C3C176B008C; Tue, 25 Feb 2025 11:06:22 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id BEBE26B0092; Tue, 25 Feb 2025 11:06:22 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id A657A6B0093; Tue, 25 Feb 2025 11:06:22 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 84DE16B008C for ; Tue, 25 Feb 2025 11:06:22 -0500 (EST) Received: from smtpin18.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 847601A1942 for ; Tue, 25 Feb 2025 16:06:20 +0000 (UTC) X-FDA: 83158944120.18.B74FEED Received: from LO2P265CU024.outbound.protection.outlook.com (mail-uksouthazon11021109.outbound.protection.outlook.com [52.101.95.109]) by imf01.hostedemail.com (Postfix) with ESMTP id C98E140031 for ; Tue, 25 Feb 2025 16:06:09 +0000 (UTC) Authentication-Results: imf01.hostedemail.com; dkim=pass header.d=garyguo.net header.s=selector1 header.b="QBc+e/be"; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf01.hostedemail.com: domain of gary@garyguo.net designates 52.101.95.109 as permitted sender) smtp.mailfrom=gary@garyguo.net; dmarc=none ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1740499569; a=rsa-sha256; cv=pass; b=qVhNJ9vnwa7nEW+RX8kH+5vQtJktxJKbGKbUJMJtOW+H6zyLYWogwaqaaH9T+k7gqaOwyM TmO9jZu95KIoN6T2R1GU2At01FnsMw7ORqe00VJzORLh1Lg387GnwZPc8fqQAV+Nz3JySd 9e8a+80iy6g2Lw+34Ht5lpTVTK2VEJk= ARC-Authentication-Results: i=2; imf01.hostedemail.com; dkim=pass header.d=garyguo.net header.s=selector1 header.b="QBc+e/be"; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf01.hostedemail.com: domain of gary@garyguo.net designates 52.101.95.109 as permitted sender) smtp.mailfrom=gary@garyguo.net; dmarc=none ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740499569; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=oQ15bdkn9OT9BtsiRR/dvA00dtoT+7R+2tKYdZXKUi0=; b=U55scK6pPy0xk52yVO6FBKr7ijJgAfm+VvTa/uELJF1+ZRBv5TBO8BCre0slIQWsul+diB gza9+AKA9YN9u+n8IIxAjbNdU3JQFPvRuymwkhTtUIbR32mK4lqZCQvNPIiWFogsk2p3Gm iocUb9BG1aoZJbQqUBynHWtZAZZhcuE= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Dvl7atxqdigQhrqEOC3NRmJdWefRmqAqt4bkTI73DwP7WpXAISImyNYMeNLXxUeL56gx5zds3zejemiPmq+5TzJKUo2ZICpbsuLO90XW2CstQ5c3hp+LRamxBQaNiRUSQuAYExJ0bfstViospoePX6ab+l20lNM0QaMnL+9CVCkP4WFcZ9zmCBpATCJ11PnNXMI2QGMX5ycMX9TkhW6X+oLkMVnNAZD1iL3zJOIMjT0jJ6wRcu9UezalCWe8mw+sKSA97+R32Po964Cv7WVq9yGUd8PY/eL2l0k4Ig7DyTpmzVMRyqRqiwekVga/dqqENMh0CnMP+E5IMlZj9OgqdQ== 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=oQ15bdkn9OT9BtsiRR/dvA00dtoT+7R+2tKYdZXKUi0=; b=qtDtYPpmRjP3VL9ayf2Kr0UNlpXhHT2RqKni++8NN2SONa8QXJAUhbiJQaX9XGjZFiLatVcjlsVyEaGURYiLeBmD7tRNryxabFLy52AYpreMwDR/br8X6VN1MQcYZSIEXcZZ4F+/BkjinxHYozNi1eZeeLzNPjI0G/LuUeyzaeVv4rK8e/fu+akrr9HTr2Owb8D3oY02p+qH1FMmjr750TBOMZl07e2m+BxfsWvKU5IgpKyh+TML8ZVmBN5V3rGgzbBV92oagrrD11xWHgjEvVwDHcAgfqmAIBlcszmQdJQCz31y6djW8NeXKDJNvl8LIvgMPUTsMEZvKlCJ4RiHwQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=garyguo.net; dmarc=pass action=none header.from=garyguo.net; dkim=pass header.d=garyguo.net; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=garyguo.net; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=oQ15bdkn9OT9BtsiRR/dvA00dtoT+7R+2tKYdZXKUi0=; b=QBc+e/beJj+GiS3KDDs5i4JuW/u3ch2xGtVE//mOkgvbfhRMAsuskcIDwj8vPE0wBUp9/DkQp/6MENbDM+J7mvdtfbB8YB9yHewuCYUvSrZ+Yn/0NHjHSNwUkrt4b14RXgW9DgcDZ8k1bNHbyRoWl+kOLgOky0FrQPQcyHYFprU= Received: from LO2P265MB5183.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:253::10) by CWLP265MB3203.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:8d::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.17; Tue, 25 Feb 2025 16:06:06 +0000 Received: from LO2P265MB5183.GBRP265.PROD.OUTLOOK.COM ([fe80::1818:a2bf:38a7:a1e7]) by LO2P265MB5183.GBRP265.PROD.OUTLOOK.COM ([fe80::1818:a2bf:38a7:a1e7%5]) with mapi id 15.20.8489.014; Tue, 25 Feb 2025 16:06:06 +0000 Date: Tue, 25 Feb 2025 16:06:03 +0000 From: Gary Guo To: Alice Ryhl Cc: Miguel Ojeda , Matthew Wilcox , Lorenzo Stoakes , Vlastimil Babka , John Hubbard , "Liam R. Howlett" , Andrew Morton , Greg Kroah-Hartman , Arnd Bergmann , Jann Horn , Suren Baghdasaryan , Alex Gaynor , Boqun Feng , " =?UTF-8?B?QmrDtnJu?= Roy Baron" , Benno Lossin , Andreas Hindborg , Trevor Gross , linux-kernel@vger.kernel.org, linux-mm@kvack.org, rust-for-linux@vger.kernel.org Subject: Re: [PATCH v14 3/8] mm: rust: add vm_insert_page Message-ID: <20250225160603.4d4a2893@eugeo> In-Reply-To: <20250213-vma-v14-3-b29c47ab21f5@google.com> References: <20250213-vma-v14-0-b29c47ab21f5@google.com> <20250213-vma-v14-3-b29c47ab21f5@google.com> X-Mailer: Claws Mail 4.3.0 (GTK 3.24.43; x86_64-pc-linux-gnu) Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit X-ClientProxiedBy: LO4P265CA0299.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:391::17) To LO2P265MB5183.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:253::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LO2P265MB5183:EE_|CWLP265MB3203:EE_ X-MS-Office365-Filtering-Correlation-Id: 4c4d256f-ae82-47ee-d494-08dd55b64f54 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|10070799003|366016|376014|7416014|1800799024|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?9Uqn4N7HH6SvJ4TnymYbHeTcHR912BUUQQxdzys3zlRQiAM3/cb0jYp6p0UT?= =?us-ascii?Q?bxzeTxydxu6BCi/7LYkLtzeDoXsubX+iQesnGFmH7z01fWt/bREYxph5PW5u?= =?us-ascii?Q?W5f2s9ZeFUOWZ3gS3J9Wl3qJZdqh4xDezDSFQBZgPMf9NjT3spdDfkVNYFjd?= =?us-ascii?Q?R9HMmg249b3++hTkDs6D6HUnqWHJc6pEESl5VDCuZMR67siBIBnhCXy0/30J?= =?us-ascii?Q?Dwk/Im8R46rAmJgIEaxzwBAtCPFurK/IFwT1Z78OluZKMEVOQDqPklHvft6Z?= =?us-ascii?Q?0d/mPf5n0/aU59RL/CLphOTSUkW53KlImDY+PLm2yHe0r29fQnACfuLimCAa?= =?us-ascii?Q?nMUuULclH6oH/2pjhm0C0X/QK7rIJoMd1ddxXOTm9uIU6YXLOE5/H9xHgrTy?= =?us-ascii?Q?6k25XHsBZr02CbIQ0T0dKyL3qvLp/j+oNjQCVd1g8SpLdwCpnsAi7Qk7ACdP?= =?us-ascii?Q?AAuWHqn+f1XISQ1AV+r2MfKEoi2F/2yRZF7sl9iigBZ7ho4N1n7PuDjwsy7x?= =?us-ascii?Q?JiF7ERbso0rjP6Dx3sjv80YDa/T5tQF6Jsolg2+BFOprphgv/cYiFdLpCCB1?= =?us-ascii?Q?W3MfAdx3y3eUoUCmfh4fvE68VjANeV3m/wU2AYF20QFAAcYv5jS9OWijLZkt?= =?us-ascii?Q?4sXrN1us6oN8wwivV/pw0OQvwnTAH4dn/RCi24YJM6blkRxE1aOvXNyu7KHO?= =?us-ascii?Q?tLsRwH5cwcniaKyh8KF5aB5ELD6+npak2D2i3+bkipKs2OxT2uQKrB4lm9Wv?= =?us-ascii?Q?CQte88srv4eEZ3WFxeruhLKJVIfHmByhYg4ceaTh29skAe7Dz8Zfd996lgKZ?= =?us-ascii?Q?Pc5tbAGLhW0Yks+JfeAk/Z1VGs+ekYCqbYP2uXU1DpLOupSSOBj1moZUqF1y?= =?us-ascii?Q?8JJy3HkqEuA9Lqm5SVWVr0mOua3z6xOoTazTC4f1zFi3LMFg4dQvP231TxVF?= =?us-ascii?Q?7MHcgJKrz7nDoTWTiPnctSiOXLEEvDzzw9Jq7SBmE2e1pbQtM1PtZc4poFXq?= =?us-ascii?Q?tWx8FAj3R1lN2yeZglcwaI4faORB7eZuTDzS/tl1HB795CdZV2r3D57g2G9x?= =?us-ascii?Q?l9MQao0TaHg7HJFuNh6ZB9X5TCQy3XDzIjHdcFGrfaPxnRezSe90UfWCXDzH?= =?us-ascii?Q?glETU5xirHZ2Fd0+Po+Z/8ldJdtfpeWM9vhk7sKcywiKe8u87tUsVNoKvydb?= =?us-ascii?Q?o2Qhbdds0RIU+yuxlaJYS9U5sS1jNyZnEUoNHGPOFwJ0Jkyl5473mGsvrD/s?= =?us-ascii?Q?zOOf9EkQBaaTSphWyOlZoPX/8L/8sZFH/kZ4x2GNn3tKeA8/d0lfuBDfKJBy?= =?us-ascii?Q?mHrHoyrwvSxcQdrud1TnokeAOu80OA9zcDWGV60kPz4dhDfT7qli1x4BQie/?= =?us-ascii?Q?eR9vGxGLxuPKuMMjp4Zc3ccSz4OE?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:LO2P265MB5183.GBRP265.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(10070799003)(366016)(376014)(7416014)(1800799024)(7053199007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?6HSe6rrlF2FawEnIU0Go/c9PeO8mQW/Tt2Q5LvqoZYwvmaUJzu3ecbNp0qbS?= =?us-ascii?Q?K3OGNWaxpb/BfHSLB54oIENYPNcMYcWa04nLrzul3SASBIMKdNY+iYUdDOgS?= =?us-ascii?Q?2yB1VetkBMBpYlZpj1hzxd2YXFCxdOTzNvif0UedpGmhNSBmSuDmINS8f+/S?= =?us-ascii?Q?2DjKGhzZ0O49l+dk7tAV1E/q8Xp4RBGsWOHSJsg2QYEnwCkEAGGWV6KpcCHQ?= =?us-ascii?Q?rNPqeR7e3UxRHJzwnjyuT9vHcthX/oUyrCC3QFYPBzJpf39PkIY6yCU/MlA3?= =?us-ascii?Q?Og/cYDr0/PEFoIyiTfc2R5tcSL8HsQkoyEkQ41Y8M+zXz1iwJXkfXm5mXrcA?= =?us-ascii?Q?hRSIgFY4z9DoPI8UUvI06rp2xnKE1K2hzvJYRAo0mW7Sdg7NxWi2aJ11EPLc?= =?us-ascii?Q?8rmVJ4UfyaSIFhTdaeTc/BPBmMmTYXZtN8cMQJbZVsjmBA1Oe1N3hpJ8XJvZ?= =?us-ascii?Q?F7wV5qCHi/dk1Pz6rkuBsSg50GtdjqNF8WV2Z7+1NYTKifc6js21YhmYR3HN?= =?us-ascii?Q?K7UGlquiMAXqp0CBuRc3i+JzVRW1BLgD20Zz84tWHX23AU1qS6h6ENHmlqA+?= =?us-ascii?Q?8WBWPmr0CnSnnIYuW86goJlieT9hvNmvVp2mQrtr0Cc0Ak+ly3CHKJ3jKNR4?= =?us-ascii?Q?iuRFIovndR0Ki5v4F8Pmbn0fNAnckGu742rnaModjBsqoyizAsDhk5SgpNOK?= =?us-ascii?Q?50z/xkjjp2E8ImjWipiX8QgOLV6xc44EpGkbytpz+KQpH1vWkjIe53igazJw?= =?us-ascii?Q?7fK5Mc11fyeN09vz5eV2e/3CSNne5mOK6lEky1tmdXWpd8MHAikZW+pLPguB?= =?us-ascii?Q?Ut578oFcAEZKq5aXLFULG3P8kvB/IFEjaRf2/BIWA/lW2sgWbgFChbPR5Cu2?= =?us-ascii?Q?Fky1zmGhIC8IqCsR/mqi059J2/YJx+KuvVoccSh07BRCPZV2vQaY8FChdtNZ?= =?us-ascii?Q?Nl0SjLMzCCeBaxre5+JLaEhH4H1MsAX6Xxm8/5sNWGsPBLH/P1qc1cHjz2O8?= =?us-ascii?Q?j7awtfPvmGlo1TDU7WNWBK41vg7WuV3ekFEoIK18/EfAkWIz0boMPLXvCpb0?= =?us-ascii?Q?BjNeR4nz6oYsVDR41pxSx88fetjjzqKK6goD15oyYX5dkUYrKPU0A83jnuDC?= =?us-ascii?Q?+TLrZU7Jy8zmcdwTXg8kQmDo2VzKb/MYt3vLZ27YAI5EGi6hm6Kxx7qEA87z?= =?us-ascii?Q?bpIkGiv8kObLKekuJaWMSsDRhxfwNNZjKaApnPEjM0VHCezbKPJzVeAw2AHy?= =?us-ascii?Q?5kUq1xn6d8viRqZZi7qLPK8QPEKp3Vl0leZGJa8is/Cs8nuujW5wkixNnPTD?= =?us-ascii?Q?pDOqsg3Y8Rj3mm4noevzL6KJC+g3hQX+fh81MH7Vr5tUvhY+ObOgvt4vbhEa?= =?us-ascii?Q?LaR3PZS0uL/mUdA0VNTEKx2NcKWoMdaNOzjurF9EvA0bBGMno9M3lPxl4Ax5?= =?us-ascii?Q?+v7OCuGWxna2RrCjIIPMy+8TyYRXyGN+ejixOgUby4QIDEZLcO6HF12SZYEg?= =?us-ascii?Q?QMl0jKAo45fzNAIpn91X/FjATNqSkqvYnfYoGmHwzEgLKkH0aW7fiALFeqIS?= =?us-ascii?Q?MORzU+66SbYib+zLOBrpBYdwojzjUb95fud5NDEXE1gi0x8OSuKYDW4bFS5j?= =?us-ascii?Q?Ww=3D=3D?= X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: 4c4d256f-ae82-47ee-d494-08dd55b64f54 X-MS-Exchange-CrossTenant-AuthSource: LO2P265MB5183.GBRP265.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 25 Feb 2025 16:06:06.1614 (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: TV2+3ZsqI+Me/609aHmT73CVi+yaG7g+yHDY0eqiKMGsodH+7jQRZ8YPbApfOq5aZt1gMkcWVnEuixdN6gFs1Q== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWLP265MB3203 X-Rspamd-Queue-Id: C98E140031 X-Stat-Signature: t4775e9zpidrig4dqi8nyu6bpkym3m8t X-Rspam-User: X-Rspamd-Server: rspam10 X-HE-Tag: 1740499569-635383 X-HE-Meta: U2FsdGVkX1/GaGgWY4Flp3vatHxyuVPnKjRpg+EFWXJYdx+9qJuwYa52HQe3i0DBth64TqADZPxU5E5UYoYNOMCuVlhco6t/pCfweichJ/QXduAz2NuJVn67wVl2vzsCuysrMB/u+lbRfsQgGz6RM3CNBKyIH3LKBUNNrcjmofL6Oy0r9ER9VTp6Hvsl99kKqx3lTXiEgF8U0JXFqXg3HZXxZr4eN7OH+nVQzdB976DGRg0ToSX6QfS0p9tbpkOaQ5X1jyTss4zmrCbBmhwGty1iLQKb3cS106TGy9gkhsQ/XS6I7rm4qdA8gefuD0r5aL8sPduXJCmSzlYcv5eaOpDh+fO+k4Puixb9KeUf4jNm+KHCSJjEBiQx7c3bdwsSpK3hyHGXvFhLDSel1JRQLGMHr3ppNPRM5rA9M/wwdca9qa8dep4KnlwH6RJgCosWFPUkMHIucAZIjo0jpUXp2mO+rfdwjgzgCATctJ4MuMlWFZN4hQiMRgoq1MbeMq4xTOUym8JPmQOaAJsjvxNNiONg6bRbz2PAAYz6GAGHZC9Dob8gzrMimgTS0stT2abLmmYGoDRYzFU60VVt0cQ20PjERg5cpg5K2Aij51j0FG0zwfMLYugM2KXD43yLK169ySopglXH3s4DYFs1tnDu4sscFDaWpOvMR1LNlqtsVTKzScp053C9YQhnAMX3NcaYctVSKMkx1YbjpEbY73X5t+PYzgNLNHazIQQRKSrOG77l3vDwkP8MNOOPib1MNzJH7fBwhFz9ndL9PJvvvKKeZeGcbL+KL9GpI5i9gt1v+7zI80He239eQb1RzkDUPrrrblAAbQBlgwaXRVw0Tmkpxzd68oqVrUQgywEmLHvUus1op+mu+NuzNJUwnZXIsjBXIPvPeEpWvaX82Ludtq5eQeImQoyWSrmUdY03ZUzhJ3pl666kGoI3vn1qcONGNufZEZ6bfWxkkOxdL20HPNY /mwbae5t j1b0o9pP8/e9pMtz4GDF3LMgftxfmjeiBrJhfev9Q/pOwfwdfy6dCgV6EUvhAPyzKTixqz/lN4OFtJTZoT+QGC/eereBsRJIGjIBg1W5SDGY8xfDLB+xDA+yAGLE1pGpDIhupqhfT6FDQA17E2LZDnrKzjqQMXSY3YCTl6F71B5cpX53s1kOrNvddquA9HGWbyhWDvZNBe7rJJ2JXW9k2P9UmFpkn21lhxy5m+yDes0WOTonzcIDwJqjbnVndbScYZHqw0S+AQzGSwSS3ziQ5z8TIoboA4NxYGWtCmB6OsvqbJihwMgkMjr5CG4yTDkUbqjQAIGHxZrhiYN2tbkD0uuGVHdqs345Bf6cytnBED5cE1bPja21pHxXXyWYbkqOVBACcfo82+M5pO5qDW+KLd7+mx0PM/lXpO/CoVfjxEdIpYg0g8JXjcVVBMwb0Dt6UxLtpxRgdC07eWK3Kt1S8hM/foHykLEL2+pHdf0C4M+LJPsBgl1jjhiEhwpbs7eHmLPhkwsms+JqZeO0kOFh4fiAwI+vBmiYpykGeMWKzIzb1DDY= X-Bogosity: Ham, tests=bogofilter, spamicity=0.446485, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Thu, 13 Feb 2025 11:04:02 +0000 Alice Ryhl wrote: > The vm_insert_page method is only usable on vmas with the VM_MIXEDMAP > flag, so we introduce a new type to keep track of such vmas. > > The approach used in this patch assumes that we will not need to encode > many flag combinations in the type. I don't think we need to encode more > than VM_MIXEDMAP and VM_PFNMAP as things are now. However, if that > becomes necessary, using generic parameters in a single type would scale > better as the number of flags increases. > > Acked-by: Lorenzo Stoakes > Reviewed-by: Andreas Hindborg > Signed-off-by: Alice Ryhl LGTM, so: Reviewed-by: Gary Guo BTW, any reason that this specialised type is called `VmaMixedMap` but the base type is called `VmaRef` rather than just `Vma`? Best, Gary > --- > rust/kernel/mm/virt.rs | 79 +++++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 78 insertions(+), 1 deletion(-) > > diff --git a/rust/kernel/mm/virt.rs b/rust/kernel/mm/virt.rs > index a66be649f0b8..3e2eabcc2145 100644 > --- a/rust/kernel/mm/virt.rs > +++ b/rust/kernel/mm/virt.rs > @@ -14,7 +14,15 @@ > //! ensures that you can't, for example, accidentally call a function that requires holding the > //! write lock when you only hold the read lock. > > -use crate::{bindings, mm::MmWithUser, types::Opaque}; > +use crate::{ > + bindings, > + error::{to_result, Result}, > + mm::MmWithUser, > + page::Page, > + types::Opaque, > +}; > + > +use core::ops::Deref; > > /// A wrapper for the kernel's `struct vm_area_struct` with read access. > /// > @@ -119,6 +127,75 @@ pub fn zap_page_range_single(&self, address: usize, size: usize) { > bindings::zap_page_range_single(self.as_ptr(), address, size, core::ptr::null_mut()) > }; > } > + > + /// If the [`VM_MIXEDMAP`] flag is set, returns a [`VmaMixedMap`] to this VMA, otherwise > + /// returns `None`. > + /// > + /// This can be used to access methods that require [`VM_MIXEDMAP`] to be set. > + /// > + /// [`VM_MIXEDMAP`]: flags::MIXEDMAP > + #[inline] > + pub fn as_mixedmap_vma(&self) -> Option<&VmaMixedMap> { > + if self.flags() & flags::MIXEDMAP != 0 { > + // SAFETY: We just checked that `VM_MIXEDMAP` is set. All other requirements are > + // satisfied by the type invariants of `VmaRef`. > + Some(unsafe { VmaMixedMap::from_raw(self.as_ptr()) }) > + } else { > + None > + } > + } > +} > + > +/// A wrapper for the kernel's `struct vm_area_struct` with read access and [`VM_MIXEDMAP`] set. > +/// > +/// It represents an area of virtual memory. > +/// > +/// This struct is identical to [`VmaRef`] except that it must only be used when the > +/// [`VM_MIXEDMAP`] flag is set on the vma. > +/// > +/// # Invariants > +/// > +/// The caller must hold the mmap read lock or the vma read lock. The `VM_MIXEDMAP` flag must be > +/// set. > +/// > +/// [`VM_MIXEDMAP`]: flags::MIXEDMAP > +#[repr(transparent)] > +pub struct VmaMixedMap { > + vma: VmaRef, > +} > + > +// Make all `VmaRef` methods available on `VmaMixedMap`. > +impl Deref for VmaMixedMap { > + type Target = VmaRef; > + > + #[inline] > + fn deref(&self) -> &VmaRef { > + &self.vma > + } > +} > + > +impl VmaMixedMap { > + /// Access a virtual memory area given a raw pointer. > + /// > + /// # Safety > + /// > + /// Callers must ensure that `vma` is valid for the duration of 'a, and that the mmap read lock > + /// (or stronger) is held for at least the duration of 'a. The `VM_MIXEDMAP` flag must be set. > + #[inline] > + pub unsafe fn from_raw<'a>(vma: *const bindings::vm_area_struct) -> &'a Self { > + // SAFETY: The caller ensures that the invariants are satisfied for the duration of 'a. > + unsafe { &*vma.cast() } > + } > + > + /// Maps a single page at the given address within the virtual memory area. > + /// > + /// This operation does not take ownership of the page. > + #[inline] > + pub fn vm_insert_page(&self, address: usize, page: &Page) -> Result { > + // SAFETY: By the type invariant of `Self` caller has read access and has verified that > + // `VM_MIXEDMAP` is set. By invariant on `Page` the page has order 0. > + to_result(unsafe { bindings::vm_insert_page(self.as_ptr(), address, page.as_ptr()) }) > + } > } > > /// The integer type used for vma flags. >