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 4B16CC021B2 for ; Tue, 25 Feb 2025 16:24:10 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 9FFC5280005; Tue, 25 Feb 2025 11:24:09 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 9B01A280003; Tue, 25 Feb 2025 11:24:09 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 8027A280005; Tue, 25 Feb 2025 11:24:09 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0016.hostedemail.com [216.40.44.16]) by kanga.kvack.org (Postfix) with ESMTP id 5FA37280003 for ; Tue, 25 Feb 2025 11:24:09 -0500 (EST) Received: from smtpin09.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id EF0E4141964 for ; Tue, 25 Feb 2025 16:24:08 +0000 (UTC) X-FDA: 83158988976.09.54B6EDC Received: from LO3P265CU004.outbound.protection.outlook.com (mail-uksouthazon11020103.outbound.protection.outlook.com [52.101.196.103]) by imf29.hostedemail.com (Postfix) with ESMTP id 31350120007 for ; Tue, 25 Feb 2025 16:24:05 +0000 (UTC) Authentication-Results: imf29.hostedemail.com; dkim=pass header.d=garyguo.net header.s=selector1 header.b=OjvPi0PD; spf=pass (imf29.hostedemail.com: domain of gary@garyguo.net designates 52.101.196.103 as permitted sender) smtp.mailfrom=gary@garyguo.net; dmarc=none; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1740500646; 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=MavDc1RQuPDqfrR1gbDKVjRpCVMW8rd1kMI8Xqj60B0=; b=RtKXQwCwS20swDZ/s4VBY+CVwLYC5Vq2OGkxaRMg+/DEWIV6LS7VNf5rQIfntebD0F44EI 5armHQYrEcPMZIaQpNvTD/nrdV9w6dnAy+wm95mouh/QAa3tjxbGSZofF6IeFdV7j2JXnY uceMnKMD5JuK6/ML14vUhVkN8vPS4Xk= ARC-Authentication-Results: i=2; imf29.hostedemail.com; dkim=pass header.d=garyguo.net header.s=selector1 header.b=OjvPi0PD; spf=pass (imf29.hostedemail.com: domain of gary@garyguo.net designates 52.101.196.103 as permitted sender) smtp.mailfrom=gary@garyguo.net; dmarc=none; arc=pass ("microsoft.com:s=arcselector10001:i=1") ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1740500646; a=rsa-sha256; cv=pass; b=kW2TQ89WqDBE+pjkp7ikxW9ucM+ki0nEV5HTMsccuCAadB0uVb+w9LYa3YauA8vCAbyVuO GNc6213y3TnIwk79KDbiFeS+GgK/DkX2FN9a/urhD3ZyYbMCW0MP08U4aknPbTcgeUllSk GT+jX41kN7rMn3dAgXpFjrh3RbTIe9E= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=urcEfoi9nJFhABvSkUqUG8fC+xE8p2a/Zq5EdTT2tzrhjzA0aQ9RXKQPuZzLb/9PXYZleS9kQOS5Rt1HVtYIJnJP/VwKyWXcwzazkbtBxwP0nv2vVScM3alk+lKbiF7ISSstlpfZnAXp3E8KAnUDfWrlMiSGMDBfeR6q1oTecyyygDxNRvk8MVlerhnJJzdYlm5XqFS3H/a74iWb1+jK2BnheFrzZV726yO7oI4JlukX+kRM2X/Arou/W9Wq/S8dK66ZyxsXfW3fTCXhZXO3j//6synD3IYvEbUm14+h7FRQY9rNdX5lESaVhWYmDriIL8i0ABcdDP6PgkqxRiEQkw== 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=MavDc1RQuPDqfrR1gbDKVjRpCVMW8rd1kMI8Xqj60B0=; b=L1bMfWTGqz1f8NIsG2jQbIKsazLTw6/EmBM7WUcKkBrOMBnjvPRG3CSkAGU1kGVaWlT8muOE2hfoFo6CCCTxo0xFW7ks9Up1tQ92VaJMenBhVGvJd0H6b6nIk0jXvy7xV0eIsQJyoHHq7l6EMAbnyDNZ5X/gmO4iONpx+wJEpy4aa9ylxxbOGK1wkUsgZZs9ZvyJQYgwNCiGW+aCeQWS7b29CqVMTaWFJWSskT6EWKbq41biZpYGq3/Kpp/Qq9iGUgqmloPmoqu2b2BvcxX0VmET0Nn45A0i3S87BuZ4kf17zTH6Vp0uOaP/3tElQFbJ5Km7kolt4K3u4zQK7H93Tg== 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=MavDc1RQuPDqfrR1gbDKVjRpCVMW8rd1kMI8Xqj60B0=; b=OjvPi0PD5lJRSOsKVILdk/vpRt1Ke4FWMz4bRrT5B3DBgGHy4/EUZ/vXjvodhLYc0JNuS6KFUdehZ0IarVbvmCjRV3QiQCCUULeQeu6zG8c9W0kSs+nQO8ygz1b4+GnnpcyMtHbWytjsH/UZRsktJcTnpxH9WnyjAVX6YXldNrw= Received: from LO2P265MB5183.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:253::10) by CWLP265MB7226.GBRP265.PROD.OUTLOOK.COM (2603:10a6:400:1f4::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8489.16; Tue, 25 Feb 2025 16:24:03 +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:24:03 +0000 Date: Tue, 25 Feb 2025 16:24:00 +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 6/8] mm: rust: add VmaNew for f_ops->mmap() Message-ID: <20250225162400.37187f22@eugeo> In-Reply-To: <20250213-vma-v14-6-b29c47ab21f5@google.com> References: <20250213-vma-v14-0-b29c47ab21f5@google.com> <20250213-vma-v14-6-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: LO4P123CA0515.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:272::7) To LO2P265MB5183.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:253::10) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: LO2P265MB5183:EE_|CWLP265MB7226:EE_ X-MS-Office365-Filtering-Correlation-Id: 7d57d160-ab88-4a19-1cce-08dd55b8d117 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|366016|10070799003|1800799024|376014|7416014|7053199007; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?U0Mc/QAKJ1gn13w3vKDJ496Od38f5rH3sQpD6L8LfCHijfYvhWUvDdHGPXCl?= =?us-ascii?Q?SyjpKEBT+HYdsaos/5Dlys4zTAJELJc05TTAHAfqZyU80Mec4nNiLWBa66Jx?= =?us-ascii?Q?E3cFV2tSTFLV0E2bEVmrdIfRRdCJY8+DxB0fLntS1ORVTIjVF9oSszHQgGnT?= =?us-ascii?Q?YCdir6uKPXUqEWykHO/mn3qA9BvODtQvCjyp5+K8MIsXj3yrrEuk1uOAF1tw?= =?us-ascii?Q?FkCBi51pg7X8TdpUVvEWLtd7UB6mDI3pqZ66ijuJeBg9NXIquVPIps2EzBm9?= =?us-ascii?Q?WwanKXwXIFYZvoySZZXJHiNWMKv+JiQH+P0a6Hq17KDptCFJUOG/yJKgDwQc?= =?us-ascii?Q?JWDfmE5FLIDmk4WnSf6nr3ds+7mwWilN1sFba7oXSjsUQbMyHiEMD6J77nwU?= =?us-ascii?Q?95U8y9KDv40H60ny9afTWJqRBlUP2L9O4EH57DZ4JvxQP3WO90dnwsXgJSMM?= =?us-ascii?Q?1e5t+c/RyY4O0sEUcVWwm42AmhvdhemF7ufHM4pK/9PxQ7diaZZolqdKrp2p?= =?us-ascii?Q?ZXsw9Znmylk4YTzMRn4T4Ze3d0CWdyLLafdvH5TRRI4pEkV6hF7BtQu+V4LF?= =?us-ascii?Q?nqftlqGJSK+lqfhjhLDBH+7vaIz1YHNufSjfMlK3Hedb05JYwfkFFYki30On?= =?us-ascii?Q?+tCTSEccklUKSwwVUqAby8ISFTOKQZ+S5yb7RrmjrB4QFNNDYCKDlKiqteH0?= =?us-ascii?Q?nB/a2F342ZZbEwuoSK5iI+Lq42zTHHfhKphOx1J122K+sMx+xC1mxgNxTBd2?= =?us-ascii?Q?Gu9tW3vj62ImOLps39K1i7CIp8ocWtawrPWu9GIiHTFqqrWZzUwsl/Zpgv2C?= =?us-ascii?Q?4x7WjYl8t1Kql5B66cy/4+0hMKkqf/KZr/1kiFIZJOfw5nBgilZyGLwvEg1m?= =?us-ascii?Q?XiAjkYGO1D68WAyQ3irmik6sE3Gq4bTrdRWYg7DX86eHJ+mxovvFq11rZxd5?= =?us-ascii?Q?YavfKIyfpM9IA7mySqwlewJNd2Lp39raWZx2mLGDb8zeRO/WT4tBq3Vruwzi?= =?us-ascii?Q?ZQseg4txd1jWy2AFGOYB1Iup9ob3u2mQhmVa8E3U4yKRIFL5cCxRQ6om7QI+?= =?us-ascii?Q?FMDi3bRFGLoC9tyBYQd/hgqmIIdQ6u4ah4T8oA3v7/+H9nAgeS5p64vsyfiW?= =?us-ascii?Q?BpmETQZ3noNnfwdkAl1iVvij72gt2RLFwfMbOBeifmBywTeWk6fttKpR3vHU?= =?us-ascii?Q?mV4qSFg3AI74j/qClxTW21ZIglXZcVu3LJMC7myjtGzmBhdnxGtbD1gE+SUw?= =?us-ascii?Q?t+QVGzs/f6ENiwg/PmL67Geht43A80tIvr6NbKzviKww6DiMFQpQSihWOA4e?= =?us-ascii?Q?RPvCDS9rnP2MKVGWzsb950IsNvhPnRF0e9OFtfVDNwYZkJIspD8upM9bmTdZ?= =?us-ascii?Q?1m2qHTWzpL24nV9ihm4FWR9a4Wik?= 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)(366016)(10070799003)(1800799024)(376014)(7416014)(7053199007);DIR:OUT;SFP:1102; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?otEop6rrt3vi37r+Dv06GmCUYaLZQV8jrtsvQLKEu24PKfOw01K+BVrkCk3x?= =?us-ascii?Q?wtv3LEylw+hpWWuRZgIeoDDIynJnuAZ/3469JBW7LGA6smCpKl7bI8lMkB6A?= =?us-ascii?Q?TSyR6ayx/zBmtJtYXTR5aIR4Xxc41ldg0+We8oPY+mMBsT0oBiNJiDwSlOOl?= =?us-ascii?Q?HWn8awapfnNFpRvUPtKH+tKz5rNNyfJzhZ9TAufZWzrOnkaZANNli0vsH9gH?= =?us-ascii?Q?A6GIHFlL6Z/kdU0Wo31zZJrMZUKA2llDHazzGWLjOXDAXB1ZNVkML7K051iw?= =?us-ascii?Q?0PnyvBPwvROTjuCZ6C0tIoEVoSHi+uECP40kfqrh+pZL7bvCmgXqb/hyvq/5?= =?us-ascii?Q?9gwttKaI80gC/KcPP+AgfbBdtZDHJIV+39pjB4IN6KBjcLtvS08bwOCex4Ic?= =?us-ascii?Q?RLx7Uhw4XoPje0OW0yU15/akLdnZUccOvWnntzfrkj1IpEgKvAW+3g+GTSvi?= =?us-ascii?Q?m+0LOreFUK7JT5NUc0EyapaHhmG0gAExj1UmuFvN8LXZOHqUNAghv5JXxXkN?= =?us-ascii?Q?d699PQSra3v2chpTb2Ho5f74l3cBfevj4OPg1Ck8BQbZNYajYxIRJ6gDG7Vw?= =?us-ascii?Q?Yn/6fwGjk1rXrCO6L/C/sa+DbnxS/SIaSAfkpWxDV0139utre9MCPtBg9N5b?= =?us-ascii?Q?vsN0YzOAQ4916fZHiQMyJe95tX9aqL+9RJtVeoZXCmyouehj8ojJji/P09YS?= =?us-ascii?Q?NMNmep28HPz8MubZb/EzZAnpW0I7QUEQn7IXFEBNKHE4YOZB9oZ+DXes4iwt?= =?us-ascii?Q?gMyxJp6QEpuAC6KHptVisYLxuOkQXQr+IA+dw2+oDO6pKpxWMWw/NMr60uQk?= =?us-ascii?Q?V8UvqmTyRtu6/0OMzYDGxjKdHMAQ66tCHE0x7P5VVo75QJHfszY6/DZzzIlV?= =?us-ascii?Q?Hb73Ua2rtGiLW6UFRB4MojWXIuMyAXb+1n5kpBEsp8RcNEpt04EUrGP5axXT?= =?us-ascii?Q?e99JKdDOhujetmwnZaMAaH7UNCLo2QcTOeNci33w76BW8EsfnnoegdAIRe7k?= =?us-ascii?Q?vAakPFnlEN+R1nudob9NroNNGUeBgWzMdlXf3EpeRUQJgWu1E2nzgBhd2r5U?= =?us-ascii?Q?xR2r6cTCdsU1fnjT51U4/oluK9FD5iagUVakZbOaXoIIzvJO0W/1T0LO6xXq?= =?us-ascii?Q?UzQ73aCdyhtP9Vr0rWzahIkC4K6KybYNDZ2T1u7QL/WCxh6fk9HCDUuzmhn4?= =?us-ascii?Q?rd1zQT85ZqE7Jsc2DBk+41ZmzX+sm1BLMOCR7GFfZ8eJME7liK9Crzjbl7Hw?= =?us-ascii?Q?q4L6McpRh1viYTIilYq6czwFu4OIDIG9M0QV6B75Kq6rWvlAf8UfLceu6UeE?= =?us-ascii?Q?DNLsVTXoLTkYFSQHRadH5aTVq32RerBk6/Vt9OTkpCUfGQPJ+8ZOVRefxXpD?= =?us-ascii?Q?/0dHzHRf8cu5ikAtEs+2IvGX5TxqWOCJLStMz6Z8+bOWv6jFvWVZYA3T9Y9N?= =?us-ascii?Q?/Cw8kwqww0JQnl4P0Mz6Wr3ZOJCe7kvaR73clMJ58no7m1ffKOxo+dZZGSWE?= =?us-ascii?Q?ZSsvuOgADOw9LbeF6tdLWXjs6wkAMpWb+85Mccn7dcp9njzM2GepJnYkHAbm?= =?us-ascii?Q?2MvnKH6Lwz031buzp2s5+3CElCR9K32nYhd62+5gyzEi8prZSLmP7jJx5WN8?= =?us-ascii?Q?EA=3D=3D?= X-OriginatorOrg: garyguo.net X-MS-Exchange-CrossTenant-Network-Message-Id: 7d57d160-ab88-4a19-1cce-08dd55b8d117 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:24:02.8858 (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: JAa8uPhjGfyHKQpbhddIkdEHB73P2ZpSdxeOvipCURQPyDy4wodW7z6FQOJWll/TygQX6Mzl4s9Kut0trhW3AQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CWLP265MB7226 X-Rspam-User: X-Rspamd-Queue-Id: 31350120007 X-Stat-Signature: tu4rm84im5cg971byh6nb71r39q8fa31 X-Rspamd-Server: rspam03 X-HE-Tag: 1740500645-33180 X-HE-Meta: U2FsdGVkX1+whvstKsu9IF26iNEpEPSvjjGb2qglCkUgWBP/QMUOOizQKodQL22XvvkQDQyGTKiaR/4Uxormf5QlhQNEHPMYfQgINHyvECFI+3nkU5lwb//09LPQ3HaRpQgU+evZNXPOh/U0yZR7uLfhVU5dcRvkEG+Y6rnSF2hl7xV+b8Omw70ZSFuOd79bK1pwCAYdB2/lajkdLDW8a2LeWn81h25MFhYR9/JHHIabBV+ozuoW0hPvIJWjxSQmOXh4NeAtlm8XSsnrbjToCjrRd3GXy54w2VlqlZCSNdC4WDapZ4s3NX0i+3aT8R39plpfZV8Qe8kOupPjgtcH2SMFLASu4NrsdrxCk5m7Jr1T/kOojzpDz12A35kCjWneKQg2LBGWYTASJd+9hBjVvOYJ7E4qvJADnmYUfnbJyepfzBahqos3vHjYvEmX2QMLLXwyFPDJCaomjzvD6rO6Q7CbyPhYbmg1a62A8Du4Re+QU00SYbvSxYsgOjMkcAcOdvlxOS+Nynq6CN8hPrS2v7P+X8qYTatByrHPvLI/OegOa4CDkBJmQDwnkbqMw7X8+XlIZREQEJUYr3FFASSkiyE+h5lyGgM449YUNgooW/o4/r5/TdPkUAavb9fF5gtKBWrTzHJrpvnGekKXDPBqjb1N++60gv9KMJRU2NJ8cWYMWT33vMgqBpvCxNummq0OBKaPdQ2IStKpUh93MCv3m++VOzcDCPha6obtRx1KRumxU0DW4TNN0f6KGrxVLMOHMSOJh0QIhMyGz0ZguBPrT+oCD5T2VQ2pCrta+1ld7DVjLf9eC55Pb9iO0IwpX0EAQstMf03GLVNPzcqzL95k6w67jfn7znTk0LichgKEkRGbIyGBlva6kzzcLlM5olBghREHhn55ED3593xa2MgCIcWVVk5LoC+h+aIO1+6sPne25H495EVLkcnkn0rtprD/yCD9lnlyLiJUwKgE0Xg Ghnw6CKQ yNs3Yb7/boTN4VEeuAkdC7RDv3uvzNis/u1Va4ToveXLJzglNniFlEDd/kjo0fgOL1PnAa4YJYEdDMEMu+3kwPYKKkoPH8lNAcuJ9Ch8XD954X6tihbLwETMnmErsHn6eqySYVXDZt/cGsqlEvR85fVtNvcPAHk9icLEiJSfRVr5efhH8U8n5PV1OxboNqSBbT9WfYcBzoMITRFKvwIOt6jpgV8Pg2oDwZvEd/Xf6+6/t08KnaZAVgW8YKnRiSBQIq/LvKfi1KylLHCY0EOKXpnJ8J02LvDLqbsryTOFQUXSsXHwGCxVUc8Xwyvy658NOoY5xDbTUHmAFzYPQXoISLBugUFA5zsZjDKE831kNUtUQBZ91AzoWs4j2LwbfoY0NHH1gp0wVaPySRGGfHfXeETS+L4Q0YyKzSGp0erk9jO5UrqEF5bTepgoAncEO51JeKY0ITb4LlGXgUtr2g48oUOdLbVXA77pdzWn1H+y1Kt6BZ8h6TEZhhp/NOA== X-Bogosity: Ham, tests=bogofilter, spamicity=0.378927, 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:05 +0000 Alice Ryhl wrote: > This type will be used when setting up a new vma in an f_ops->mmap() > hook. Using a separate type from VmaRef allows us to have a separate set > of operations that you are only able to use during the mmap() hook. For > example, the VM_MIXEDMAP flag must not be changed after the initial > setup that happens during the f_ops->mmap() hook. > > To avoid setting invalid flag values, the methods for clearing > VM_MAYWRITE and similar involve a check of VM_WRITE, and return an error > if VM_WRITE is set. Trying to use `try_clear_maywrite` without checking > the return value results in a compilation error because the `Result` > type is marked #[must_use]. > > For now, there's only a method for VM_MIXEDMAP and not VM_PFNMAP. When > we add a VM_PFNMAP method, we will need some way to prevent you from > setting both VM_MIXEDMAP and VM_PFNMAP on the same vma. > > Acked-by: Lorenzo Stoakes > Reviewed-by: Jann Horn > Reviewed-by: Andreas Hindborg > Signed-off-by: Alice Ryhl > --- > rust/kernel/mm/virt.rs | 186 ++++++++++++++++++++++++++++++++++++++++++++++++- > 1 file changed, 185 insertions(+), 1 deletion(-) > > diff --git a/rust/kernel/mm/virt.rs b/rust/kernel/mm/virt.rs > index 3e2eabcc2145..31803674aecc 100644 > --- a/rust/kernel/mm/virt.rs > +++ b/rust/kernel/mm/virt.rs > @@ -16,7 +16,7 @@ > > use crate::{ > bindings, > - error::{to_result, Result}, > + error::{code::EINVAL, to_result, Result}, > mm::MmWithUser, > page::Page, > types::Opaque, > @@ -198,6 +198,190 @@ pub fn vm_insert_page(&self, address: usize, page: &Page) -> Result { > } > } > > +/// A configuration object for setting up a VMA in an `f_ops->mmap()` hook. > +/// > +/// The `f_ops->mmap()` hook is called when a new VMA is being created, and the hook is able to > +/// configure the VMA in various ways to fit the driver that owns it. Using `VmaNew` indicates that > +/// you are allowed to perform operations on the VMA that can only be performed before the VMA is > +/// fully initialized. > +/// > +/// # Invariants > +/// > +/// For the duration of 'a, the referenced vma must be undergoing initialization in an > +/// `f_ops->mmap()` hook. > +pub struct VmaNew { > + vma: VmaRef, > +} > + > +// Make all `VmaRef` methods available on `VmaNew`. Are there operations that can't be performed when VMA is still being setup? If so, using typestate might be more preferrable to Deref. > +impl Deref for VmaNew { > + type Target = VmaRef; > + > + #[inline] > + fn deref(&self) -> &VmaRef { > + &self.vma > + } > +} > + > +impl VmaNew { > + /// Access a virtual memory area given a raw pointer. > + /// > + /// # Safety > + /// > + /// Callers must ensure that `vma` is undergoing initial vma setup for the duration of 'a. > + #[inline] > + pub unsafe fn from_raw<'a>(vma: *mut bindings::vm_area_struct) -> &'a Self { > + // SAFETY: The caller ensures that the invariants are satisfied for the duration of 'a. > + unsafe { &*vma.cast() } > + } > + > + /// Internal method for updating the vma flags. > + /// > + /// # Safety > + /// > + /// This must not be used to set the flags to an invalid value. > + #[inline] > + unsafe fn update_flags(&self, set: vm_flags_t, unset: vm_flags_t) { > + let mut flags = self.flags(); > + flags |= set; > + flags &= !unset; > + > + // SAFETY: This is not a data race: the vma is undergoing initial setup, so it's not yet It is possible to make this API `&mut self` then? > + // shared. Additionally, `VmaNew` is `!Sync`, so it cannot be used to write in parallel. > + // The caller promises that this does not set the flags to an invalid value. Does `VmaRef` has to be `!Sync`? I wonder if we should explicitly mark `VmaNew` as `!Sync` so this is more explicitly correct. > + unsafe { (*self.as_ptr()).__bindgen_anon_2.__vm_flags = flags }; > + } > + > + /// Set the `VM_MIXEDMAP` flag on this vma. > + /// > + /// This enables the vma to contain both `struct page` and pure PFN pages. Returns a reference > + /// that can be used to call `vm_insert_page` on the vma. > + #[inline] > + pub fn set_mixedmap(&self) -> &VmaMixedMap { > + // SAFETY: We don't yet provide a way to set VM_PFNMAP, so this cannot put the flags in an > + // invalid state. > + unsafe { self.update_flags(flags::MIXEDMAP, 0) }; > + > + // SAFETY: We just set `VM_MIXEDMAP` on the vma. > + unsafe { VmaMixedMap::from_raw(self.vma.as_ptr()) } > + }