From nobody Sun Feb 8 01:33:34 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 209F23161A6; Fri, 14 Nov 2025 13:28:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763126921; cv=fail; b=VeN0zwj4i1LA8TziKMCb4l6z1vmmdMTLxJUOJN/6g/mWSBtgSDVuavj2Q8D9lv1gw+y0KjZrtekPFckW2vPhGzrhug8xTaf+my+yfVZzTm5W/LKNcrBTZk03r1gbwWkQkqBbxD5eXIBse5LujQ/heP1nxf4fRSPoFC8BJAWuwjI= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763126921; c=relaxed/simple; bh=yEKFlypvoQcqqG1ZakRePe1XuLoKrAEOSeaY88nZaRs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=XovCDzaGHNN4Xl7zrvTqHNJYnVYYD/Vq9nJr6xRcN5TWAR2RlrlqLl2qvMzQa5r8ReoZodQP4pR4rZh5cFsDEq0KCx7dZQQUmH7jc5OAeHuIIFHK3512whlOAWD5d2I/gbYq5Vldld9wt7vcPg4UazbszjKEDAd96vcWDh+7NmQ= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=Pw+BsQVx; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=Vtu8fIKn; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="Pw+BsQVx"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="Vtu8fIKn" Received: from pps.filterd (m0246632.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5AECuToq018316; Fri, 14 Nov 2025 13:26:40 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=wB29KaJy2FKfkzh+2uMoWhOKQSXUv/mB68Jk/zrucak=; b= Pw+BsQVxQP0CVqq4z0lPlah98S2A1x5z3J7qal1zaKtpR8qOUpV3ovNWsYq6DxN4 ZlAdC0rDV43aZouSdNX/4aovsNPFYMd8cMomK+uftszWVp6k+pdt7+IfhpvPX2yP PgmaA9HtLnPQULnd14uZqCZhAcrw4zpqhS7DNVy5ZqU/xBTQXeTkRU+KXx408orU I21Jk4810JJ0Om32PnIHWmbqg4JmfwT/P0w448MiYDQ7jJunF/MDDby29tBqblvx JNzmcd174RsAlFw67EVtFEiVYh0LaRWkkeZ7Ks8zOJD/wAyw0MlMI2F+Lt+Art/I 4Tp2HsV+BZl/Neo1JqO+Ww== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4adr8ss56m-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 Nov 2025 13:26:39 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5AECPACf038491; Fri, 14 Nov 2025 13:26:38 GMT Received: from sa9pr02cu001.outbound.protection.outlook.com (mail-southcentralusazon11013014.outbound.protection.outlook.com [40.93.196.14]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4a9vadgv4s-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 Nov 2025 13:26:37 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Yrn89PE6KU3f9LNsXmCtN+kt4FFuJ+ez1EhWkOb7zVLKy6MspHDX7TH1eeqoVP39CAfPLezE84buzarH/VEkDV3xRWtUgnpeW9YmK3JVoRnfx0Ox4tKrLwCVSilg1IZPcF+ocUh+xoq25tEL9yHNpJ6TAna/UbYSJF/owb9FayoGGw0daRIMiSsNcZrHkisbzXZA0agREQ6SnfRZMD+GDESLVs/06ImmKJ85umh3DSlmh2+OGcSolNhgvRqt05x63w9jBN8fhxHql09KrZ276PsB89ibReWxDl63iIA1CmvUc4q5Aqk9xcZ0+fkq8sDb1nKqkFT4n2E7Km61GiCMwA== 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=wB29KaJy2FKfkzh+2uMoWhOKQSXUv/mB68Jk/zrucak=; b=UB7XcdmruodgEDh9cNC9Gx4FAtW57vN4XzsI4jTE/vnYgxDlM5WNx3VjhkFkB8SUup1Lfh1g8XlFbcEqoFaHj2Wlyc8Q6YJyZCWS/H1OUGOTqMsaW7F1B4zYQstcUrNXgJWtjNctpD3wKMKBT1OqRmakkV4Hf990ky/IcPIGn8BMx3WcUCQRf8GVTDfpuyFJs8t9gjt1srBABcgWzwJ0DEsKQ2mkxHnUM3nxxZdvw+1ejJqAr6grPzQSdg9wsqgRMmG2g0aPJgcepaYlKcGwAfnYOtg3/7VKbAJmwdZfdiEonAzu4XSwO86BlHyO7cb8xgEsJZ1kOzBPziEbip92FA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=wB29KaJy2FKfkzh+2uMoWhOKQSXUv/mB68Jk/zrucak=; b=Vtu8fIKnMy+TyP7A0jVvid/8wbs3ZVeuSnO89NWBDiu0YisWbsQa3xyIypPrg/Okx5I1ueluJGmpT10HPOl3656GxVAI1kWe7ONJZsT+yGX++c0FuTC+/HI90hsQvj23rV3vD2BUgafh/WfVDFQv0OYYtZ/GPoZyW8ULPWSRR5s= Received: from DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) by SA6PR10MB8061.namprd10.prod.outlook.com (2603:10b6:806:43a::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.17; Fri, 14 Nov 2025 13:26:32 +0000 Received: from DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2]) by DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2%7]) with mapi id 15.20.9320.013; Fri, 14 Nov 2025 13:26:32 +0000 From: Lorenzo Stoakes To: Andrew Morton Cc: Muchun Song , Oscar Salvador , David Hildenbrand , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Axel Rasmussen , Yuanchu Xie , Wei Xu , Peter Xu , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Kees Cook , Matthew Wilcox , Jason Gunthorpe , John Hubbard , Leon Romanovsky , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Xu Xin , Chengming Zhou , Jann Horn , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , Pedro Falcato , Shakeel Butt , David Rientjes , Rik van Riel , Harry Yoo , Kemeng Shi , Kairui Song , Nhat Pham , Baoquan He , Chris Li , Johannes Weiner , Qi Zheng , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , Bjorn Roy Baron , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , rust-for-linux@vger.kernel.org Subject: [PATCH v2 1/4] mm: declare VMA flags by bit Date: Fri, 14 Nov 2025 13:26:08 +0000 Message-ID: <6289d60b6731ea7a111c87c87fb8486881151c25.1763126447.git.lorenzo.stoakes@oracle.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P265CA0291.GBRP265.PROD.OUTLOOK.COM (2603:10a6:600:38f::20) To DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) 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: DM4PR10MB8218:EE_|SA6PR10MB8061:EE_ X-MS-Office365-Filtering-Correlation-Id: 939a8012-d536-45ae-c057-08de23816cef X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?mP9xZYjOTp9HeDQhccFGuMfuIjFo+y4zvzPVdsHi6kcdVUVmX6Z4YvYmpUj2?= =?us-ascii?Q?WtHjWhwUfh0ZoaUamwSEPpQ/9byQRwSIEeuoz1J2e5Bk2ryVGNpQTZab0GAS?= =?us-ascii?Q?BUHyn2bOJ4n2M8gbx3H0vhwVmEtBy6cyh7ZvP0UhH6N2KQIfZx5j/YwbFgm5?= =?us-ascii?Q?PaGGi4qhMtq4aK7yKYy1IYvqox/jlbTJDB4ydh+yC8akH0Luzd+ic4a7XppY?= =?us-ascii?Q?2A75LXAfZsk+++Dd4WBzn4Rdkx4Ggrn2ny24AZvGZPhcZgWxVAmXfEB5AfIB?= =?us-ascii?Q?DFMfvEJRGTnS4mLmJeTnCVBc8Z1+k9abtdOXWtOg370ZTOdkROw3cc+i17wJ?= =?us-ascii?Q?Vv8mG9dDgaTAAesMuVQ6JnbnNjnpV+EkZiZ/VcKp+58bR2MBaVdYy0wVSHYP?= =?us-ascii?Q?WVe0HIuz+LuJ0ZnSfqHZONmCFVu3CeXnUbbSvIW/J3q2guMnd+orvRTjheUc?= =?us-ascii?Q?DGfse+aqtJjjRWRbbM+40q9Gjo56csJ4DG+ppI/vVenmDKp70arYdz1GQNqv?= =?us-ascii?Q?1ZDQTl6NWRbZluKtXxfqPAF3vXby5YBy9AthBEsJoT+dxbiYr63IpNCUGfN8?= =?us-ascii?Q?DQWiZfIJqWnaKkRfAUFBqDzyQcJj63k/NXPKIKcO5/r6YVmYT2ws+43AmW3Z?= =?us-ascii?Q?HIgpuqkTUAFhf8PRwNmiODqcT9jJjXSFddoWmkdQjDeAqpN1QcjH38ozHmgd?= =?us-ascii?Q?BZvRSnwDY27l2uOon2smwpzyo9HaHBMig6cLWMR5G3EHWbyYyZZ54fvtZ8sw?= =?us-ascii?Q?tJ3o1eya82wrtvIIjxLG5OG2H/RxmOfLc5EKFLzt3T/RByf7UoSat/ITUj3P?= =?us-ascii?Q?f2OU8dzzhCkWIZFXLlLitp/aSmTKhrH69B50EtloTter+uVySPVn15v9rKTw?= =?us-ascii?Q?9RbF4vCKlJRTPk0UEU8h10B1xIwnAFbn9WJe89RD8cUHN+2PGOqo8qS75Ox6?= =?us-ascii?Q?F3xQZ3l3OkaW1UQi/taKHnGLb4yv7D3ootwEchlNYBdcm1zvytp8qEP8zgNJ?= =?us-ascii?Q?a59p/z3eIZjZzmqaW3iWlq1H5q44kZ2RjTlX9f/cCtdfxr8vzIQpckxNSJFo?= =?us-ascii?Q?/L0qiEsBuJWLgZKMbSuwOXKmDTjxwFGNIp35OFUmE8kpEzV1enCPbGhlBbuf?= =?us-ascii?Q?DZrW5yszpo+ANZ1bxI78VMQNiCtC76IxfIrfg3SwdNImcDocBaO1KpYYIlfw?= =?us-ascii?Q?jhttgW4fJu3I2nQOM8aBwaEtHLrzPeYpnbUHpD1GaajRoT73PxIIjZHWgnnV?= =?us-ascii?Q?5o9ciXeuiHCC5Y2abwePSLqT8tURsxDgcVGfQGh9jTpL+KJXeHkZLYYmnVU/?= =?us-ascii?Q?XbSoAxYy9BLsbGuw0eanaK2RWsZYUt7MrPu/k6ux+P3Mbj4Mcdyu5J3a7DlB?= =?us-ascii?Q?XLaAYILGPVk21kH6cEgDTj4FY2nTbPOygg101qxAAHKLQlpuciXxJ1r9pqYf?= =?us-ascii?Q?jbeXGN2FkW4u3t5mlz3yDheDocFrSyFY?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB8218.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?TUtYFL4tDqST5be7qf0yQlu6kzowtuDTo1uqplZlKjvtxfFwQwuSkAFlYXav?= =?us-ascii?Q?ZCgF0Mhl4S8xpMCYNrvlmjwnrq4kqgxDwKaM897sh5zsm7xUp/f1sH3mHQ+k?= =?us-ascii?Q?Pv2bAX6QnsHvEf7ywOiVCwMeSar8DHW7HsI7rJvnIJy6jEdW+QH+96jAOfBA?= =?us-ascii?Q?+fgwr1duAXSDdaxMo7R2Gm1DWWbkJTDYM2Hx7NAbbt+vnnkT+GV4wCM6OMsR?= =?us-ascii?Q?UM5bwxseBQk6NZPVNqfGRuEPzdOQfobPK36QhYOZzm6V+7VZNhFpSnbEnFKF?= =?us-ascii?Q?bkFJvEL5BptfFVB1P1M3n65dUXB28jx9IElDzhfObcClMiSdhPH3kFG7UuwS?= =?us-ascii?Q?G+Hn+DdV+nIqy1bcQpSZxXupiRLlsJ6905LkKta3VjwXLSIfO9jun9ZO/JKd?= =?us-ascii?Q?IZWATVqP6bTtrfE4mzS1xCjTHNGX3g2cPyTc/uhOt7szIcTtu2e7FRSqOb/R?= =?us-ascii?Q?tEoZ2kI+NgKN/5ntjAtTYM7CXPaqmCg0mFmNtURZZg0ZtiY7sS92WHIXoFZx?= =?us-ascii?Q?Aus/enjB9IFeMSBfErIuWTr/HLW6938F26I+qUrR04IySRqQ55EhMM+JfEv9?= =?us-ascii?Q?aAD8y4/2pmA1oHhdkavhCidz6oRA4Xe1BQsTQbjg40ebeXHFhzmD42ZNsa4g?= =?us-ascii?Q?JllfgZZCopypJvIWS2JULoTg5LtNy01U+UTcbqKqO3GF2pkGPslOkAI1ifS0?= =?us-ascii?Q?oGfzzMhvHEYFG9/DTNYPDQCcl5dw/eYt2f723ta9BLSBLjoIDQW+R4704Os9?= =?us-ascii?Q?X+E50KFRR7GfL259GIsyvYn+QDXZvjyNRPZ6k9XUSyWv+U6pWESNBzmBAjIy?= =?us-ascii?Q?xg+84oeb1qxEsZumkabTWhH+imz1EWkwk27YanGRVA8lBgCQ/7Ob9fCAxSyr?= =?us-ascii?Q?oS3HRF9cydy4BD2HJE6h3E6tHC89S6+9Y8SDEtqdMsqyEVq3qXXQnKkV/h8e?= =?us-ascii?Q?vklnXl+Tj/0PdsfR+MBFLkaEAyRdrpTFi8LQliI7rLsDva5/7qxJURt4cd7Y?= =?us-ascii?Q?+0RS6L/SMT57Yz8Goe1/vsIC87Uf0+QGMTjpfDFbLuZN3pS6yKnI4Pp8tCGT?= =?us-ascii?Q?0lBn99uvwDYkPRveuNR1urYmQgKJGI4tej4NPBucDcPZastQl6HDP1XvMHhp?= =?us-ascii?Q?ptpNwzv2aT0gihK+IFW0FaoWMBnp4lOrUjpMV5ODj71+vTZJysWOEsu3SdD3?= =?us-ascii?Q?TawTxMzlNswF9JokiMhlRM1mYaHvtRZ+zsZZYiAQTLENbAdsPH7O7PJqJn00?= =?us-ascii?Q?OhIsci3h/nsCj+7jWH6ARGRDpodjJcLUX3tOBRxouuerUn5o14ejpXL1ZF4R?= =?us-ascii?Q?A1VJxIJpWd14UYO8G9PqJh+Jpmgm/ObFFeCKHTO1uXwcsNxa+gMMlPLR1Wpz?= =?us-ascii?Q?sd33JiiuYpI9N0/Ce9g09BuORpsC6TExUj8i7gxh57pee2DYPkC9S7S5wiIs?= =?us-ascii?Q?Pub/C7+yfPhMyVP61XqhVCv0gqP9i6IXVSY4rNxIGGW8UoQOupcVqFYOFyDA?= =?us-ascii?Q?mXdSTj9EfQcSEyqYwqCsDebJBpwHGs1rOPUA8uvulACl92Q73u8/Tg69zJmG?= =?us-ascii?Q?k6gbP9XWy65kl/Zbyp60Ep6i39Z37dSBVOfcgt68ry5zDNlp8ka8BWxLF3yI?= =?us-ascii?Q?9g=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: ppGpDTPLlLrIS4oFibP/7K0zzU5YGPEUtUb7wI1wkImXoa532ymNy2eLDpvHxM4vlWNT5sN3ER/zZwx6Cq5WN+RdnXBzFL5kFNH2gSFPQ1VEovHwDSiBxRcrE3tRwWUKx9B6VBtk/FpZX32JmDZBs4509lKp3faOsuflotYAZOB3ah++NP04SZk5ZYmYr1zS0LPsd6XEKpRc17s1TLyQW6OKZULsmfynjQmwlM20Mvv1GCFkwBDMrOx6nW6fExi87MPi3Rp/n2R+ICpjQCycgRPjLW9mt5/mWfy1n/rlJwonjNi33pMPU5+wx15WRRRdzF6b4Ar8M/yp6UMCSfZ8ErKkT+9Bf+49miTd4DpXk+29WMIytf5JmhYGJnG9Wv4pOfz7U86uIqllCnrXbYRE2ZmPLu+MQ+rB5SgMdE/hj5zN74j3LdXZAuMdKoyrqTCYMJIedCOO5Dd4fwcuV9Wjh/WXq/tX2Ot0Hmcb+i6QYNQ5ZUk5CDy7tHxb3nwRAr/XV96eF7+T1SXQYT3htSrOc5LrssbblVRXlL02ZbVAT6zjZiug27Z3BjhS1/hHAgk6M/KMcMyxjIR2imnvTNBrzS8Wr2ZyODroMrD/qYRrofw= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 939a8012-d536-45ae-c057-08de23816cef X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB8218.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2025 13:26:32.0425 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: iCyR50x4dJOtby1io0H8aY5JknAsSMDXOqrxJgz4Dh5baegcFKCP1Aoi7tuqUpA/An6sF1utZ21Frg5LeS9ybL9wwT86XF1jRUowTHSbg64= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA6PR10MB8061 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-14_03,2025-11-13_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 adultscore=0 bulkscore=0 suspectscore=0 spamscore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2510240000 definitions=main-2511140107 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTEzMDE3OCBTYWx0ZWRfX86lfUZsScoWP ZGjSHRdEoT98EkrgNu7/Tx8fKEng1TP9Wt0bLlvXwNwKlJscTdktwB13zTu7cAh0wK1rTg5xb4G ij937W5woKrP93o7Jn0aVVxENvBrFsBhK+hyL2/5V+lXLCnCW/U0gOZnL3iYtg0ebL/8S2Ztddb ogkfKxwlS5Jg9uTtzWBxqHcLtR4Kno5DVIyafTFMjRUb0biH4u9bh/StLITj1TKwkKzqplMv7T+ L7kdxVwtGjh9NeBD8d6Hf3R5aYUuqfnpZSsfrUBSCwaMN/TgiJS7qcS4eJ0nNXVgKK7WHjlUV+i P8wbBTSMtq0FFgf57DXxFxRuvsbZZ7e+3NQ3o1gUc4JCUCV5DXCrNqSjKOZd5MQDqy/zXA1Cp0F OHRFQelrHi4uvPA5c1OLbCJsj7iN+Q== X-Authority-Analysis: v=2.4 cv=WuYm8Nfv c=1 sm=1 tr=0 ts=69172e0f cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=6UeiqGixMTsA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=38wcqte6sxkpbDQlIZQA:9 a=UhEZJTgQB8St2RibIkdl:22 a=Z5ABNNGmrOfJ6cZ5bIyy:22 a=QOGEsqRv6VhmHaoFNykA:22 X-Proofpoint-GUID: uTWeAfTVsM0ItZXtQcnM2_dznmCDV6PY X-Proofpoint-ORIG-GUID: uTWeAfTVsM0ItZXtQcnM2_dznmCDV6PY Content-Type: text/plain; charset="utf-8" In order to lay the groundwork for VMA flags being a bitmap rather than a system word in size, we need to be able to consistently refer to VMA flags by bit number rather than value. Take this opportunity to do so in an enum which we which is additionally useful for tooling to extract metadata from. This additionally makes it very clear which bits are being used for what at a glance. We use the VMA_ prefix for the bit values as it is logical to do so since these reference VMAs. We consistently suffix with _BIT to make it clear what the values refer to. We declare bit values even when the flags that use them would not be enable= d by config options as this is simply clearer and clearly defines what bit numbers are used for what, at no additional cost. We declare a sparse-bitwise type vma_flag_t which ensures that users can't pass around invalid VMA flags by accident and prepares for future work towards VMA flags being a bitmap where we want to ensure bit values are type safe. To make life easier, we declare some macro helpers - DECLARE_VMA_BIT() allows us to avoid duplication in the enum bit number declarations (and maintaining the sparse __bitwise attribute), and INIT_VM_FLAG() is used to assist with declaration of flags. Unfortunately we can't declare both in the enum, as we run into issue with logic in the kernel requiring that flags are preprocessor definitions, and additionally we cannot have a macro which declares another macro so we must define each flag macro directly. Additionally, update the VMA userland testing vma_internal.h header to include these changes. We also have to fix the parameters to the vma_flag_*_atomic() functions since VMA_MAYBE_GUARD_BIT is now of type vma_flag_t and sparse will complain otherwise. We have to update some rather silly if-deffery found in mm/task_mmu.c which would otherwise break. Finally, we update the rust binding helper as now it cannot auto-detect the flags at all. Signed-off-by: Lorenzo Stoakes Acked-by: Vlastimil Babka --- fs/proc/task_mmu.c | 4 +- include/linux/mm.h | 384 +++++++++++++++++-------------- mm/khugepaged.c | 2 +- mm/madvise.c | 2 +- rust/bindings/bindings_helper.h | 25 ++ tools/testing/vma/vma_internal.h | 303 ++++++++++++++++++++---- 6 files changed, 504 insertions(+), 216 deletions(-) diff --git a/fs/proc/task_mmu.c b/fs/proc/task_mmu.c index 41b062ce6ad8..720d70623209 100644 --- a/fs/proc/task_mmu.c +++ b/fs/proc/task_mmu.c @@ -1183,10 +1183,10 @@ static void show_smap_vma_flags(struct seq_file *m,= struct vm_area_struct *vma) [ilog2(VM_PKEY_BIT0)] =3D "", [ilog2(VM_PKEY_BIT1)] =3D "", [ilog2(VM_PKEY_BIT2)] =3D "", -#if VM_PKEY_BIT3 +#if CONFIG_ARCH_PKEY_BITS > 3 [ilog2(VM_PKEY_BIT3)] =3D "", #endif -#if VM_PKEY_BIT4 +#if CONFIG_ARCH_PKEY_BITS > 4 [ilog2(VM_PKEY_BIT4)] =3D "", #endif #endif /* CONFIG_ARCH_HAS_PKEYS */ diff --git a/include/linux/mm.h b/include/linux/mm.h index 43eec43da66a..ad000c472bd5 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -271,185 +271,238 @@ extern struct rw_semaphore nommu_region_sem; extern unsigned int kobjsize(const void *objp); #endif =20 -#define VM_MAYBE_GUARD_BIT 11 - /* * vm_flags in vm_area_struct, see mm_types.h. * When changing, update also include/trace/events/mmflags.h */ -#define VM_NONE 0x00000000 =20 -#define VM_READ 0x00000001 /* currently active flags */ -#define VM_WRITE 0x00000002 -#define VM_EXEC 0x00000004 -#define VM_SHARED 0x00000008 +#define VM_NONE 0x00000000 =20 -/* mprotect() hardcodes VM_MAYREAD >> 4 =3D=3D VM_READ, and so for r/w/x b= its. */ -#define VM_MAYREAD 0x00000010 /* limits for mprotect() etc */ -#define VM_MAYWRITE 0x00000020 -#define VM_MAYEXEC 0x00000040 -#define VM_MAYSHARE 0x00000080 +/** + * typedef vma_flag_t - specifies an individual VMA flag by bit number. + * + * This value is made type safe by sparse to avoid passing invalid flag va= lues + * around. + */ +typedef int __bitwise vma_flag_t; =20 -#define VM_GROWSDOWN 0x00000100 /* general info on the segment */ +#define DECLARE_VMA_BIT(name, bitnum) \ + VMA_ ## name ## _BIT =3D ((__force vma_flag_t)bitnum) +#define DECLARE_VMA_BIT_ALIAS(name, aliased) \ + VMA_ ## name ## _BIT =3D (VMA_ ## aliased ## _BIT) +enum { + DECLARE_VMA_BIT(READ, 0), + DECLARE_VMA_BIT(WRITE, 1), + DECLARE_VMA_BIT(EXEC, 2), + DECLARE_VMA_BIT(SHARED, 3), + /* mprotect() hardcodes VM_MAYREAD >> 4 =3D=3D VM_READ, and so for r/w/x = bits. */ + DECLARE_VMA_BIT(MAYREAD, 4), /* limits for mprotect() etc. */ + DECLARE_VMA_BIT(MAYWRITE, 5), + DECLARE_VMA_BIT(MAYEXEC, 6), + DECLARE_VMA_BIT(MAYSHARE, 7), + DECLARE_VMA_BIT(GROWSDOWN, 8), /* general info on the segment */ #ifdef CONFIG_MMU -#define VM_UFFD_MISSING 0x00000200 /* missing pages tracking */ -#else /* CONFIG_MMU */ -#define VM_MAYOVERLAY 0x00000200 /* nommu: R/O MAP_PRIVATE mapping that mi= ght overlay a file mapping */ -#define VM_UFFD_MISSING 0 + DECLARE_VMA_BIT(UFFD_MISSING, 9),/* missing pages tracking */ +#else + /* nommu: R/O MAP_PRIVATE mapping that might overlay a file mapping */ + DECLARE_VMA_BIT(MAYOVERLAY, 9), #endif /* CONFIG_MMU */ -#define VM_PFNMAP 0x00000400 /* Page-ranges managed without "struct page",= just pure PFN */ -#define VM_MAYBE_GUARD BIT(VM_MAYBE_GUARD_BIT) /* The VMA maybe contains g= uard regions. */ -#define VM_UFFD_WP 0x00001000 /* wrprotect pages tracking */ - -#define VM_LOCKED 0x00002000 -#define VM_IO 0x00004000 /* Memory mapped I/O or similar */ - - /* Used by sys_madvise() */ -#define VM_SEQ_READ 0x00008000 /* App will access data sequentially */ -#define VM_RAND_READ 0x00010000 /* App will not benefit from clustered rea= ds */ - -#define VM_DONTCOPY 0x00020000 /* Do not copy this vma on fork */ -#define VM_DONTEXPAND 0x00040000 /* Cannot expand with mremap() */ -#define VM_LOCKONFAULT 0x00080000 /* Lock the pages covered when they are = faulted in */ -#define VM_ACCOUNT 0x00100000 /* Is a VM accounted object */ -#define VM_NORESERVE 0x00200000 /* should the VM suppress accounting */ -#define VM_HUGETLB 0x00400000 /* Huge TLB Page VM */ -#define VM_SYNC 0x00800000 /* Synchronous page faults */ -#define VM_ARCH_1 0x01000000 /* Architecture-specific flag */ -#define VM_WIPEONFORK 0x02000000 /* Wipe VMA contents in child. */ -#define VM_DONTDUMP 0x04000000 /* Do not include in the core dump */ - + /* Page-ranges managed without "struct page", just pure PFN */ + DECLARE_VMA_BIT(PFNMAP, 10), + DECLARE_VMA_BIT(MAYBE_GUARD, 11), + DECLARE_VMA_BIT(UFFD_WP, 12), /* wrprotect pages tracking */ + DECLARE_VMA_BIT(LOCKED, 13), + DECLARE_VMA_BIT(IO, 14), /* Memory mapped I/O or similar */ + DECLARE_VMA_BIT(SEQ_READ, 15), /* App will access data sequentially */ + DECLARE_VMA_BIT(RAND_READ, 16), /* App will not benefit from clustered re= ads */ + DECLARE_VMA_BIT(DONTCOPY, 17), /* Do not copy this vma on fork */ + DECLARE_VMA_BIT(DONTEXPAND, 18),/* Cannot expand with mremap() */ + DECLARE_VMA_BIT(LOCKONFAULT, 19),/* Lock pages covered when faulted in */ + DECLARE_VMA_BIT(ACCOUNT, 20), /* Is a VM accounted object */ + DECLARE_VMA_BIT(NORESERVE, 21), /* should the VM suppress accounting */ + DECLARE_VMA_BIT(HUGETLB, 22), /* Huge TLB Page VM */ + DECLARE_VMA_BIT(SYNC, 23), /* Synchronous page faults */ + DECLARE_VMA_BIT(ARCH_1, 24), /* Architecture-specific flag */ + DECLARE_VMA_BIT(WIPEONFORK, 25),/* Wipe VMA contents in child. */ + DECLARE_VMA_BIT(DONTDUMP, 26), /* Do not include in the core dump */ + DECLARE_VMA_BIT(SOFTDIRTY, 27), /* NOT soft dirty clean area */ + DECLARE_VMA_BIT(MIXEDMAP, 28), /* Can contain struct page and pure PFN pa= ges */ + DECLARE_VMA_BIT(HUGEPAGE, 29), /* MADV_HUGEPAGE marked this vma */ + DECLARE_VMA_BIT(NOHUGEPAGE, 30),/* MADV_NOHUGEPAGE marked this vma */ + DECLARE_VMA_BIT(MERGEABLE, 31), /* KSM may merge identical pages */ + /* These bits are reused, we define specific uses below. */ + DECLARE_VMA_BIT(HIGH_ARCH_0, 32), + DECLARE_VMA_BIT(HIGH_ARCH_1, 33), + DECLARE_VMA_BIT(HIGH_ARCH_2, 34), + DECLARE_VMA_BIT(HIGH_ARCH_3, 35), + DECLARE_VMA_BIT(HIGH_ARCH_4, 36), + DECLARE_VMA_BIT(HIGH_ARCH_5, 37), + DECLARE_VMA_BIT(HIGH_ARCH_6, 38), + /* + * This flag is used to connect VFIO to arch specific KVM code. It + * indicates that the memory under this VMA is safe for use with any + * non-cachable memory type inside KVM. Some VFIO devices, on some + * platforms, are thought to be unsafe and can cause machine crashes + * if KVM does not lock down the memory type. + */ + DECLARE_VMA_BIT(ALLOW_ANY_UNCACHED, 39), +#ifdef CONFIG_PPC32 + DECLARE_VMA_BIT_ALIAS(DROPPABLE, ARCH_1), +#else + DECLARE_VMA_BIT(DROPPABLE, 40), +#endif + DECLARE_VMA_BIT(UFFD_MINOR, 41), + DECLARE_VMA_BIT(SEALED, 42), + /* Flags that reuse flags above. */ + DECLARE_VMA_BIT_ALIAS(PKEY_BIT0, HIGH_ARCH_0), + DECLARE_VMA_BIT_ALIAS(PKEY_BIT1, HIGH_ARCH_1), + DECLARE_VMA_BIT_ALIAS(PKEY_BIT2, HIGH_ARCH_2), + DECLARE_VMA_BIT_ALIAS(PKEY_BIT3, HIGH_ARCH_3), + DECLARE_VMA_BIT_ALIAS(PKEY_BIT4, HIGH_ARCH_4), +#if defined(CONFIG_X86_USER_SHADOW_STACK) + /* + * VM_SHADOW_STACK should not be set with VM_SHARED because of lack of + * support core mm. + * + * These VMAs will get a single end guard page. This helps userspace + * protect itself from attacks. A single page is enough for current + * shadow stack archs (x86). See the comments near alloc_shstk() in + * arch/x86/kernel/shstk.c for more details on the guard size. + */ + DECLARE_VMA_BIT_ALIAS(SHADOW_STACK, HIGH_ARCH_5), +#elif defined(CONFIG_ARM64_GCS) + /* + * arm64's Guarded Control Stack implements similar functionality and + * has similar constraints to shadow stacks. + */ + DECLARE_VMA_BIT_ALIAS(SHADOW_STACK, HIGH_ARCH_6), +#endif + DECLARE_VMA_BIT_ALIAS(SAO, ARCH_1), /* Strong Access Ordering (powerpc) = */ + DECLARE_VMA_BIT_ALIAS(GROWSUP, ARCH_1), /* parisc */ + DECLARE_VMA_BIT_ALIAS(SPARC_ADI, ARCH_1), /* sparc64 */ + DECLARE_VMA_BIT_ALIAS(ARM64_BTI, ARCH_1), /* arm64 */ + DECLARE_VMA_BIT_ALIAS(ARCH_CLEAR, ARCH_1), /* sparc64, arm64 */ + DECLARE_VMA_BIT_ALIAS(MAPPED_COPY, ARCH_1), /* !CONFIG_MMU */ + DECLARE_VMA_BIT_ALIAS(MTE, HIGH_ARCH_4), /* arm64 */ + DECLARE_VMA_BIT_ALIAS(MTE_ALLOWED, HIGH_ARCH_5),/* arm64 */ +#ifdef CONFIG_STACK_GROWSUP + DECLARE_VMA_BIT_ALIAS(STACK, GROWSUP), + DECLARE_VMA_BIT_ALIAS(STACK_EARLY, GROWSDOWN), +#else + DECLARE_VMA_BIT_ALIAS(STACK, GROWSDOWN), +#endif +}; +#undef DECLARE_VMA_BIT +#undef DECLARE_VMA_BIT_ALIAS + +#define INIT_VM_FLAG(name) BIT((__force int) VMA_ ## name ## _BIT) +#define VM_READ INIT_VM_FLAG(READ) +#define VM_WRITE INIT_VM_FLAG(WRITE) +#define VM_EXEC INIT_VM_FLAG(EXEC) +#define VM_SHARED INIT_VM_FLAG(SHARED) +#define VM_MAYREAD INIT_VM_FLAG(MAYREAD) +#define VM_MAYWRITE INIT_VM_FLAG(MAYWRITE) +#define VM_MAYEXEC INIT_VM_FLAG(MAYEXEC) +#define VM_MAYSHARE INIT_VM_FLAG(MAYSHARE) +#define VM_GROWSDOWN INIT_VM_FLAG(GROWSDOWN) +#ifdef CONFIG_MMU +#define VM_UFFD_MISSING INIT_VM_FLAG(UFFD_MISSING) +#else +#define VM_UFFD_MISSING VM_NONE +#endif +#define VM_PFNMAP INIT_VM_FLAG(PFNMAP) +#define VM_MAYBE_GUARD INIT_VM_FLAG(MAYBE_GUARD) +#define VM_UFFD_WP INIT_VM_FLAG(UFFD_WP) +#define VM_LOCKED INIT_VM_FLAG(LOCKED) +#define VM_IO INIT_VM_FLAG(IO) +#define VM_SEQ_READ INIT_VM_FLAG(SEQ_READ) +#define VM_RAND_READ INIT_VM_FLAG(RAND_READ) +#define VM_DONTCOPY INIT_VM_FLAG(DONTCOPY) +#define VM_DONTEXPAND INIT_VM_FLAG(DONTEXPAND) +#define VM_LOCKONFAULT INIT_VM_FLAG(LOCKONFAULT) +#define VM_ACCOUNT INIT_VM_FLAG(ACCOUNT) +#define VM_NORESERVE INIT_VM_FLAG(NORESERVE) +#define VM_HUGETLB INIT_VM_FLAG(HUGETLB) +#define VM_SYNC INIT_VM_FLAG(SYNC) +#define VM_ARCH_1 INIT_VM_FLAG(ARCH_1) +#define VM_WIPEONFORK INIT_VM_FLAG(WIPEONFORK) +#define VM_DONTDUMP INIT_VM_FLAG(DONTDUMP) #ifdef CONFIG_MEM_SOFT_DIRTY -# define VM_SOFTDIRTY 0x08000000 /* Not soft dirty clean area */ +#define VM_SOFTDIRTY INIT_VM_FLAG(SOFTDIRTY) #else -# define VM_SOFTDIRTY 0 +#define VM_SOFTDIRTY VM_NONE +#endif +#define VM_MIXEDMAP INIT_VM_FLAG(MIXEDMAP) +#define VM_HUGEPAGE INIT_VM_FLAG(HUGEPAGE) +#define VM_NOHUGEPAGE INIT_VM_FLAG(NOHUGEPAGE) +#define VM_MERGEABLE INIT_VM_FLAG(MERGEABLE) +#define VM_STACK INIT_VM_FLAG(STACK) +#ifdef CONFIG_STACK_GROWS_UP +#define VM_STACK_EARLY INIT_VM_FLAG(STACK_EARLY) +#else +#define VM_STACK_EARLY VM_NONE #endif - -#define VM_MIXEDMAP 0x10000000 /* Can contain "struct page" and pure PFN p= ages */ -#define VM_HUGEPAGE 0x20000000 /* MADV_HUGEPAGE marked this vma */ -#define VM_NOHUGEPAGE 0x40000000 /* MADV_NOHUGEPAGE marked this vma */ -#define VM_MERGEABLE BIT(31) /* KSM may merge identical pages */ - -#ifdef CONFIG_ARCH_USES_HIGH_VMA_FLAGS -#define VM_HIGH_ARCH_BIT_0 32 /* bit only usable on 64-bit architectures */ -#define VM_HIGH_ARCH_BIT_1 33 /* bit only usable on 64-bit architectures */ -#define VM_HIGH_ARCH_BIT_2 34 /* bit only usable on 64-bit architectures */ -#define VM_HIGH_ARCH_BIT_3 35 /* bit only usable on 64-bit architectures */ -#define VM_HIGH_ARCH_BIT_4 36 /* bit only usable on 64-bit architectures */ -#define VM_HIGH_ARCH_BIT_5 37 /* bit only usable on 64-bit architectures */ -#define VM_HIGH_ARCH_BIT_6 38 /* bit only usable on 64-bit architectures */ -#define VM_HIGH_ARCH_0 BIT(VM_HIGH_ARCH_BIT_0) -#define VM_HIGH_ARCH_1 BIT(VM_HIGH_ARCH_BIT_1) -#define VM_HIGH_ARCH_2 BIT(VM_HIGH_ARCH_BIT_2) -#define VM_HIGH_ARCH_3 BIT(VM_HIGH_ARCH_BIT_3) -#define VM_HIGH_ARCH_4 BIT(VM_HIGH_ARCH_BIT_4) -#define VM_HIGH_ARCH_5 BIT(VM_HIGH_ARCH_BIT_5) -#define VM_HIGH_ARCH_6 BIT(VM_HIGH_ARCH_BIT_6) -#endif /* CONFIG_ARCH_USES_HIGH_VMA_FLAGS */ - #ifdef CONFIG_ARCH_HAS_PKEYS -# define VM_PKEY_SHIFT VM_HIGH_ARCH_BIT_0 -# define VM_PKEY_BIT0 VM_HIGH_ARCH_0 -# define VM_PKEY_BIT1 VM_HIGH_ARCH_1 -# define VM_PKEY_BIT2 VM_HIGH_ARCH_2 +#define VM_PKEY_SHIFT ((__force int)VMA_HIGH_ARCH_0_BIT) +/* Despite the naming, these are FLAGS not bits. */ +#define VM_PKEY_BIT0 INIT_VM_FLAG(PKEY_BIT0) +#define VM_PKEY_BIT1 INIT_VM_FLAG(PKEY_BIT1) +#define VM_PKEY_BIT2 INIT_VM_FLAG(PKEY_BIT2) #if CONFIG_ARCH_PKEY_BITS > 3 -# define VM_PKEY_BIT3 VM_HIGH_ARCH_3 +#define VM_PKEY_BIT3 INIT_VM_FLAG(PKEY_BIT3) #else -# define VM_PKEY_BIT3 0 -#endif +#define VM_PKEY_BIT3 VM_NONE +#endif /* CONFIG_ARCH_PKEY_BITS > 3 */ #if CONFIG_ARCH_PKEY_BITS > 4 -# define VM_PKEY_BIT4 VM_HIGH_ARCH_4 +#define VM_PKEY_BIT4 INIT_VM_FLAG(PKEY_BIT4) #else -# define VM_PKEY_BIT4 0 -#endif +#define VM_PKEY_BIT4 VM_NONE +#endif /* CONFIG_ARCH_PKEY_BITS > 4 */ #endif /* CONFIG_ARCH_HAS_PKEYS */ - -#ifdef CONFIG_X86_USER_SHADOW_STACK -/* - * VM_SHADOW_STACK should not be set with VM_SHARED because of lack of - * support core mm. - * - * These VMAs will get a single end guard page. This helps userspace prote= ct - * itself from attacks. A single page is enough for current shadow stack a= rchs - * (x86). See the comments near alloc_shstk() in arch/x86/kernel/shstk.c - * for more details on the guard size. - */ -# define VM_SHADOW_STACK VM_HIGH_ARCH_5 -#endif - -#if defined(CONFIG_ARM64_GCS) -/* - * arm64's Guarded Control Stack implements similar functionality and - * has similar constraints to shadow stacks. - */ -# define VM_SHADOW_STACK VM_HIGH_ARCH_6 -#endif - -#ifndef VM_SHADOW_STACK -# define VM_SHADOW_STACK VM_NONE +#if defined(CONFIG_X86_USER_SHADOW_STACK) || defined(CONFIG_ARM64_GCS) +#define VM_SHADOW_STACK INIT_VM_FLAG(SHADOW_STACK) +#else +#define VM_SHADOW_STACK VM_NONE #endif - #if defined(CONFIG_PPC64) -# define VM_SAO VM_ARCH_1 /* Strong Access Ordering (powerpc) */ +#define VM_SAO INIT_VM_FLAG(SAO) #elif defined(CONFIG_PARISC) -# define VM_GROWSUP VM_ARCH_1 +#define VM_GROWSUP INIT_VM_FLAG(GROWSUP) #elif defined(CONFIG_SPARC64) -# define VM_SPARC_ADI VM_ARCH_1 /* Uses ADI tag for access control */ -# define VM_ARCH_CLEAR VM_SPARC_ADI +#define VM_SPARC_ADI INIT_VM_FLAG(SPARC_ADI) +#define VM_ARCH_CLEAR INIT_VM_FLAG(ARCH_CLEAR) #elif defined(CONFIG_ARM64) -# define VM_ARM64_BTI VM_ARCH_1 /* BTI guarded page, a.k.a. GP bit */ -# define VM_ARCH_CLEAR VM_ARM64_BTI +#define VM_ARM64_BTI INIT_VM_FLAG(ARM64_BTI) +#define VM_ARCH_CLEAR INIT_VM_FLAG(ARCH_CLEAR) #elif !defined(CONFIG_MMU) -# define VM_MAPPED_COPY VM_ARCH_1 /* T if mapped copy of data (nommu mmap)= */ +#define VM_MAPPED_COPY INIT_VM_FLAG(MAPPED_COPY) #endif - -#if defined(CONFIG_ARM64_MTE) -# define VM_MTE VM_HIGH_ARCH_4 /* Use Tagged memory for access control */ -# define VM_MTE_ALLOWED VM_HIGH_ARCH_5 /* Tagged memory permitted */ -#else -# define VM_MTE VM_NONE -# define VM_MTE_ALLOWED VM_NONE -#endif - #ifndef VM_GROWSUP -# define VM_GROWSUP VM_NONE +#define VM_GROWSUP VM_NONE +#endif +#ifdef CONFIG_ARM64_MTE +#define VM_MTE INIT_VM_FLAG(MTE) +#define VM_MTE_ALLOWED INIT_VM_FLAG(MTE_ALLOWED) +#else +#define VM_MTE VM_NONE +#define VM_MTE_ALLOWED VM_NONE #endif - #ifdef CONFIG_HAVE_ARCH_USERFAULTFD_MINOR -# define VM_UFFD_MINOR_BIT 41 -# define VM_UFFD_MINOR BIT(VM_UFFD_MINOR_BIT) /* UFFD minor faults */ -#else /* !CONFIG_HAVE_ARCH_USERFAULTFD_MINOR */ -# define VM_UFFD_MINOR VM_NONE -#endif /* CONFIG_HAVE_ARCH_USERFAULTFD_MINOR */ - -/* - * This flag is used to connect VFIO to arch specific KVM code. It - * indicates that the memory under this VMA is safe for use with any - * non-cachable memory type inside KVM. Some VFIO devices, on some - * platforms, are thought to be unsafe and can cause machine crashes - * if KVM does not lock down the memory type. - */ -#ifdef CONFIG_64BIT -#define VM_ALLOW_ANY_UNCACHED_BIT 39 -#define VM_ALLOW_ANY_UNCACHED BIT(VM_ALLOW_ANY_UNCACHED_BIT) +#define VM_UFFD_MINOR INIT_VM_FLAG(UFFD_MINOR) #else -#define VM_ALLOW_ANY_UNCACHED VM_NONE +#define VM_UFFD_MINOR VM_NONE #endif - #ifdef CONFIG_64BIT -#define VM_DROPPABLE_BIT 40 -#define VM_DROPPABLE BIT(VM_DROPPABLE_BIT) -#elif defined(CONFIG_PPC32) -#define VM_DROPPABLE VM_ARCH_1 +#define VM_ALLOW_ANY_UNCACHED INIT_VM_FLAG(ALLOW_ANY_UNCACHED) +#define VM_SEALED INIT_VM_FLAG(SEALED) #else -#define VM_DROPPABLE VM_NONE +#define VM_ALLOW_ANY_UNCACHED VM_NONE +#define VM_SEALED VM_NONE #endif - -#ifdef CONFIG_64BIT -#define VM_SEALED_BIT 42 -#define VM_SEALED BIT(VM_SEALED_BIT) +#if defined(CONFIG_64BIT) || defined(CONFIG_PPC32) +#define VM_DROPPABLE INIT_VM_FLAG(DROPPABLE) #else -#define VM_SEALED VM_NONE +#define VM_DROPPABLE VM_NONE #endif =20 /* Bits set in the VMA until the stack is in its final location */ @@ -475,12 +528,18 @@ extern unsigned int kobjsize(const void *objp); =20 #define VM_STARTGAP_FLAGS (VM_GROWSDOWN | VM_SHADOW_STACK) =20 + + #ifdef CONFIG_STACK_GROWSUP -#define VM_STACK VM_GROWSUP -#define VM_STACK_EARLY VM_GROWSDOWN +#define VM_STACK_EARLY VMA_BIT(VMA_STACK_EARLY_BIT) +#else +#define VM_STACK_EARLY VM_NONE +#endif + +#ifdef CONFIG_MSEAL_SYSTEM_MAPPINGS +#define VM_SEALED_SYSMAP VM_SEALED #else -#define VM_STACK VM_GROWSDOWN -#define VM_STACK_EARLY 0 +#define VM_SEALED_SYSMAP VM_NONE #endif =20 #define VM_STACK_FLAGS (VM_STACK | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT) @@ -488,7 +547,6 @@ extern unsigned int kobjsize(const void *objp); /* VMA basic access permission flags */ #define VM_ACCESS_FLAGS (VM_READ | VM_WRITE | VM_EXEC) =20 - /* * Special vmas that are non-mergable, non-mlock()able. */ @@ -523,7 +581,7 @@ extern unsigned int kobjsize(const void *objp); =20 /* Arch-specific flags to clear when updating VM flags on protection chang= e */ #ifndef VM_ARCH_CLEAR -# define VM_ARCH_CLEAR VM_NONE +#define VM_ARCH_CLEAR VM_NONE #endif #define VM_FLAGS_CLEAR (ARCH_VM_PKEY_FLAGS | VM_ARCH_CLEAR) =20 @@ -919,9 +977,9 @@ static inline void vm_flags_mod(struct vm_area_struct *= vma, } =20 static inline bool __vma_flag_atomic_valid(struct vm_area_struct *vma, - int bit) + vma_flag_t bit) { - const vm_flags_t mask =3D BIT(bit); + const vm_flags_t mask =3D BIT((__force int)bit); =20 /* Only specific flags are permitted */ if (WARN_ON_ONCE(!(mask & VM_ATOMIC_SET_ALLOWED))) @@ -934,14 +992,15 @@ static inline bool __vma_flag_atomic_valid(struct vm_= area_struct *vma, * Set VMA flag atomically. Requires only VMA/mmap read lock. Only specific * valid flags are allowed to do this. */ -static inline void vma_flag_set_atomic(struct vm_area_struct *vma, int bit) +static inline void vma_flag_set_atomic(struct vm_area_struct *vma, + vma_flag_t bit) { /* mmap read lock/VMA read lock must be held. */ if (!rwsem_is_locked(&vma->vm_mm->mmap_lock)) vma_assert_locked(vma); =20 if (__vma_flag_atomic_valid(vma, bit)) - set_bit(bit, &ACCESS_PRIVATE(vma, __vm_flags)); + set_bit((__force int)bit, &ACCESS_PRIVATE(vma, __vm_flags)); } =20 /* @@ -951,10 +1010,11 @@ static inline void vma_flag_set_atomic(struct vm_are= a_struct *vma, int bit) * This is necessarily racey, so callers must ensure that serialisation is * achieved through some other means, or that races are permissible. */ -static inline bool vma_flag_test_atomic(struct vm_area_struct *vma, int bi= t) +static inline bool vma_flag_test_atomic(struct vm_area_struct *vma, + vma_flag_t bit) { if (__vma_flag_atomic_valid(vma, bit)) - return test_bit(bit, &vma->vm_flags); + return test_bit((__force int)bit, &vma->vm_flags); =20 return false; } @@ -4515,16 +4575,6 @@ int arch_get_shadow_stack_status(struct task_struct = *t, unsigned long __user *st int arch_set_shadow_stack_status(struct task_struct *t, unsigned long stat= us); int arch_lock_shadow_stack_status(struct task_struct *t, unsigned long sta= tus); =20 - -/* - * mseal of userspace process's system mappings. - */ -#ifdef CONFIG_MSEAL_SYSTEM_MAPPINGS -#define VM_SEALED_SYSMAP VM_SEALED -#else -#define VM_SEALED_SYSMAP VM_NONE -#endif - /* * DMA mapping IDs for page_pool * diff --git a/mm/khugepaged.c b/mm/khugepaged.c index 7e8cb181d5bd..746cb16f6466 100644 --- a/mm/khugepaged.c +++ b/mm/khugepaged.c @@ -1742,7 +1742,7 @@ static bool file_backed_vma_is_retractable(struct vm_= area_struct *vma) * obtained on guard region installation after the flag is set, so this * check being performed under this lock excludes races. */ - if (vma_flag_test_atomic(vma, VM_MAYBE_GUARD_BIT)) + if (vma_flag_test_atomic(vma, VMA_MAYBE_GUARD_BIT)) return false; =20 return true; diff --git a/mm/madvise.c b/mm/madvise.c index 52a10ed80c07..84fc0e63011f 100644 --- a/mm/madvise.c +++ b/mm/madvise.c @@ -1142,7 +1142,7 @@ static long madvise_guard_install(struct madvise_beha= vior *madv_behavior) * acquire an mmap/VMA write lock to read it. All remaining readers may * or may not see the flag set, but we don't care. */ - vma_flag_set_atomic(vma, VM_MAYBE_GUARD_BIT); + vma_flag_set_atomic(vma, VMA_MAYBE_GUARD_BIT); =20 /* * If anonymous and we are establishing page tables the VMA ought to diff --git a/rust/bindings/bindings_helper.h b/rust/bindings/bindings_helpe= r.h index 2e43c66635a2..4c327db01ca0 100644 --- a/rust/bindings/bindings_helper.h +++ b/rust/bindings/bindings_helper.h @@ -108,7 +108,32 @@ const xa_mark_t RUST_CONST_HELPER_XA_PRESENT =3D XA_PR= ESENT; =20 const gfp_t RUST_CONST_HELPER_XA_FLAGS_ALLOC =3D XA_FLAGS_ALLOC; const gfp_t RUST_CONST_HELPER_XA_FLAGS_ALLOC1 =3D XA_FLAGS_ALLOC1; + const vm_flags_t RUST_CONST_HELPER_VM_MERGEABLE =3D VM_MERGEABLE; +const vm_flags_t RUST_CONST_HELPER_VM_READ =3D VM_READ; +const vm_flags_t RUST_CONST_HELPER_VM_WRITE =3D VM_WRITE; +const vm_flags_t RUST_CONST_HELPER_VM_EXEC =3D VM_EXEC; +const vm_flags_t RUST_CONST_HELPER_VM_SHARED =3D VM_SHARED; +const vm_flags_t RUST_CONST_HELPER_VM_MAYREAD =3D VM_MAYREAD; +const vm_flags_t RUST_CONST_HELPER_VM_MAYWRITE =3D VM_MAYWRITE; +const vm_flags_t RUST_CONST_HELPER_VM_MAYEXEC =3D VM_MAYEXEC; +const vm_flags_t RUST_CONST_HELPER_VM_MAYSHARE =3D VM_MAYEXEC; +const vm_flags_t RUST_CONST_HELPER_VM_PFNMAP =3D VM_PFNMAP; +const vm_flags_t RUST_CONST_HELPER_VM_IO =3D VM_IO; +const vm_flags_t RUST_CONST_HELPER_VM_DONTCOPY =3D VM_DONTCOPY; +const vm_flags_t RUST_CONST_HELPER_VM_DONTEXPAND =3D VM_DONTEXPAND; +const vm_flags_t RUST_CONST_HELPER_VM_LOCKONFAULT =3D VM_LOCKONFAULT; +const vm_flags_t RUST_CONST_HELPER_VM_ACCOUNT =3D VM_ACCOUNT; +const vm_flags_t RUST_CONST_HELPER_VM_NORESERVE =3D VM_NORESERVE; +const vm_flags_t RUST_CONST_HELPER_VM_HUGETLB =3D VM_HUGETLB; +const vm_flags_t RUST_CONST_HELPER_VM_SYNC =3D VM_SYNC; +const vm_flags_t RUST_CONST_HELPER_VM_ARCH_1 =3D VM_ARCH_1; +const vm_flags_t RUST_CONST_HELPER_VM_WIPEONFORK =3D VM_WIPEONFORK; +const vm_flags_t RUST_CONST_HELPER_VM_DONTDUMP =3D VM_DONTDUMP; +const vm_flags_t RUST_CONST_HELPER_VM_SOFTDIRTY =3D VM_SOFTDIRTY; +const vm_flags_t RUST_CONST_HELPER_VM_MIXEDMAP =3D VM_MIXEDMAP; +const vm_flags_t RUST_CONST_HELPER_VM_HUGEPAGE =3D VM_HUGEPAGE; +const vm_flags_t RUST_CONST_HELPER_VM_NOHUGEPAGE =3D VM_NOHUGEPAGE; =20 #if IS_ENABLED(CONFIG_ANDROID_BINDER_IPC_RUST) #include "../../drivers/android/binder/rust_binder.h" diff --git a/tools/testing/vma/vma_internal.h b/tools/testing/vma/vma_inter= nal.h index bd6352a5f24d..18659214e262 100644 --- a/tools/testing/vma/vma_internal.h +++ b/tools/testing/vma/vma_internal.h @@ -46,42 +46,270 @@ extern unsigned long dac_mmap_min_addr; =20 #define MMF_HAS_MDWE 28 =20 +/* + * vm_flags in vm_area_struct, see mm_types.h. + * When changing, update also include/trace/events/mmflags.h + */ + #define VM_NONE 0x00000000 -#define VM_READ 0x00000001 -#define VM_WRITE 0x00000002 -#define VM_EXEC 0x00000004 -#define VM_SHARED 0x00000008 -#define VM_MAYREAD 0x00000010 -#define VM_MAYWRITE 0x00000020 -#define VM_MAYEXEC 0x00000040 -#define VM_GROWSDOWN 0x00000100 -#define VM_PFNMAP 0x00000400 -#define VM_MAYBE_GUARD 0x00000800 -#define VM_LOCKED 0x00002000 -#define VM_IO 0x00004000 -#define VM_SEQ_READ 0x00008000 /* App will access data sequentially */ -#define VM_RAND_READ 0x00010000 /* App will not benefit from clustered rea= ds */ -#define VM_DONTEXPAND 0x00040000 -#define VM_LOCKONFAULT 0x00080000 -#define VM_ACCOUNT 0x00100000 -#define VM_NORESERVE 0x00200000 -#define VM_MIXEDMAP 0x10000000 -#define VM_STACK VM_GROWSDOWN -#define VM_SHADOW_STACK VM_NONE -#define VM_SOFTDIRTY 0 -#define VM_ARCH_1 0x01000000 /* Architecture-specific flag */ -#define VM_GROWSUP VM_NONE =20 -#define VM_ACCESS_FLAGS (VM_READ | VM_WRITE | VM_EXEC) -#define VM_SPECIAL (VM_IO | VM_DONTEXPAND | VM_PFNMAP | VM_MIXEDMAP) +/** + * typedef vma_flag_t - specifies an individual VMA flag by bit number. + * + * This value is made type safe by sparse to avoid passing invalid flag va= lues + * around. + */ +typedef int __bitwise vma_flag_t; =20 +#define DECLARE_VMA_BIT(name, bitnum) \ + VMA_ ## name ## _BIT =3D ((__force vma_flag_t)bitnum) +#define DECLARE_VMA_BIT_ALIAS(name, aliased) \ + VMA_ ## name ## _BIT =3D VMA_ ## aliased ## _BIT +enum { + DECLARE_VMA_BIT(READ, 0), + DECLARE_VMA_BIT(WRITE, 1), + DECLARE_VMA_BIT(EXEC, 2), + DECLARE_VMA_BIT(SHARED, 3), + /* mprotect() hardcodes VM_MAYREAD >> 4 =3D=3D VM_READ, and so for r/w/x = bits. */ + DECLARE_VMA_BIT(MAYREAD, 4), /* limits for mprotect() etc. */ + DECLARE_VMA_BIT(MAYWRITE, 5), + DECLARE_VMA_BIT(MAYEXEC, 6), + DECLARE_VMA_BIT(MAYSHARE, 7), + DECLARE_VMA_BIT(GROWSDOWN, 8), /* general info on the segment */ +#ifdef CONFIG_MMU + DECLARE_VMA_BIT(UFFD_MISSING, 9),/* missing pages tracking */ +#else + /* nommu: R/O MAP_PRIVATE mapping that might overlay a file mapping */ + DECLARE_VMA_BIT(MAYOVERLAY, 9), +#endif /* CONFIG_MMU */ + /* Page-ranges managed without "struct page", just pure PFN */ + DECLARE_VMA_BIT(PFNMAP, 10), + DECLARE_VMA_BIT(MAYBE_GUARD, 11), + DECLARE_VMA_BIT(UFFD_WP, 12), /* wrprotect pages tracking */ + DECLARE_VMA_BIT(LOCKED, 13), + DECLARE_VMA_BIT(IO, 14), /* Memory mapped I/O or similar */ + DECLARE_VMA_BIT(SEQ_READ, 15), /* App will access data sequentially */ + DECLARE_VMA_BIT(RAND_READ, 16), /* App will not benefit from clustered re= ads */ + DECLARE_VMA_BIT(DONTCOPY, 17), /* Do not copy this vma on fork */ + DECLARE_VMA_BIT(DONTEXPAND, 18),/* Cannot expand with mremap() */ + DECLARE_VMA_BIT(LOCKONFAULT, 19),/* Lock pages covered when faulted in */ + DECLARE_VMA_BIT(ACCOUNT, 20), /* Is a VM accounted object */ + DECLARE_VMA_BIT(NORESERVE, 21), /* should the VM suppress accounting */ + DECLARE_VMA_BIT(HUGETLB, 22), /* Huge TLB Page VM */ + DECLARE_VMA_BIT(SYNC, 23), /* Synchronous page faults */ + DECLARE_VMA_BIT(ARCH_1, 24), /* Architecture-specific flag */ + DECLARE_VMA_BIT(WIPEONFORK, 25),/* Wipe VMA contents in child. */ + DECLARE_VMA_BIT(DONTDUMP, 26), /* Do not include in the core dump */ + DECLARE_VMA_BIT(SOFTDIRTY, 27), /* NOT soft dirty clean area */ + DECLARE_VMA_BIT(MIXEDMAP, 28), /* Can contain struct page and pure PFN pa= ges */ + DECLARE_VMA_BIT(HUGEPAGE, 29), /* MADV_HUGEPAGE marked this vma */ + DECLARE_VMA_BIT(NOHUGEPAGE, 30),/* MADV_NOHUGEPAGE marked this vma */ + DECLARE_VMA_BIT(MERGEABLE, 31), /* KSM may merge identical pages */ + /* These bits are reused, we define specific uses below. */ + DECLARE_VMA_BIT(HIGH_ARCH_0, 32), + DECLARE_VMA_BIT(HIGH_ARCH_1, 33), + DECLARE_VMA_BIT(HIGH_ARCH_2, 34), + DECLARE_VMA_BIT(HIGH_ARCH_3, 35), + DECLARE_VMA_BIT(HIGH_ARCH_4, 36), + DECLARE_VMA_BIT(HIGH_ARCH_5, 37), + DECLARE_VMA_BIT(HIGH_ARCH_6, 38), + /* + * This flag is used to connect VFIO to arch specific KVM code. It + * indicates that the memory under this VMA is safe for use with any + * non-cachable memory type inside KVM. Some VFIO devices, on some + * platforms, are thought to be unsafe and can cause machine crashes + * if KVM does not lock down the memory type. + */ + DECLARE_VMA_BIT(ALLOW_ANY_UNCACHED, 39), +#ifdef CONFIG_PPC32 + DECLARE_VMA_BIT_ALIAS(DROPPABLE, ARCH_1), +#else + DECLARE_VMA_BIT(DROPPABLE, 40), +#endif + DECLARE_VMA_BIT(UFFD_MINOR, 41), + DECLARE_VMA_BIT(SEALED, 42), + /* Flags that reuse flags above. */ + DECLARE_VMA_BIT_ALIAS(PKEY_BIT0, HIGH_ARCH_0), + DECLARE_VMA_BIT_ALIAS(PKEY_BIT1, HIGH_ARCH_1), + DECLARE_VMA_BIT_ALIAS(PKEY_BIT2, HIGH_ARCH_2), + DECLARE_VMA_BIT_ALIAS(PKEY_BIT3, HIGH_ARCH_3), + DECLARE_VMA_BIT_ALIAS(PKEY_BIT4, HIGH_ARCH_4), +#if defined(CONFIG_X86_USER_SHADOW_STACK) + /* + * VM_SHADOW_STACK should not be set with VM_SHARED because of lack of + * support core mm. + * + * These VMAs will get a single end guard page. This helps userspace + * protect itself from attacks. A single page is enough for current + * shadow stack archs (x86). See the comments near alloc_shstk() in + * arch/x86/kernel/shstk.c for more details on the guard size. + */ + DECLARE_VMA_BIT_ALIAS(SHADOW_STACK, HIGH_ARCH_5), +#elif defined(CONFIG_ARM64_GCS) + /* + * arm64's Guarded Control Stack implements similar functionality and + * has similar constraints to shadow stacks. + */ + DECLARE_VMA_BIT_ALIAS(SHADOW_STACK, HIGH_ARCH_6), +#endif + DECLARE_VMA_BIT_ALIAS(SAO, ARCH_1), /* Strong Access Ordering (powerpc) = */ + DECLARE_VMA_BIT_ALIAS(GROWSUP, ARCH_1), /* parisc */ + DECLARE_VMA_BIT_ALIAS(SPARC_ADI, ARCH_1), /* sparc64 */ + DECLARE_VMA_BIT_ALIAS(ARM64_BTI, ARCH_1), /* arm64 */ + DECLARE_VMA_BIT_ALIAS(ARCH_CLEAR, ARCH_1), /* sparc64, arm64 */ + DECLARE_VMA_BIT_ALIAS(MAPPED_COPY, ARCH_1), /* !CONFIG_MMU */ + DECLARE_VMA_BIT_ALIAS(MTE, HIGH_ARCH_4), /* arm64 */ + DECLARE_VMA_BIT_ALIAS(MTE_ALLOWED, HIGH_ARCH_5),/* arm64 */ #ifdef CONFIG_STACK_GROWSUP -#define VM_STACK VM_GROWSUP -#define VM_STACK_EARLY VM_GROWSDOWN + DECLARE_VMA_BIT_ALIAS(STACK, GROWSUP), + DECLARE_VMA_BIT_ALIAS(STACK_EARLY, GROWSDOWN), #else -#define VM_STACK VM_GROWSDOWN -#define VM_STACK_EARLY 0 + DECLARE_VMA_BIT_ALIAS(STACK, GROWSDOWN), #endif +}; + +#define INIT_VM_FLAG(name) BIT((__force int) VMA_ ## name ## _BIT) +#define VM_READ INIT_VM_FLAG(READ) +#define VM_WRITE INIT_VM_FLAG(WRITE) +#define VM_EXEC INIT_VM_FLAG(EXEC) +#define VM_SHARED INIT_VM_FLAG(SHARED) +#define VM_MAYREAD INIT_VM_FLAG(MAYREAD) +#define VM_MAYWRITE INIT_VM_FLAG(MAYWRITE) +#define VM_MAYEXEC INIT_VM_FLAG(MAYEXEC) +#define VM_MAYSHARE INIT_VM_FLAG(MAYSHARE) +#define VM_GROWSDOWN INIT_VM_FLAG(GROWSDOWN) +#ifdef CONFIG_MMU +#define VM_UFFD_MISSING INIT_VM_FLAG(UFFD_MISSING) +#else +#define VM_UFFD_MISSING VM_NONE +#endif +#define VM_PFNMAP INIT_VM_FLAG(PFNMAP) +#define VM_MAYBE_GUARD INIT_VM_FLAG(MAYBE_GUARD) +#define VM_UFFD_WP INIT_VM_FLAG(UFFD_WP) +#define VM_LOCKED INIT_VM_FLAG(LOCKED) +#define VM_IO INIT_VM_FLAG(IO) +#define VM_SEQ_READ INIT_VM_FLAG(SEQ_READ) +#define VM_RAND_READ INIT_VM_FLAG(RAND_READ) +#define VM_DONTCOPY INIT_VM_FLAG(DONTCOPY) +#define VM_DONTEXPAND INIT_VM_FLAG(DONTEXPAND) +#define VM_LOCKONFAULT INIT_VM_FLAG(LOCKONFAULT) +#define VM_ACCOUNT INIT_VM_FLAG(ACCOUNT) +#define VM_NORESERVE INIT_VM_FLAG(NORESERVE) +#define VM_HUGETLB INIT_VM_FLAG(HUGETLB) +#define VM_SYNC INIT_VM_FLAG(SYNC) +#define VM_ARCH_1 INIT_VM_FLAG(ARCH_1) +#define VM_WIPEONFORK INIT_VM_FLAG(WIPEONFORK) +#define VM_DONTDUMP INIT_VM_FLAG(DONTDUMP) +#ifdef CONFIG_MEM_SOFT_DIRTY +#define VM_SOFTDIRTY INIT_VM_FLAG(SOFTDIRTY) +#else +#define VM_SOFTDIRTY VM_NONE +#endif +#define VM_MIXEDMAP INIT_VM_FLAG(MIXEDMAP) +#define VM_HUGEPAGE INIT_VM_FLAG(HUGEPAGE) +#define VM_NOHUGEPAGE INIT_VM_FLAG(NOHUGEPAGE) +#define VM_MERGEABLE INIT_VM_FLAG(MERGEABLE) +#define VM_STACK INIT_VM_FLAG(STACK) +#ifdef CONFIG_STACK_GROWS_UP +#define VM_STACK_EARLY INIT_VM_FLAG(STACK_EARLY) +#else +#define VM_STACK_EARLY VM_NONE +#endif +#ifdef CONFIG_ARCH_HAS_PKEYS +#define VM_PKEY_SHIFT ((__force int)VMA_HIGH_ARCH_0_BIT) +/* Despite the naming, these are FLAGS not bits. */ +#define VM_PKEY_BIT0 INIT_VM_FLAG(PKEY_BIT0) +#define VM_PKEY_BIT1 INIT_VM_FLAG(PKEY_BIT1) +#define VM_PKEY_BIT2 INIT_VM_FLAG(PKEY_BIT2) +#if CONFIG_ARCH_PKEY_BITS > 3 +#define VM_PKEY_BIT3 INIT_VM_FLAG(PKEY_BIT3) +#else +#define VM_PKEY_BIT3 VM_NONE +#endif /* CONFIG_ARCH_PKEY_BITS > 3 */ +#if CONFIG_ARCH_PKEY_BITS > 4 +#define VM_PKEY_BIT4 INIT_VM_FLAG(PKEY_BIT4) +#else +#define VM_PKEY_BIT4 VM_NONE +#endif /* CONFIG_ARCH_PKEY_BITS > 4 */ +#endif /* CONFIG_ARCH_HAS_PKEYS */ +#if defined(CONFIG_X86_USER_SHADOW_STACK) || defined(CONFIG_ARM64_GCS) +#define VM_SHADOW_STACK INIT_VM_FLAG(SHADOW_STACK) +#else +#define VM_SHADOW_STACK VM_NONE +#endif +#if defined(CONFIG_PPC64) +#define VM_SAO INIT_VM_FLAG(SAO) +#elif defined(CONFIG_PARISC) +#define VM_GROWSUP INIT_VM_FLAG(GROWSUP) +#elif defined(CONFIG_SPARC64) +#define VM_SPARC_ADI INIT_VM_FLAG(SPARC_ADI) +#define VM_ARCH_CLEAR INIT_VM_FLAG(ARCH_CLEAR) +#elif defined(CONFIG_ARM64) +#define VM_ARM64_BTI INIT_VM_FLAG(ARM64_BTI) +#define VM_ARCH_CLEAR INIT_VM_FLAG(ARCH_CLEAR) +#elif !defined(CONFIG_MMU) +#define VM_MAPPED_COPY INIT_VM_FLAG(MAPPED_COPY) +#endif +#ifndef VM_GROWSUP +#define VM_GROWSUP VM_NONE +#endif +#ifdef CONFIG_ARM64_MTE +#define VM_MTE INIT_VM_FLAG(MTE) +#define VM_MTE_ALLOWED INIT_VM_FLAG(MTE_ALLOWED) +#else +#define VM_MTE VM_NONE +#define VM_MTE_ALLOWED VM_NONE +#endif +#ifdef CONFIG_HAVE_ARCH_USERFAULTFD_MINOR +#define VM_UFFD_MINOR INIT_VM_FLAG(UFFD_MINOR) +#else +#define VM_UFFD_MINOR VM_NONE +#endif +#ifdef CONFIG_64BIT +#define VM_ALLOW_ANY_UNCACHED INIT_VM_FLAG(ALLOW_ANY_UNCACHED) +#define VM_SEALED INIT_VM_FLAG(SEALED) +#else +#define VM_ALLOW_ANY_UNCACHED VM_NONE +#define VM_SEALED VM_NONE +#endif +#if defined(CONFIG_64BIT) || defined(CONFIG_PPC32) +#define VM_DROPPABLE INIT_VM_FLAG(DROPPABLE) +#else +#define VM_DROPPABLE VM_NONE +#endif + +/* Bits set in the VMA until the stack is in its final location */ +#define VM_STACK_INCOMPLETE_SETUP (VM_RAND_READ | VM_SEQ_READ | VM_STACK_E= ARLY) + +#define TASK_EXEC ((current->personality & READ_IMPLIES_EXEC) ? VM_EXEC : = 0) + +/* Common data flag combinations */ +#define VM_DATA_FLAGS_TSK_EXEC (VM_READ | VM_WRITE | TASK_EXEC | \ + VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) +#define VM_DATA_FLAGS_NON_EXEC (VM_READ | VM_WRITE | VM_MAYREAD | \ + VM_MAYWRITE | VM_MAYEXEC) +#define VM_DATA_FLAGS_EXEC (VM_READ | VM_WRITE | VM_EXEC | \ + VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) + +#ifndef VM_DATA_DEFAULT_FLAGS /* arch can override this */ +#define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_EXEC +#endif + +#ifndef VM_STACK_DEFAULT_FLAGS /* arch can override this */ +#define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS +#endif + +#define VM_STARTGAP_FLAGS (VM_GROWSDOWN | VM_SHADOW_STACK) + +#define VM_STACK_FLAGS (VM_STACK | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT) + +/* VMA basic access permission flags */ +#define VM_ACCESS_FLAGS (VM_READ | VM_WRITE | VM_EXEC) + +/* + * Special vmas that are non-mergable, non-mlock()able. + */ +#define VM_SPECIAL (VM_IO | VM_DONTEXPAND | VM_PFNMAP | VM_MIXEDMAP) =20 #define DEFAULT_MAP_WINDOW ((1UL << 47) - PAGE_SIZE) #define TASK_SIZE_LOW DEFAULT_MAP_WINDOW @@ -97,26 +325,11 @@ extern unsigned long dac_mmap_min_addr; #define VM_DATA_FLAGS_TSK_EXEC (VM_READ | VM_WRITE | TASK_EXEC | \ VM_MAYREAD | VM_MAYWRITE | VM_MAYEXEC) =20 -#define VM_DATA_DEFAULT_FLAGS VM_DATA_FLAGS_TSK_EXEC - -#define VM_STARTGAP_FLAGS (VM_GROWSDOWN | VM_SHADOW_STACK) - -#define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS -#define VM_STACK_FLAGS (VM_STACK | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT) -#define VM_STACK_INCOMPLETE_SETUP (VM_RAND_READ | VM_SEQ_READ | VM_STACK_E= ARLY) - #define RLIMIT_STACK 3 /* max stack size */ #define RLIMIT_MEMLOCK 8 /* max locked-in-memory address space */ =20 #define CAP_IPC_LOCK 14 =20 -#ifdef CONFIG_64BIT -#define VM_SEALED_BIT 42 -#define VM_SEALED BIT(VM_SEALED_BIT) -#else -#define VM_SEALED VM_NONE -#endif - /* * Flags which should be 'sticky' on merge - that is, flags which, when on= e VMA * possesses it but the other does not, the merged VMA should nonetheless = have --=20 2.51.0 From nobody Sun Feb 8 01:33:34 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 040713161A5; Fri, 14 Nov 2025 13:29:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763126956; cv=fail; b=F2s13lwQbKZko6lSbsvmlrwPZgGWXAW3XAS6bQUhxxJr2bf8JOKeZJjLOrrkyRzeYhEnQKs6FzUNumr4lJyPDM5ipCY6/Ww/qGVsz96W11PWjsbyZLIrzpiiBe3G/6G8LUF70XS/zGw1CexlCpIO2XTkFSoip+EDxdJ7GEVU2E0= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763126956; c=relaxed/simple; bh=Xr3fRXElPUknMVIeKH6nCdYhBhNPPxzHOOYYIsdcgg0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=rOKODKoMG9owV+bsamovAl+GXcDump9qdkDcA9Kdy8xH+nnU4HoJdJATWk4QBQTWcIgqvcmsNRQGk4/oqh30+dr66vZ2gkvdTHSE2lUHu43jnojevknYPbdI6tAwhv7ZuQbVzsUmuvwmGPQHTqHXrINd7Yb/JYThADcnfEgu7DY= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=c5cizqb1; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=RBlwhwqE; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="c5cizqb1"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="RBlwhwqE" Received: from pps.filterd (m0333520.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5AECuCjJ008858; Fri, 14 Nov 2025 13:26:41 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=ayAiCkLV2y1JDJm7p9tMJG37MIxO8VGfUUkffaDPp+4=; b= c5cizqb1MzJ2Xd0/E+dLcZ32Dy8zxSaBA7mo/ag3aJeO6YNQIjvQob13RilnVO6L IJ3i47ItBeiY2Vl45NJEaCAPmDH9xU4QhHRviR8YFkpm2a4ZqrIWF20L4K2L8+dv YQydR8prTW4LDqOUJbc85xFMD+DQ9Lxr5JNBjqyQKLaIUoFEuNu4xIMm2bUpInca iAVf06t4404s7vLsWK3teF3cUlTTNyogy4lyE+iY/JRKZlQOtG0lsFC6pT3w+HeI Yooa2B+J0UNFU6xSsc0SFG8gSsu2hf2UfaeP0uQUzqZTEVTAUoFOsRm6hPuNXopH pK4+Dn95XVqtWqLt+sMmdA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4adr8v15ru-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 Nov 2025 13:26:40 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5AECPACh038491; Fri, 14 Nov 2025 13:26:39 GMT Received: from sa9pr02cu001.outbound.protection.outlook.com (mail-southcentralusazon11013014.outbound.protection.outlook.com [40.93.196.14]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4a9vadgv4s-2 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 Nov 2025 13:26:39 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=sKh0xzqFG1Wtf++zqJFQhL1quKhOUnYyFqlZjh+P5ZBLH2uARKJ4/g+5ineF1YQCrMWfqQYUtDzB27q0W9E71bJ1GrjstLz+lCGpA+MsOP7HTGukT0KJMVmdO0q6YsB8B+JfJ4qoN7CULTW5pQZPjBYLnmc8xTIaBMn8/S0Kpt3p8GCP5bDhQ+n3jsMDNrkuhFEzcBdyaFbRjmBzZbqpA9GephMR/P89u1HSenbSZ5Dp0HAcitPZvkV/+wantGxtt9uFRzGkpny/CQ4/xFDW41dn2U0qqH2P24yThtA/F0rmlVwKSrIiVa6B36svsoT/487Ou/fqmGrFrOKKMONUBQ== 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=ayAiCkLV2y1JDJm7p9tMJG37MIxO8VGfUUkffaDPp+4=; b=ebKb/K2wfdUJ/wAIvlptu5flZbL0pDJiW9L28DP8jxOB6q7YnVUDBYxR4W9IKh1IMMnrwjJiWeIZNW55G73TG/cPWAn4d1Cvg7bnmg+7NnG35g5acCD1wauKEjEdNU5Siq8QQhH6bDic4q8xDbbfELSgWLCNybocRjrPUwx//36Qaj65kKj8Y6BSql5leNFAjKeQkpTGgxODRQMbT3bpPMTJUaDWIAATLh0s0iBUFuqbpVWBrLg2pUyqIi/cRclEkZXldAQ0OxlzDLV1S21eB+0sdQm2hRg8orVu8tJ7wLof4q4WL7d/3Dm8Y8g7ecKKA2qn2FTeIXCi02PkdnjygQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ayAiCkLV2y1JDJm7p9tMJG37MIxO8VGfUUkffaDPp+4=; b=RBlwhwqEWTaNH17Wj7he12DE1vcR+M+H7N6BYG8GhK3qv9BSjH3o6k4zwxnCPj9P5uomj8jrx3XZAeW0FJz0mS3WC8VkHaYIjYNHck8iFF2g/1+ha/Up+vBLqHdOt/ol8EBYC8roXGR7cAlwwutPUF6ohyDJUzyipt2BKZi6H/g= Received: from DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) by SA6PR10MB8061.namprd10.prod.outlook.com (2603:10b6:806:43a::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.17; Fri, 14 Nov 2025 13:26:34 +0000 Received: from DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2]) by DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2%7]) with mapi id 15.20.9320.013; Fri, 14 Nov 2025 13:26:34 +0000 From: Lorenzo Stoakes To: Andrew Morton Cc: Muchun Song , Oscar Salvador , David Hildenbrand , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Axel Rasmussen , Yuanchu Xie , Wei Xu , Peter Xu , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Kees Cook , Matthew Wilcox , Jason Gunthorpe , John Hubbard , Leon Romanovsky , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Xu Xin , Chengming Zhou , Jann Horn , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , Pedro Falcato , Shakeel Butt , David Rientjes , Rik van Riel , Harry Yoo , Kemeng Shi , Kairui Song , Nhat Pham , Baoquan He , Chris Li , Johannes Weiner , Qi Zheng , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , Bjorn Roy Baron , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , rust-for-linux@vger.kernel.org Subject: [PATCH v2 2/4] mm: simplify and rename mm flags function for clarity Date: Fri, 14 Nov 2025 13:26:09 +0000 Message-ID: X-Mailer: git-send-email 2.51.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0238.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:1a7::9) To DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) 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: DM4PR10MB8218:EE_|SA6PR10MB8061:EE_ X-MS-Office365-Filtering-Correlation-Id: 5416f6a7-f305-42c6-aee4-08de23816e27 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?I3LzEX2HqXHLpcONSbFNcXlNPrJHuNcldOQdLJtveJzbSy/3F9NE9lFBbybb?= =?us-ascii?Q?HU72nLirW36yqEgWf6VYBdxzKSa2Hs3aP1g1hII6ES48WT7NMK+SgUxXaaqH?= =?us-ascii?Q?H7heYhk1z9Y2w9VGgV+p4EowyyP/9aMNP3lE6u9TCwwC15WYKokDCLehliOL?= =?us-ascii?Q?oC6thtUc+NzJY9fb67ooWcAmrctZQFgD8ZsKZYfW6uzhiX/KELukHKv62UXT?= =?us-ascii?Q?89u93NhwBcjWcZI4zTEj/4Bs1LbF6KqYJeK03dvft6jHUSmcg1X2YZZt8Kp5?= =?us-ascii?Q?1Iai5tzmgCsxe3eJ/Bk4+aYozBB9t7vNGejXae3QoKhz9J/vlXP9bXXZCuZD?= =?us-ascii?Q?xETaSEv0NdlvE7OTBY9zginJX9GyLBRMWqZtq+aG6C3AcNdiQB82gGNUHcfL?= =?us-ascii?Q?Mk/oIPUYNxJwHCpaA3rY6qTIyD5BGlUPCUCdmBGGpyuc7WKcQdtb9Y/Hc3Nb?= =?us-ascii?Q?oL7u/u/h/7xuu/dAv5Nb4BA2878ZQEai+kAb6LSP0l3Mn/mZiYue8E585QPo?= =?us-ascii?Q?vmUy/91LEb7wX4uepLIiTTZJWAYFJGp9uKRXX0NLOxcWndyLwUAo0+N1f9uT?= =?us-ascii?Q?Qo/lv9CuhZ3Tb4nJduEg9pjafIqT804s9O2RMD6boMQM1cUdjENKjTFj5+lP?= =?us-ascii?Q?9kRePAq/ajGn+re/ZORKC7gB+EV+giTf8EE6S/dtdvlp67c56G2DGdBzCKS7?= =?us-ascii?Q?HmU+Dkg0DILaN34LgG4lgzhWy+9pNBODJhet5M831hGcs8Qge86vgu3FsGKL?= =?us-ascii?Q?eFNPKkg2c65cmymO78pISOCoAp7eSjvL/MvR9J0lMlckWdutgSv3dV+bjUvu?= =?us-ascii?Q?jXDwpXyIco/MXhg6eppxkYMhHshDr4fQIBUJVSIu5JAQmSiDBhq/WCjI1so6?= =?us-ascii?Q?6zCykJWqoe4Vj56yZNGVUon47BFus1UUNAR84Fyv49ToqA9CKPaHUWMPi+dL?= =?us-ascii?Q?eKHvwkUs+4AALD8681KALl99Ltf0PX1ZM8tmwjQ1tFvG73bI4eI31j8ArTjY?= =?us-ascii?Q?pR2Nj2N5++HSOktcEzTQQ+olEXNiKVV+cdLu3goQVLx3AiN/t0Bza4hgHe0j?= =?us-ascii?Q?WH6wAGsGqJywDOfCxAcDxLy8Jd1hjRSHd4pBU9FfUFasvE9RB+k6wlAtr7av?= =?us-ascii?Q?LSCxxNal/yxyJQDjSuESAZYnlHYBJujh9HU0b+hArnJcUcqqxzNavOLkN+sr?= =?us-ascii?Q?f74fbtqbJpsJY03x95qQpy594wKxqrtAp3XKbsiZR2mCv0IdKYCqzRfYI1VS?= =?us-ascii?Q?yjXK6rlSIaX0V8P9qykYH8KyAsYrj/q2N0zo2Ukf1BAygqCWQK+4ngXkR/QA?= =?us-ascii?Q?m9pl4DXzKOpZCC6iUaWQApgd6tOY5lh7IXVA4vTq8joV2W6LphvHwZIoLS8P?= =?us-ascii?Q?jI5BSnEx0DsAmguZfmjyPkQpq0itXmdWBMSrvYtshafDlT42+jWW39zoYSFq?= =?us-ascii?Q?aekqVu2L/kC2EJf8rYAq9c4ztaFo3gd7?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB8218.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?9ttMz2rVZE219gehItwugE6y2b8fGkBnLUTdS8IsN+IEKKcCb4jzZt9APntE?= =?us-ascii?Q?uWoBBMu/Kd1wLs0hWNDXcEqfkVOW1iXncOp3qjLuwmG2ukNO+0xJmJavPJ3N?= =?us-ascii?Q?ZTXG7M1/SOfLoeLRsZrsM9u8GNKj2qTNNlAvq/9yojtStPJsvxx1IjBMbXbn?= =?us-ascii?Q?GAPVVXcryEE/u7jSl+cD8CRM0WbbgeJXPBy4BhxW8E6usQj5IWqoPfJEcuAe?= =?us-ascii?Q?YpFcAo49qeGBlmhERf6fiqJSxePoxElsiNg5j4HFZLPXUBnPFGnQr7k4VC5g?= =?us-ascii?Q?fAw6QXsgRAMa9A1klxgir7A9Owa51+eeNZ6U7WuM7MGSnYCxi0NL48BAKQqT?= =?us-ascii?Q?fcJOxvflnGLvj5LLhQ4Zl+azEI+iO5Jg9bGlDHTxkkTfw5A441tI9DXLn0Xr?= =?us-ascii?Q?f7Q1pRhpw48hbUdO1THtUSOlKtAAleDS32fy7u4eAq8hGmg12iEMqtB8XpqH?= =?us-ascii?Q?itisfVCWrt9mJyzL1929zzbXWb9zNMLmSo2yvtzBu1ZUe6DpIPzPJLReNWKa?= =?us-ascii?Q?+2a1A8Ga1bN2Zbr5SEVlRQ20AUY7QelCC4mLzQjMLCmAAFV7Ea0YDlrqekh5?= =?us-ascii?Q?0q1+40ra2GpwFvPhjT9BA9T17XdL090FULTojVlzOqee8JRcuCxl/Uhhfuf7?= =?us-ascii?Q?2F7fAmbrmwDK9CtgJa6MdNESWROKcPOZioLfXIlqFQuL16TRZkRKWZcFuku4?= =?us-ascii?Q?u8+ElvSvRYXHlJptYQ4y0Fbo+K3Pe7LY4mg6H4Z8CdLhuN3tpqwrQjRW4jaQ?= =?us-ascii?Q?PxeSD9IzWIcZIv9IRo5SREr4y6DP7aok0W+TtFFXnMZB/NuhkVz7KolrBX8U?= =?us-ascii?Q?TSex9MOVYcthU/Zn7ex/SLzgvVG1wKV1dv20nEOxnrw447XZTGnKSRJZSCFp?= =?us-ascii?Q?zykGGcPJghVa4t3HfXrawNfjUaJQwQnAF5EpPje6wddS0qLwHVCiOwZ5n5wy?= =?us-ascii?Q?LiBAFZro0mtkWJohXKjEIAJoN5viO2pxfwa0TDDBBTKB6DFOqp/Fgmm6ZQox?= =?us-ascii?Q?XgrKZuNIhCMo+XWdwmCAsuyv//wCC6Ip/rSttVzgxwDM86OlnW9D5Fv+gRN7?= =?us-ascii?Q?0Am7+a5KFmk02Gkic3sm1ACgvQkJUlFVnoWridBVs3TVfjuGTPBrKst7c3dr?= =?us-ascii?Q?93UF9LcnYLIW+CXa7PCeXueg/HP/F8ELxVFKlPKq2CK+eLA/kck8ajJZA3oI?= =?us-ascii?Q?xedLtU8J8q9aHxSwEnPBgJJ5iMVGS9JpAVZE8OBxDKHGyhqKp3Xu7a+cSPTH?= =?us-ascii?Q?/FN2R9pnOFyoqvbCzqOmLNVrE3BDqv6CwN0h7AP5qkV3MVJpIggkykMu3nP0?= =?us-ascii?Q?4G4b+fW2jH+dc1wsFJFxa/xbELJgM6/n5MTqHEXTX4m4IOyaFvxWLAp1YqYa?= =?us-ascii?Q?2sWK3UwxSbl/gThn/hwT6NaqkRBYZj9LaynqbhhMpUOEIZXGILKdAR/73aX+?= =?us-ascii?Q?6dkhkqrLq8k5ONG/J1VLNbrUTsGloXM8b3P1Nmn0oYt0d3o0IiwzJ1UEBKJ9?= =?us-ascii?Q?u3ncfuhurXiGtU8id+FS9x16EEKPFCd82fNpjwSi6pERy5MDsfr9hwxfqQAb?= =?us-ascii?Q?pCs8T8rgjdG+T+6fgwZFw9XnVDdiuIv/OG9J3Omu7/QdZr3I/htx6KUjY1Ng?= =?us-ascii?Q?NQ=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: C6I8BJn0SMRXEKqEETQs/VikK/fIy/GgBasPW4QPx6lDgJW4nnD4AepbMQfb6Llf+VrWjGLq8Nr0oTl8hCrcOjAswExBj0zEg17ASQfLkkQ9u125bCBBpNWNWJRDpIwvhsQzDcNULqCEyjw+ARQn8QbAZJBBQ0yhkjJMFsf2QazGnzIxMF6mxQGq9e5OMtJGk7uoIfeVemFVfuuoRqut/lbek6Q8ohNF3nybpRqyz9fYnKGC2HM2V+69Sas4w4cpF+8ppZitwCvjDFazqx4oX1d0FJ1ekhjKFgO/9KLHz6Gu7TBdHr44LvtZ+hfJtxK057M9LGwI5wmpoUZrwtVPVAVQydpZP5d0Hb7CDAEgpDxUjGIb0ZdNyqeiV5/RJr56kIh50dDksb8UTcUY6ob0Nma2vf6nWdG1SNOM0WefqOehyWNntMQMeHL0BwJ8LepihA4BS3lCdoRojVkK4mOIj5UkmzyysDtgr3e0OWmbYELPHL1WE7Dz56rJsOEDvpVUN4EvFPwu8OPu2g2CJ0P6sF98Uq5h2f9GMFDDCDGgT4F0AxJnY/wBOmVA+WYF59Z4CLf33P4U8uvX/vKzzkS2m9dOPlcrQBLbZ1a451ltz1A= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 5416f6a7-f305-42c6-aee4-08de23816e27 X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB8218.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2025 13:26:33.9817 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 75TBqUmAlLedJJWFNCjDfGjhf5hEoUFcm7Yr1KzwLnH76a5e24aNvifiopJ4xVCDgOSi5YMkKHinkeDwg+h75LaEQejhyTEvNhQdnwWKtxc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA6PR10MB8061 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-14_03,2025-11-13_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 adultscore=0 bulkscore=0 suspectscore=0 spamscore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2510240000 definitions=main-2511140107 X-Authority-Analysis: v=2.4 cv=YP6SCBGx c=1 sm=1 tr=0 ts=69172e11 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=6UeiqGixMTsA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=IW01juKAgdGzpw-y0VQA:9 a=UhEZJTgQB8St2RibIkdl:22 a=Z5ABNNGmrOfJ6cZ5bIyy:22 a=QOGEsqRv6VhmHaoFNykA:22 X-Proofpoint-ORIG-GUID: q0drY204amb4pgCA3VeLW0WDOoRuzPi4 X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTEzMDE3OCBTYWx0ZWRfX1ALloA0ElOXy UaHDw5grc7+rT6cZR5lZBSB0tBjtWu10jWM50p2a/n3TtSgPBpEDa8kEaCPxYvSg4e3BZ7Qrzpu OfMkgluD2Oek4m3MkFsK1v2pcl40emYwkdySaSNLDe2F8pyHLY8pS7vuWTOAnqA3m6SUqeGQQ5T N3EgJEwyraqkmM5zgHvUDUVafz+CTmysoIM4aJa2MjOYRdKVfYwoNn7QA8f0bGoKaGkGt8b9lud UzCT9d4vGUvcWYAmbzrwt4DpwTWOnV3tgQeMH3afTvNs8Rm0wk32LksivZ0QqGzBFv/CZJQt4RM YRRlKVdD2CfmqFMcpxMG7WUaSvwL+X4FUWVu/PfBjo19nkthSXSFvoPlnmd6cMZtFaMpcgyn9xA Wq3VwsfsnuDZMXG+wccw/OcI6ZPd7Q== X-Proofpoint-GUID: q0drY204amb4pgCA3VeLW0WDOoRuzPi4 Content-Type: text/plain; charset="utf-8" The __mm_flags_set_word() function is slightly ambiguous - we use 'set' to refer to setting individual bits (such as in mm_flags_set()) but here we use it to refer to overwriting the value altogether. Rename it to __mm_flags_overwrite_word() to eliminate this ambiguity. We additionally simplify the functions, eliminating unnecessary bitmap_xxx() operations (the compiler would have optimised these out but it's worth being as clear as we can be here). Signed-off-by: Lorenzo Stoakes Acked-by: Vlastimil Babka --- include/linux/mm_types.h | 14 +++++--------- kernel/fork.c | 4 ++-- 2 files changed, 7 insertions(+), 11 deletions(-) diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 4f66a3206a63..3550672e0f9e 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -1314,15 +1314,13 @@ struct mm_struct { unsigned long cpu_bitmap[]; }; =20 -/* Set the first system word of mm flags, non-atomically. */ -static inline void __mm_flags_set_word(struct mm_struct *mm, unsigned long= value) +/* Copy value to the first system word of mm flags, non-atomically. */ +static inline void __mm_flags_overwrite_word(struct mm_struct *mm, unsigne= d long value) { - unsigned long *bitmap =3D ACCESS_PRIVATE(&mm->flags, __mm_flags); - - bitmap_copy(bitmap, &value, BITS_PER_LONG); + *ACCESS_PRIVATE(&mm->flags, __mm_flags) =3D value; } =20 -/* Obtain a read-only view of the bitmap. */ +/* Obtain a read-only view of the mm flags bitmap. */ static inline const unsigned long *__mm_flags_get_bitmap(const struct mm_s= truct *mm) { return (const unsigned long *)ACCESS_PRIVATE(&mm->flags, __mm_flags); @@ -1331,9 +1329,7 @@ static inline const unsigned long *__mm_flags_get_bit= map(const struct mm_struct /* Read the first system word of mm flags, non-atomically. */ static inline unsigned long __mm_flags_get_word(const struct mm_struct *mm) { - const unsigned long *bitmap =3D __mm_flags_get_bitmap(mm); - - return bitmap_read(bitmap, 0, BITS_PER_LONG); + return *__mm_flags_get_bitmap(mm); } =20 /* diff --git a/kernel/fork.c b/kernel/fork.c index dd0bb5fe4305..5e3309a2332c 100644 --- a/kernel/fork.c +++ b/kernel/fork.c @@ -1061,10 +1061,10 @@ static struct mm_struct *mm_init(struct mm_struct *= mm, struct task_struct *p, if (current->mm) { unsigned long flags =3D __mm_flags_get_word(current->mm); =20 - __mm_flags_set_word(mm, mmf_init_legacy_flags(flags)); + __mm_flags_overwrite_word(mm, mmf_init_legacy_flags(flags)); mm->def_flags =3D current->mm->def_flags & VM_INIT_DEF_MASK; } else { - __mm_flags_set_word(mm, default_dump_filter); + __mm_flags_overwrite_word(mm, default_dump_filter); mm->def_flags =3D 0; } =20 --=20 2.51.0 From nobody Sun Feb 8 01:33:34 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 885D4319847; Fri, 14 Nov 2025 13:33:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763127239; cv=fail; b=LaMGnBmGwOazlzGMDzoVL7vqzfxYAiAsgvp8oIxilOVfIAtEiz42yTlJFtF4JFvnHBwH0HE91NgVYXJ/fFiCvtmzra6LjOrNf2+A+sYzy0QGIreZo+/vKQrew1YwmdLPuo5odt+BvsYqCRvb9hnvu6ML1zNJWZMopzM+IAYdzmo= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763127239; c=relaxed/simple; bh=3e3kapCPv4I/poyxmpwlG7qeyOR6YsvY8QmVTYzvftA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=snkGb++hYtl/D+kuOXCgMyLNitkLJPy7cETrtXYDWJBkeKlt0HSdrUQUljaU4Jjveo2v1JAAXDW1BD5383XxAD1Y0jPNrGG1oGAzBunY0IYExat4vKSvMZmOul+UrEAjWTT+ogLm8+hzOnHav+zH1s4Yqvlzsy7KrFOVOt49E6s= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=VNXQHLOq; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=JNJkjPDu; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="VNXQHLOq"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="JNJkjPDu" Received: from pps.filterd (m0246631.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5AECuQxV008163; Fri, 14 Nov 2025 13:26:43 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=6O7L7FvAdhX/Jp6IvUCuECP7nVu9VdHmj0QgR5C0RHY=; b= VNXQHLOqww4gbfTfJwSBkMJ+H1JzFj2XtROJUUc/1SqsA46tQbzHbz662i+ywQXi zzfzYvglVU6ejEYuF78SOn0T6kdyVaKtQuqT9jwbPTx5O0vJsmLDtsbqDW/jJrXg VU6HEV8v6oeZ78dNTBwWZ/nHOu6wJ0zAKoGsjnPc7KYSFC+/r8ahqOucmbjdYazS 9OiD0A627vEW7EGVm8PKaxup1O27BcAnsIRjsQd76Fgt4E7+/YfdO7KATwIK740V pDGPnN1/stttYBJ8BhXEjjaoUi752QhneYeuC8oHEwObRXWoF2Xvdz7ArqkqAa3R 0KdGayMnLx2ZsH6L+sGwtA== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4adrdjh4tc-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 Nov 2025 13:26:42 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5AECPACj038491; Fri, 14 Nov 2025 13:26:41 GMT Received: from sa9pr02cu001.outbound.protection.outlook.com (mail-southcentralusazon11013014.outbound.protection.outlook.com [40.93.196.14]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4a9vadgv4s-3 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 Nov 2025 13:26:41 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=r0dSA4CMu/rpuZ+bX8kNAq0pXKLvtSRZ8vkhMJBUUm6yi3ier6HuaqcSRZz7eo2z8IOK8uhroGeoU/lbUCwMsaOk/ZM023UfVnLDPvLj8aQwYsNZ+00Us7tJArnBqfUwjOliq3D4S4n6aZuA0RD+aVs6GXx/4+c6vfGbM7KZd5C4BBWJuc1qxAS5eUPkzwap5UIgDtcMyK0W82qQK9VP+CmeU2LdTv6t0L8jNrI2p2lunKvEMTAbp6rPYiMaX0Mc2PlyU0mEEMzzMG59Zbawx6Gn5rsApzsFmFPJwa19ZctN/SX8+iFbiFWgNb/R6nBM4a4JwvWIVYlolZ2zcJcvRw== 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=6O7L7FvAdhX/Jp6IvUCuECP7nVu9VdHmj0QgR5C0RHY=; b=EzcoessBTPMg8yekNdl5gWm0MYY9oaHd4ZIeooz0X6cCCu7eg058jB5nUt+TzkYSy+8RIb/opUraQIUcq17bu3KWTnaNgAyBsuf1H+ccV82fxNlJh6AKFgU6tlZi8xMrcrVBm4FVEJsu0J0UeJMowT0tddyxc5fSjCnrUYsTst/MirUaqcDbsSJsuL8g8E5py65Idl/q0Qqp9BRE5cHKzAM3TM5i9WPMG4qbbHtu88aLVQ7Av/9WKKVLGO6/3iR80276dXzgrya0/ywPzNbcl9ziN0BPo6r/x8cxqoSQ1uU18yVs3HDuzPtZiZX4LTcWAJ1e4kQsk3ilExW8YNnewA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6O7L7FvAdhX/Jp6IvUCuECP7nVu9VdHmj0QgR5C0RHY=; b=JNJkjPDuIq1E1JHmQ+JfKF2PwZ6CNLgEp9KLLCeoUY19BFenZ+1NvuAKtXG188bVUskBqTjKJOn5wa2m+EgNiEru6JWeumzOx/ej+2oFD0LyJmpCoIANK6H4xHY9+cyERDcRYEZCM6kqjfOn6w7U9t4qVAom2yEwB2YpMunSw1k= Received: from DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) by SA6PR10MB8061.namprd10.prod.outlook.com (2603:10b6:806:43a::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.17; Fri, 14 Nov 2025 13:26:36 +0000 Received: from DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2]) by DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2%7]) with mapi id 15.20.9320.013; Fri, 14 Nov 2025 13:26:36 +0000 From: Lorenzo Stoakes To: Andrew Morton Cc: Muchun Song , Oscar Salvador , David Hildenbrand , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Axel Rasmussen , Yuanchu Xie , Wei Xu , Peter Xu , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Kees Cook , Matthew Wilcox , Jason Gunthorpe , John Hubbard , Leon Romanovsky , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Xu Xin , Chengming Zhou , Jann Horn , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , Pedro Falcato , Shakeel Butt , David Rientjes , Rik van Riel , Harry Yoo , Kemeng Shi , Kairui Song , Nhat Pham , Baoquan He , Chris Li , Johannes Weiner , Qi Zheng , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , Bjorn Roy Baron , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , rust-for-linux@vger.kernel.org Subject: [PATCH v2 3/4] tools/testing/vma: eliminate dependency on vma->__vm_flags Date: Fri, 14 Nov 2025 13:26:10 +0000 Message-ID: X-Mailer: git-send-email 2.51.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P123CA0655.GBRP123.PROD.OUTLOOK.COM (2603:10a6:600:316::9) To DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) 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: DM4PR10MB8218:EE_|SA6PR10MB8061:EE_ X-MS-Office365-Filtering-Correlation-Id: 1f6d11c9-8545-414c-b9c4-08de23816f6c X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?BbmWxNsWmvS7qQT+Kas/wBgCIc6mAKO801l+fIN9mVKx6RvE0bYFMW0ZVw3D?= =?us-ascii?Q?EA1qd5le5OgBRSMPRmTNLl4Xt4rl70bcw+9zGJpQQmHmeTs6kCfdxyxeFy/6?= =?us-ascii?Q?T21i4ev1Up7fxYCCyn05P8aTEkMfIUlGgnDmIZPqvxcopKM59Wgh29TJn5ro?= =?us-ascii?Q?1VBF25UH6GdUavRclK3+ZeXUnNW9qkaVBDZQL7cH58U9BO4Ir3rEnCDMJib5?= =?us-ascii?Q?VfXRrQ42oYiZ7bI1sPKdrTG0S6JRUqazo7JmNuLL7CXO7Fg3X4y2mwDhtHOn?= =?us-ascii?Q?okcormjPtZCkPE2iNC9IJUnB1kR18cJXLydU1tvRemF2oN64XGrWGd45SGcw?= =?us-ascii?Q?Sf20FNk0o3o8H0Kh8ozwxo0MNv52WLrqv7iitFm/rUfoufgmsovYJxGfp04e?= =?us-ascii?Q?YfpIYuwgY5nsVBEiZ186SEcjiuD9HOi8Dhkl9TniBdF7IgRi01rmEARYwSQp?= =?us-ascii?Q?4vbATh8FzlgtCCcoUhhVAE9lbeA2ExecqH/rA9Jr/yd2VUpNNw3W4LZJLCHD?= =?us-ascii?Q?0huCR2ebxHW2n8iKJVo4/QYFWGgs/gyEdauOMmHg7BmPCUolfpPNfJrzvx9L?= =?us-ascii?Q?+z7hbgSLac5yJAjSCn55T/+UK4wU6U01+QYS0eaawwKqcmdqrRypkD4/YtDs?= =?us-ascii?Q?2f3PK/qQQfkwQSfescrTGw5L50l8qY+gl1bQRl1hJ6gDZUVrGV7jaZUMATk0?= =?us-ascii?Q?Qzz0nXflRfGY+UymSGqnYdLcVejb1dzs9Dfa6sfDQkUTAP/QxAlKDoXo5OW5?= =?us-ascii?Q?veufNc8znZwLOLviPyiSKEMWkjT9kmK/EfD6htnkcKHL2BvfwOpcK6bwL0Qq?= =?us-ascii?Q?Q7O2e3M2mG/zXpm8K8z0ZIHU+lD2eD2wb7ZzeoJI+6azGsXvMZ3I/cfyfZ0D?= =?us-ascii?Q?fU/dwCYGBIi8b9ehAHmpUHOBIpvIOWok6C5g9qGgCHI1lWOYaf0Zt9S6DmHS?= =?us-ascii?Q?HYbuaCh5TLhNXE0ErbRdtVcXlF1rtH+RayaXElZSLVCnNqWLAIN5R8spAcMU?= =?us-ascii?Q?cD0LWU7XHmM/JXzQfVOEfMYf2XmSoPz+Cz+1rv5VbHiuEn54dB3dBD8fFT1c?= =?us-ascii?Q?1Cwe6pBqgWkw17uNNMRo477Kn96mGSLL9NSJSi0TAM1z2Uq71tUjn/VCFDY3?= =?us-ascii?Q?2AKk9hNvBs9KCubq9Y5Ds02CI+gWMafASAJcBFQBYzD3zjaM4XUkR5vwreXn?= =?us-ascii?Q?DEOw3lfx6bxDL+hbx9XCgBYl0w3os+bGG17abN2e42v3ghfoH5D3psAprCGu?= =?us-ascii?Q?rl4oJSn7sGWrIO2KF/ss5XeVW3cQv2wERZMhceackAmjHoJkhWyvEFgBa1UL?= =?us-ascii?Q?wYfykvqdaoBGQnhtOL0y1U+QNt2VIUQfTawNEhKcFoaTZJvFQDLoy8tStD3C?= =?us-ascii?Q?+QUvuTOz5OjvjH9bitfV1T3eYG+yUkudFAKev/Sg4FsgquCGEoUlYwRenYwb?= =?us-ascii?Q?sXFtS/EoMMwbAfmX77/tGvltkv4Q6zzD?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB8218.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?HCs+witMiWcKVQ5a+l2F/83yTJfZTdlMNdGswSKh6DK/pLtxpMxkyqVCxWuo?= =?us-ascii?Q?QlJwRG4m5VOnVlQMZgpjlMx5BqmB7ojCNJ1Q1/b/Hfqx6gVGbj+EX8/4pVsn?= =?us-ascii?Q?/NqGMZBrdmsWCVmN851HF3jLG/AuGEJoXXYI4ZZXxSNbHNQKKFY95rAn8WqA?= =?us-ascii?Q?g6ohChElw6ia5++GN3EUgim2qJUVgYQmizaDTMnWrcFUBxEwOKWDhwOr73nT?= =?us-ascii?Q?ibGsh9WIWY3k0zOaFOEx/7ay0EIdZF7Ut9sCnqEPPRIk4ekxtTqnoLtFFNvE?= =?us-ascii?Q?O9AOFere2Yx7yGSOfaQ5aKA3DLFktf5MQA66ioAcKQijmLgV5FcAdngXJfoe?= =?us-ascii?Q?rKUM4Rh6E5eHBAymcywXfz4KFY5tEY4QBWhY4XGJUM8DEuh3yLMucgTygfVu?= =?us-ascii?Q?1kVQ6DIvuVlEUH+aViKkQnh5aFUv/6VzbjxAY23Wmta4kp7R8k1ug379G3a4?= =?us-ascii?Q?Dx2gGsKx8mgqMkianwvK5/lEsh/1cVJYGMfOB9zHk90+3IhI5UBSSnG+fFlM?= =?us-ascii?Q?HLkgkmgWrUIe8nNQu2+gEItP9nFnrUXUBqi+zRR++s/Y+rJ7cpUGzngbtbFV?= =?us-ascii?Q?5SvN7teYjRUhDUq3KnAV0AziCkNrHX8gQR6SUPBOxumuPj2w/7I0yxHjABIE?= =?us-ascii?Q?dXZqDPBH089iF2KiXvUC/NsF1RNsCe85GyrYmcgN0sxETeqyS/KKI5WGjIW/?= =?us-ascii?Q?oKbgl/OcQCPSbkQeUdiLbE3faRqrlQiS/VANXyVCPlIPddn6yQjVeQMnlf89?= =?us-ascii?Q?NJlrPCbKa+DZyPezaZUYi0hM05z9jj6rtY34P67Dh+bw1MvBMTldnw7pVkdI?= =?us-ascii?Q?XAj66WoNXpC/ovtzSa3jB7X4eKLYB0QtBBT+0+2BoF2/AI7jS9JK9Bp9w9N3?= =?us-ascii?Q?hpx0mT8KhE1+hPx/A7kH9js+erQSh287+GMlnrq8/uxmWkeGauNfszWXJuuW?= =?us-ascii?Q?f6OG28S3/6bIXLZja+f3znMrW7PTSufpPMyTtoVg5q+zHzCuyjIlyO1tjhej?= =?us-ascii?Q?P/IiKzmpKhhu4uPzWt1S/kGA9r/V4xZve8vCA8OkBmhkOqgj3L1iV6e6Jrc6?= =?us-ascii?Q?CMpYv5GJKG6YWsSxirsPuIMlW8N6gfuXcHUrT8foR1oNMc92fA+sivvkqBmh?= =?us-ascii?Q?paAY0+FwF9AHowe466wvNvDYkTZw+AXdETppcFc4WxsKIAbnS5isAkMQF4CF?= =?us-ascii?Q?Z3S6ljt9qR2TUxfxBe7kpmeFgTKxtxSE0QM/WD2N1SfwS2R4G+W9O2PEhfMG?= =?us-ascii?Q?QKcEhaDpjrnT+aFTbLrjTPq+WkKT2iFGBntEZRJbiV8HEmapm0TAlMpx4X0H?= =?us-ascii?Q?zw2b5P3HCasmFn8uRbisKdfrMSWsuR4TmESux3QfQK8M4WpcnCHklKdM/3ju?= =?us-ascii?Q?ViguhfVPLyOe1ZHT6VipNntljeOc0/KhAf+4uh/3IFHlfAtPEKIFrYT70PQU?= =?us-ascii?Q?GJH1q8NB5Wa2ovbehazaHtm1hXY/6o6lRLeHMuoDVA8VeMEtBXnHwfD+Ozta?= =?us-ascii?Q?gDulOHna6A4TU7pt6icmu7mjEf/Z0uTtwy+rLvq1LjCfHA4MD7wCH3zhz1Mf?= =?us-ascii?Q?nDnc06VraopE9KdEGj4bnhpeKAwUEdyngcr26afGPKilodEV8o86wJZEgAeX?= =?us-ascii?Q?wQ=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: ZQx3+1gIozPDWkmvEuux1/jUdvDLYWr13fYjCt+iLiDv3Y40lOqLiGdDgbUvSxI9G+7Ahs0cS99vpy8HEexlQ8azNvVjeAKPkrytGspLWyu2FDifNPRR1mY7o94sa+xqhNvP1qja6S8F5Yx/bnYh8PvqDqh2TVBQAtF0/8/FfhgR67BG3ft20UpZBIrnEJxU5w/IxKpxPevmMcTMAid+BvP7TctKR/a+c/ZMvv5K0y8IofjapNNUwaau7Q9L91R0xepx+J00G//A54NB/IUdyjSM55IG9lYFvF87+5MzZbiC1BJlgL+ryZPv32kWDiCAShYURB+jQi3KZy5SWBM207NDYXN5EgnwVEvLlUrHjUhlF2oU3Ve2EEMLBSXCmFC9bW5cURGk4xs4gENqj7roy7xAg+uGByjMWkM1iOEGb7ouHMjdZNfTaruQkv2XBW2vUpsQ/qnZYvFOeH9P93Yzg2X5pG9uHsUa56XuveX1RiKbfbUgdoyDDpbEYmeK1WS41Tt7q1xFy5UaXRoVbBkcwQef62xnuONC565c5M2pvvxtb2IO2oqSvNjZGDxM477mguUTI69HOmJEYZ60jbEe5lK+QWxL+YTH7h9Pb8Aq1aQ= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1f6d11c9-8545-414c-b9c4-08de23816f6c X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB8218.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2025 13:26:36.1114 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 4mGVpvQUB/hA61KOdsSIjXusS7XGF7NSTRFcSvceImk+Y4ce5jdWvh11oFB/CcMPpQCvVGYrMSTia9osCluGA7WE3WUmUQ29Seevr1Ai4ao= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA6PR10MB8061 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-14_03,2025-11-13_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 adultscore=0 bulkscore=0 suspectscore=0 spamscore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2510240000 definitions=main-2511140107 X-Authority-Analysis: v=2.4 cv=L9oQguT8 c=1 sm=1 tr=0 ts=69172e12 cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=6UeiqGixMTsA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=P_b51HnBFZLct5vy70cA:9 a=UhEZJTgQB8St2RibIkdl:22 a=Z5ABNNGmrOfJ6cZ5bIyy:22 a=QOGEsqRv6VhmHaoFNykA:22 X-Proofpoint-GUID: cGqaBHmVzbfE1Nlxa7456Jbf8W8UHjGr X-Proofpoint-ORIG-GUID: cGqaBHmVzbfE1Nlxa7456Jbf8W8UHjGr X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTEzMDE3OSBTYWx0ZWRfX+Oy3ctjsin/K GNxEGP2DEWqLEl/AkE1LSZt42RuRjNZTPyvLaiX8rzI5dw9OeUmjNvGtr5QbmvhbUMGlUK0PrmT IYzDU1GOQqLJuEsT/+DnFJlIoIjNmBYIs9xf9J+x+/LFcOGmVCrv1bsTx3iURrwKKlRzXT8WsO8 bNba65AyDvBkXo7ggHTwEKf161HhLazHV7NNhUWC6BMsCuUIt4kBpwfDoFTmfvU4rL/ZKv9NnrQ w5I9SVCw6YW7up/xNjuKglIq0d3iBMLGK5vwfinmdUR03BSxrxnTj55M04aevXhRnYCQlrELY0F RhT0dlZvdovuOc3EAkftL49XzwkKoGu1lViL2o2ya6w/iyAn3oLDu1IHdhsMnbqJpaHgJUvsp+m OeQtDCpN8MdUdhrCJrhy8cTg1fhsmw== Content-Type: text/plain; charset="utf-8" The userland VMA test code relied on an internal implementation detail - the existence of vma->__vm_flags to directly access VMA flags. There is no need to do so when we have the vm_flags_*() helper functions available. This is both ugly, but also a subsequent commit will eliminate this field altogether so this will shortly become broken. This patch has us utilise the helper functions instead. Signed-off-by: Lorenzo Stoakes Acked-by: Vlastimil Babka --- tools/testing/vma/vma.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tools/testing/vma/vma.c b/tools/testing/vma/vma.c index ee9d3547c421..fc77fa3f66f0 100644 --- a/tools/testing/vma/vma.c +++ b/tools/testing/vma/vma.c @@ -69,18 +69,18 @@ static struct vm_area_struct *alloc_vma(struct mm_struc= t *mm, pgoff_t pgoff, vm_flags_t vm_flags) { - struct vm_area_struct *ret =3D vm_area_alloc(mm); + struct vm_area_struct *vma =3D vm_area_alloc(mm); =20 - if (ret =3D=3D NULL) + if (vma =3D=3D NULL) return NULL; =20 - ret->vm_start =3D start; - ret->vm_end =3D end; - ret->vm_pgoff =3D pgoff; - ret->__vm_flags =3D vm_flags; - vma_assert_detached(ret); + vma->vm_start =3D start; + vma->vm_end =3D end; + vma->vm_pgoff =3D pgoff; + vm_flags_reset(vma, vm_flags); + vma_assert_detached(vma); =20 - return ret; + return vma; } =20 /* Helper function to allocate a VMA and link it to the tree. */ @@ -713,7 +713,7 @@ static bool test_vma_merge_special_flags(void) for (i =3D 0; i < ARRAY_SIZE(special_flags); i++) { vm_flags_t special_flag =3D special_flags[i]; =20 - vma_left->__vm_flags =3D vm_flags | special_flag; + vm_flags_reset(vma_left, vm_flags | special_flag); vmg.vm_flags =3D vm_flags | special_flag; vma =3D merge_new(&vmg); ASSERT_EQ(vma, NULL); @@ -735,7 +735,7 @@ static bool test_vma_merge_special_flags(void) for (i =3D 0; i < ARRAY_SIZE(special_flags); i++) { vm_flags_t special_flag =3D special_flags[i]; =20 - vma_left->__vm_flags =3D vm_flags | special_flag; + vm_flags_reset(vma_left, vm_flags | special_flag); vmg.vm_flags =3D vm_flags | special_flag; vma =3D merge_existing(&vmg); ASSERT_EQ(vma, NULL); --=20 2.51.0 From nobody Sun Feb 8 01:33:34 2026 Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) (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 4C6902E54A3; Fri, 14 Nov 2025 13:28:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=205.220.177.32 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763126889; cv=fail; b=tLcqhPdWdjaLMFEaxuZJuSOND2Y6QD+ylTbzVmLWl3L4hE9dZ1XhDRt2IPnNlDRd50S/pk4YwhnTuiXghMX4ZfirU7gnGDPshx5p4itRtI0UxqmtB555inD74SdF5r9OvMcLpvCQ+XwCr9xvYC3yZZh9HCf210QMa6vfEJWPj2Y= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763126889; c=relaxed/simple; bh=EwYTfx1+/mVJYo+mFV0pI2ZfmpuKsnV8RrpyoPnjWKE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: Content-Type:MIME-Version; b=QvDEomvjVDAZK1gVlqY3oUqOIXHzBIoaTbMLVrjjzjtUPz6GHZ+U+khin/dRPSkxvE8W4kqvN1EDzGv4CamJ+O1xS90hWdTcbkNfStGv0/K78iufdMBOBmbCgUo5RKSnrXi+pGZMjCAEc9Auw66pyZw2YyvWsRr6rRESeeIJJFU= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com; spf=pass smtp.mailfrom=oracle.com; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b=h8uHVv67; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b=cXwAkhP+; arc=fail smtp.client-ip=205.220.177.32 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oracle.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oracle.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=oracle.com header.i=@oracle.com header.b="h8uHVv67"; dkim=pass (1024-bit key) header.d=oracle.onmicrosoft.com header.i=@oracle.onmicrosoft.com header.b="cXwAkhP+" Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 5AECuCR2004811; Fri, 14 Nov 2025 13:26:51 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=cc :content-transfer-encoding:content-type:date:from:in-reply-to :message-id:mime-version:references:subject:to; s= corp-2025-04-25; bh=mjoYBwRTzr7gbRBWkpaXxVun8ef+oZu8dzhfbP1N6wg=; b= h8uHVv67907ve/4AsQ48EWPWAtuYA3q6aijzK+kQphO9kgq9sayn4JmchpPzKw6Y jOBkce6LFnmdu1SQP+LnIu/HUMpEJRZ+V0oDvmJ2mUdKukhP0z0ltshc7aJJVfBg K/3HR4SIBe01lxKy30z2HAJLkZt42uWRmW00lynEq8uD4LT9P2T/CQRaDj6hB8/9 DAZj9v7Na+WSeCnxJxGQbLTbjXGMfJi+zbhCzXO7o8chnFeoG2FPVtrlh27HY0vS rVoZrQ35Qwp2FpkNqRQpridp54A/FHmgGDn5j7znhB2OdYVg97x4OJo4KXWQHJ/Y +/JUGanX6+ZOp9jtCoyUJQ== Received: from phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (phxpaimrmta02.appoci.oracle.com [147.154.114.232]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 4adr8vh4nm-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 Nov 2025 13:26:50 +0000 (GMT) Received: from pps.filterd (phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com [127.0.0.1]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (8.18.1.2/8.18.1.2) with ESMTP id 5AECPACm038491; Fri, 14 Nov 2025 13:26:49 GMT Received: from sa9pr02cu001.outbound.protection.outlook.com (mail-southcentralusazon11013014.outbound.protection.outlook.com [40.93.196.14]) by phxpaimrmta02.imrmtpd1.prodappphxaev1.oraclevcn.com (PPS) with ESMTPS id 4a9vadgv4s-4 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 Nov 2025 13:26:49 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=UGgJ0OsbBhrmhYOiNyQhjSioP3ZsZs3Fd8bm5lGec9Ef/e5cizPgXl2XJaPAYeQBPhX+ZDNUCBxQkiaF1l1EKMXePokMd4TrAzmgcHbRqaQJQ9Kw8giJJhGcVfF/Qu/fkSHmkDZeFYfbnEl20EKevUcfe9kf0kc2aw/lP0srVBG78GrVnBlE5yr9WY7FTrlw4LsohYsfYlaKnG1YXVMlaoQfG9Uxc0WJcP00CH+bMp9EmKHBeoEcLNgh6dVPbNVlnwNElLsdtW+tPP+eO24MUbUWM9sfjVbawhMDDJSvgDJh72ncxVgb0pl7SWqjnFgKvrdTxOW3UEPgY/T/XRKhgQ== 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=mjoYBwRTzr7gbRBWkpaXxVun8ef+oZu8dzhfbP1N6wg=; b=Gfdx/gCxd3uKDif6DOhhYAqBx8Lv1ee8cnSxW746VuBT9JLFmWKqOmSdB7fFLNnqcTAu7CZmh6QjhG3elRfuoEvZIegWaThzKYjc0yjnDcKDJGucy8tGuVchi2U8cTfi6Kouc+KupwKC5TDlcfmsHeMn5ISRp5mTZxnuCSq1HyDjpu8M6SeO15g0MyKUtmSgpuLetGU9EtwN5kb3u/YKHacA1bCU95Mfde9mR8EZBEQDqyq5ATfqNxyyOsh/Qxve3JyuUubWnwF5N7jqErjIK3hP4UVQXXLrYSPlxs+e18KY53zxPjA++9i+ZBI2TqAy+jygjn5RMhp/u32CCw0FLA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=oracle.com; dmarc=pass action=none header.from=oracle.com; dkim=pass header.d=oracle.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.onmicrosoft.com; s=selector2-oracle-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mjoYBwRTzr7gbRBWkpaXxVun8ef+oZu8dzhfbP1N6wg=; b=cXwAkhP+QImethXpd/5+H+kIYZKwXM6ioXrWxzlnPYjZlqBnJi3eixkZgFzqOHzPMX5Eq7MfFkMrkC23A+W6IcWfNSB6OUjyf7Vre3c9pIvhugL+sYUdCiJE5oupP61FFXDVHnwUjGzhxDSDt60yKOfJIzxVoWjyOW4UICeYlak= Received: from DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) by SA6PR10MB8061.namprd10.prod.outlook.com (2603:10b6:806:43a::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9320.17; Fri, 14 Nov 2025 13:26:38 +0000 Received: from DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2]) by DM4PR10MB8218.namprd10.prod.outlook.com ([fe80::2650:55cf:2816:5f2%7]) with mapi id 15.20.9320.013; Fri, 14 Nov 2025 13:26:38 +0000 From: Lorenzo Stoakes To: Andrew Morton Cc: Muchun Song , Oscar Salvador , David Hildenbrand , "Liam R . Howlett" , Vlastimil Babka , Mike Rapoport , Suren Baghdasaryan , Michal Hocko , Axel Rasmussen , Yuanchu Xie , Wei Xu , Peter Xu , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Valentin Schneider , Kees Cook , Matthew Wilcox , Jason Gunthorpe , John Hubbard , Leon Romanovsky , Zi Yan , Baolin Wang , Nico Pache , Ryan Roberts , Dev Jain , Barry Song , Lance Yang , Xu Xin , Chengming Zhou , Jann Horn , Matthew Brost , Joshua Hahn , Rakie Kim , Byungchul Park , Gregory Price , Ying Huang , Alistair Popple , Pedro Falcato , Shakeel Butt , David Rientjes , Rik van Riel , Harry Yoo , Kemeng Shi , Kairui Song , Nhat Pham , Baoquan He , Chris Li , Johannes Weiner , Qi Zheng , linux-kernel@vger.kernel.org, linux-fsdevel@vger.kernel.org, linux-mm@kvack.org, Miguel Ojeda , Alex Gaynor , Boqun Feng , Gary Guo , Bjorn Roy Baron , Benno Lossin , Andreas Hindborg , Alice Ryhl , Trevor Gross , Danilo Krummrich , rust-for-linux@vger.kernel.org Subject: [PATCH v2 4/4] mm: introduce VMA flags bitmap type Date: Fri, 14 Nov 2025 13:26:11 +0000 Message-ID: <195625e7d1a8ff9156cb9bb294eb128b6a4e9294.1763126447.git.lorenzo.stoakes@oracle.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: References: Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: LO4P302CA0041.GBRP302.PROD.OUTLOOK.COM (2603:10a6:600:317::19) To DM4PR10MB8218.namprd10.prod.outlook.com (2603:10b6:8:1cc::16) 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: DM4PR10MB8218:EE_|SA6PR10MB8061:EE_ X-MS-Office365-Filtering-Correlation-Id: 971f8615-2403-489f-3c3f-08de238170bb X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|1800799024|376014|7416014|366016; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?RqlUiN+PT/I6kmXdIa/QWrS9yC1f+ClE3kaq2gNC0IThvOIxYEznZX9Mg2uQ?= =?us-ascii?Q?NGXa1Pr8ScaLPwvfGqTdBtM8CE4eTsiMAqhTuJDgADRiVnPI/ZFVru7mJFCn?= =?us-ascii?Q?SFyLiFwUm479+fykoTzZg7OY17QuserK7Xz1rWuL1r0wI/ZzhJ1JEFuZ9nWl?= =?us-ascii?Q?A80aJjCze4jezAoGNUO3HFYdwqCg9IcLIc9+eIra8rxj6duTLI6p8JcW7UvN?= =?us-ascii?Q?6vBCi/DBdK5vGDrKxbzhA8pspY1rl0HH4cVGbwBiEN3LWWGjRedWzGMnTUyR?= =?us-ascii?Q?9R1+e/LznIaqxGKXiRY03ZkBjH/clidElqEHUethEAuTI9ZuQ7lHKdWbQXSg?= =?us-ascii?Q?P+0vbpzClhh+O/LK1njvhcxc6qjL/3B0ihP+LyPOCKBl4RMeP6AvXm1LWAxB?= =?us-ascii?Q?mGMmCMwWbSH4anMdn036L3T9hzQJRg0mcSC1QNf31iVHWcunzJKNJGKoHvSI?= =?us-ascii?Q?cfJ+AgMBn5UM24RljxFEw5F5jWRoCZcU/Fe1Bnk99lGbZ7TWmhWROjGkuqcC?= =?us-ascii?Q?YYN0G05ezwzsOmcaGGJt+OfnSPPafzWoW+HIzER3Q2Dy7+wmOz5VJwATzdS3?= =?us-ascii?Q?Bdfum4jSekL7nJpwtTMTZUax9FOOEDvaA3rmoWTnGHl+6/Pg6k6pQfVJ+ILn?= =?us-ascii?Q?HOj3Nn6vcm1NKPvpQW+QlWwd1ZFSnWZKgaXTcCshlHswx6J5ZKye3axngL55?= =?us-ascii?Q?v4oJ7valEdLsN9D7y3w8iLPz/Fjk4DDwD4jLoL/6rRCHf+/wRDj8HlBf+XWp?= =?us-ascii?Q?RhOOp89fdC0NVhHOb0zk8SwLwLiLMOHKqwmtgDTkz05Pox/nUvbTmhiQc29Z?= =?us-ascii?Q?aHvv3OeLwteIVznXfZQK7pERSfrM9+veKUMXp4R9DH3bpUfxQPHW1PDPbvvW?= =?us-ascii?Q?gJXBt3o3uP+EQNGbtWKum2GAtOl9uBpxhTocXJjabVt2FOXf6eHG39G4QIkf?= =?us-ascii?Q?pOB/lJiBDkNXaAzi2/AIjMtsZKc84XdQz3mQgIUr5/LUG9WsqWFgy1VEBO0z?= =?us-ascii?Q?zJ4lYKsXGc6TYHrjJxa8XJth6On3nnuU2gLyiH3eTenvzivORlqGz087Hjyy?= =?us-ascii?Q?KFESoTUwNiI2tLQipN89UgmpZ3m9wOet1Y6ip4UidenH49DGN1ghOooyn7Cx?= =?us-ascii?Q?KVWutKcSy1fxkIiLyWm4hI/P3FqvR2MXrA4R1KLVM2yNZQm3an5GsNGaXRbU?= =?us-ascii?Q?QfjbQmb/A81eC8gmruY9PzeiEZz26Go/HjZGISbFYx8rFbmmTOBBNoQMeVik?= =?us-ascii?Q?rKIgKpGsKuh5dptBUtJ/d3RQG+9xIRFjOK1hPmFe7ie9mp6j1Ycms9TEo2pK?= =?us-ascii?Q?b8AzCxIY7kRHPvQ1fpQl0dT8jE6KMcM29XNU0jD8ss2ufKjpAeu6rjnlNi8f?= =?us-ascii?Q?RGds+iF65LBbF0Oa1H7n61BW7ae5zga2E8AFPBnP/1AUyfzy6t/LZLbyOX/b?= =?us-ascii?Q?bPxcn79skuz8vYwHk5Dye+C/h4SwizL2?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DM4PR10MB8218.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(1800799024)(376014)(7416014)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?5TMU/uke5kwYK3OH1i74E9SQ+WVerXKlMjjzlE6/e6sN9KFGFY12pAshp8dC?= =?us-ascii?Q?ORNE/YN8JTeRlTXyNuKA4dkQMFCcP4hdHmFQ26QXLrMszPkprgRIyRJGr8VE?= =?us-ascii?Q?ekUHDa0VBVmBQPl9nN25UT4vUiWCT7vBOTmOQy5W61gXUkaOa6Kb/eGDkuPI?= =?us-ascii?Q?88Bci4/xotvDyTNW0d66zJuyYjx2qHu43VikkfU4ifaRRT4/1wZxe8o3Uv2X?= =?us-ascii?Q?IE8CsaaXT+No7gLLeZW4zKk0DZUsCGVH5kIfLIyk/Cu5+QzbLg+zXj3Y//MW?= =?us-ascii?Q?VjiTVk1ZyclRnRqdJknOL8Tsm4gkXsW7Y8GsCw6k7b8tIuL9pOO6yDPbpE0b?= =?us-ascii?Q?mdqIe7CvTxRyFaWWKHL/N5XQkQ64SbKo782SZZUf6UovK36Flm73U7mxv9Oe?= =?us-ascii?Q?dOjjYYwgjs2gVCUeYt+/p0d6aHBxPhLgARmdWd2IZYhCNv3iTgnHVJlbMsHQ?= =?us-ascii?Q?DqlTS/65br0rHNDxZMhRjPnnP4HSS74uRYuzQZnIoimFd2g22i25gBbTX2sP?= =?us-ascii?Q?0UrmjFDBsoAVY3kFus4KeyNBRZe60WIQLWYYagTtbe2Hsn+E9BIVpXXuFYrK?= =?us-ascii?Q?w0aVAhn6l6hkdqP+MQtqXHOSQGIWD3LiKKNDkPiTMLX6r3W25FyHdhvy2Wbj?= =?us-ascii?Q?8Uj6Ea56BKRK3AfYw1QgNrqkwJbvDFmWH6caJZF9kzfF5HccT+4r7yV1dekd?= =?us-ascii?Q?sscRFtxiQWfIhZ9iVuKn91x80mbOrfB11cXMUt5fYsxZQm3yONehEi9Pwy1C?= =?us-ascii?Q?Y2qO33Ub4IqFYfBZma/eqTxIJnDtLTKAnzicrJuVrEZBCBqJ9F8KB6rq98OJ?= =?us-ascii?Q?nYNjojcyrsb2ug/Dn7WzYpPhi1bFoRDtL4PQiWYWH1NZCYX/OJKVHRjFQd8j?= =?us-ascii?Q?Ru+1WdYjNq/BMezPmGLsZPzvqUzhFnV/0grcFbNfSwJQtsBNhWRK7yTiqMrg?= =?us-ascii?Q?/NfovuhCmn9WCLfZRLLxfyOpeOHcn6I/h+ht3OCh5k/PBOYJfYF1bsJAZHrj?= =?us-ascii?Q?YV+kn/KYxhyglU58h+8CDgEPoQEfpx5H//pg7wXQwyM+xv1v3b7kRn053VZw?= =?us-ascii?Q?xfOOFqw3hLVvddjwWD6BLAJtQ/TQyLUshtcPwnx+Ob1bs5Co0zlJQ1KP17ee?= =?us-ascii?Q?+kAshbV9xiYezWMkpmHcmXA2QDJbO+2KawUYSoWyle41BvF8C7a51diqC32C?= =?us-ascii?Q?L1uTsj/0s6Pos1sLs6s8K3d3k9OeeFgzuefhhg97YR03hCM+o0tnYLW5liSH?= =?us-ascii?Q?XKwLxmI0PlW3scd/p99BR0YWpUQxtEQOksHRIuhNO6G2cEm3fqScpHs7Gwfb?= =?us-ascii?Q?zi1j5HKQhmew64SUfDa+4zMkM2hq950Y5ZDFxlguBLoM2QzGvUWGmqLOcc3u?= =?us-ascii?Q?0yzvpn98duki7WH6bXdyB8xB22WKJNv9AkvNfLPrvB9cR0MmqK5vfTY15aKQ?= =?us-ascii?Q?PoeomyiEZ6fMarZVTG1+OIQTcc2mPevJ+GFbXjaCZBLPQQdu/vk9REheON87?= =?us-ascii?Q?QQXhrS2PD0W15E0u73UU5el86b2356IZLCzTi0ixf+LhnEKwSYlOnqxLCG68?= =?us-ascii?Q?VXuPpio5cOpe0ZftZLO66FRKjfzPJ6GzvPKZ2rB15Hv3ZJjlVGv0eBlvPH7y?= =?us-ascii?Q?6g=3D=3D?= X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: BFjoptieGhD4Dbf9z+NoGc+WYTg01oeXqPU5UOEhFQ3Iy4HYvgi0eeWY6+Be6qjzmfKTf9Q+TD+RH84V0qlH2InU55njVP9SPP4+xXOhm21bNQHpitIx7V1MrDChnB/FWGb2tK95nU76WLhj+Xj4AgcPIELVNqtGlEPxOoh33rQThBlds5AyMwD6XgaJCV6LHo7evVPQAXCWnS0zvotUpRmt9a5VCHWDDH0vpPJZhzUjw/XLE+0fCVyZ7nvZUpRf0bQwlVNm8Ff5qGZaa+I3ZMtWKn0mEaYMN5B6T2uRFXLSdEu77nZeExEFWKhpg2tiqPAjuXdPAuZ/MkavIvDz82+wuStvqPp2qR6TEyNcp1MV8fgyVVjgRjpJ30YoVnD9zzNpIJIfVnnBm9YmXoeGmoSdrDR7jLLcQU5XynJup2VYJsiJxR9xUc98d8TqchGZSvsoHc3+Beyg5sXzSShXX6nW4CsWluAGW+8BmEjaa9VuRfN2urLumMkpvByvrM4KHvozmdTswcBpGKQsSC2wO0+Sh/M7AqmzWnhPGUYRlsznIjGN61nXj/yQI+LxChurJ7Kq2g2MuH6cKv2IqaS+Jrflo/piEf3BJ6sbdIXsnEs= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 971f8615-2403-489f-3c3f-08de238170bb X-MS-Exchange-CrossTenant-AuthSource: DM4PR10MB8218.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 14 Nov 2025 13:26:38.3903 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 4e2c6054-71cb-48f1-bd6c-3a9705aca71b X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 0RfgFcQ5tzL1y1XEPSfKN2fhCj0WvP0CSj+ZoET2pX2aqRxJvDvDukI9RuuKi+ig2xEbAoSUS07A1HCoQNCqObzI6ufx2uSgLkeG0ELS7sk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA6PR10MB8061 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1121,Hydra:6.1.9,FMLib:17.12.100.49 definitions=2025-11-14_04,2025-11-13_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 malwarescore=0 adultscore=0 bulkscore=0 suspectscore=0 spamscore=0 mlxscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2510240000 definitions=main-2511140107 X-Proofpoint-GUID: j0Gq7Qs_rx-FP2UhR9nnEP7GQDmIgk3Q X-Authority-Analysis: v=2.4 cv=EPoLElZC c=1 sm=1 tr=0 ts=69172e1a cx=c_pps a=OOZaFjgC48PWsiFpTAqLcw==:117 a=OOZaFjgC48PWsiFpTAqLcw==:17 a=6eWqkTHjU83fiwn7nKZWdM+Sl24=:19 a=z/mQ4Ysz8XfWz/Q5cLBRGdckG28=:19 a=lCpzRmAYbLLaTzLvsPZ7Mbvzbb8=:19 a=xqWC_Br6kY4A:10 a=6UeiqGixMTsA:10 a=GoEa3M9JfhUA:10 a=VkNPw1HP01LnGYTKEx00:22 a=yPCof4ZbAAAA:8 a=We_X2NwUB42jDMGAftQA:9 a=UhEZJTgQB8St2RibIkdl:22 a=Z5ABNNGmrOfJ6cZ5bIyy:22 a=QOGEsqRv6VhmHaoFNykA:22 X-Proofpoint-ORIG-GUID: j0Gq7Qs_rx-FP2UhR9nnEP7GQDmIgk3Q X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUxMTEzMDE3OCBTYWx0ZWRfX2ubCfsU2c4o2 v7OwKBlitdZXl3jaJ8eqvj1tWH9MgXR0kRGKRxisG42QTm5SFtgWoceedIPHdHSmSd75IpzhCIl OfrgbT1EIduelSREhLE3txu/VieLA0CK+51R2b0aFdDQeOH4R+u5pIjLelV3uPIPBsIBubyRJxh e++aOfNudQ0Qvg0yr/09xcigfWpMsDfIhcze6ubtYRSezojZmliUkD4OBrRcTlhMKuj8t3zNsGy +He47+wHQ7oePG2m0eBOFaTHaKGqkYDjt50pnhzSVxQsxidv0Ru3/MSNvkQgijZeHtNWBiwY1rj W+/eGMMlNkDi6tpl9u6X56O2753C0UfV+91IqS9NaF47kVh0paJQTYqTyTKWzNS9m1O/SU4VCwY hWg5YLsJY1/4glxuLUBaxORKbRhPJQ== Content-Type: text/plain; charset="utf-8" It is useful to transition to using a bitmap for VMA flags so we can avoid running out of flags, especially for 32-bit kernels which are constrained to 32 flags, necessitating some features to be limited to 64-bit kernels only. By doing so, we remove any constraint on the number of VMA flags moving forwards no matter the platform and can decide in future to extend beyond 64 if required. We start by declaring an opaque types, vma_flags_t (which resembles mm_struct flags of type mm_flags_t), setting it to precisely the same size as vm_flags_t, and place it in union with vm_flags in the VMA declaration. We additionally update struct vm_area_desc equivalently placing the new opaque type in union with vm_flags. This change therefore does not impact the size of struct vm_area_struct or struct vm_area_desc. In order for the change to be iterative and to avoid impacting performance, we designate VM_xxx declared bitmap flag values as those which must exist in the first system word of the VMA flags bitmap. We therefore declare vma_flags_clear_all(), vma_flags_overwrite_word(), vma_flags_overwrite_word(), vma_flags_overwrite_word_once(), vma_flags_set_word() and vma_flags_clear_word() in order to allow us to update the existing vm_flags_*() functions to utilise these helpers. This is a stepping stone towards converting users to the VMA flags bitmap and behaves precisely as before. By doing this, we can eliminate the existing private vma->__vm_flags field in the vma->vm_flags union and replace it with the newly introduced opaque type vma_flags, which we call flags so we refer to the new bitmap field as vma->flags. We update vma_flag_[test, set]_atomic() to account for the change also. We additionally update the VMA userland test declarations to implement the same changes there. Finally, we update the rust code to reference vma->vm_flags on update rather than vma->__vm_flags which has been removed. This is safe for now, albeit it is implicitly performing a const cast. Once we introduce flag helpers we can improve this more. No functional change intended. Signed-off-by: Lorenzo Stoakes Acked-by: Vlastimil Babka --- include/linux/mm.h | 18 ++-- include/linux/mm_types.h | 64 +++++++++++++- rust/kernel/mm/virt.rs | 2 +- tools/testing/vma/vma_internal.h | 143 ++++++++++++++++++++++++++----- 4 files changed, 196 insertions(+), 31 deletions(-) diff --git a/include/linux/mm.h b/include/linux/mm.h index ad000c472bd5..79345c44a350 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -919,7 +919,8 @@ static inline void vma_init(struct vm_area_struct *vma,= struct mm_struct *mm) static inline void vm_flags_init(struct vm_area_struct *vma, vm_flags_t flags) { - ACCESS_PRIVATE(vma, __vm_flags) =3D flags; + vma_flags_clear_all(&vma->flags); + vma_flags_overwrite_word(&vma->flags, flags); } =20 /* @@ -938,21 +939,26 @@ static inline void vm_flags_reset_once(struct vm_area= _struct *vma, vm_flags_t flags) { vma_assert_write_locked(vma); - WRITE_ONCE(ACCESS_PRIVATE(vma, __vm_flags), flags); + /* + * The user should only be interested in avoiding reordering of + * assignment to the first word. + */ + vma_flags_clear_all(&vma->flags); + vma_flags_overwrite_word_once(&vma->flags, flags); } =20 static inline void vm_flags_set(struct vm_area_struct *vma, vm_flags_t flags) { vma_start_write(vma); - ACCESS_PRIVATE(vma, __vm_flags) |=3D flags; + vma_flags_set_word(&vma->flags, flags); } =20 static inline void vm_flags_clear(struct vm_area_struct *vma, vm_flags_t flags) { vma_start_write(vma); - ACCESS_PRIVATE(vma, __vm_flags) &=3D ~flags; + vma_flags_clear_word(&vma->flags, flags); } =20 /* @@ -995,12 +1001,14 @@ static inline bool __vma_flag_atomic_valid(struct vm= _area_struct *vma, static inline void vma_flag_set_atomic(struct vm_area_struct *vma, vma_flag_t bit) { + unsigned long *bitmap =3D ACCESS_PRIVATE(&vma->flags, __vma_flags); + /* mmap read lock/VMA read lock must be held. */ if (!rwsem_is_locked(&vma->vm_mm->mmap_lock)) vma_assert_locked(vma); =20 if (__vma_flag_atomic_valid(vma, bit)) - set_bit((__force int)bit, &ACCESS_PRIVATE(vma, __vm_flags)); + set_bit((__force int)bit, bitmap); } =20 /* diff --git a/include/linux/mm_types.h b/include/linux/mm_types.h index 3550672e0f9e..b71625378ce3 100644 --- a/include/linux/mm_types.h +++ b/include/linux/mm_types.h @@ -848,6 +848,15 @@ struct mmap_action { bool hide_from_rmap_until_complete :1; }; =20 +/* + * Opaque type representing current VMA (vm_area_struct) flag state. Must = be + * accessed via vma_flags_xxx() helper functions. + */ +#define NUM_VMA_FLAG_BITS BITS_PER_LONG +typedef struct { + DECLARE_BITMAP(__vma_flags, NUM_VMA_FLAG_BITS); +} __private vma_flags_t; + /* * Describes a VMA that is about to be mmap()'ed. Drivers may choose to * manipulate mutable fields which will cause those fields to be updated i= n the @@ -865,7 +874,10 @@ struct vm_area_desc { /* Mutable fields. Populated with initial state. */ pgoff_t pgoff; struct file *vm_file; - vm_flags_t vm_flags; + union { + vm_flags_t vm_flags; + vma_flags_t vma_flags; + }; pgprot_t page_prot; =20 /* Write-only fields. */ @@ -910,10 +922,12 @@ struct vm_area_struct { /* * Flags, see mm.h. * To modify use vm_flags_{init|reset|set|clear|mod} functions. + * Preferably, use vma_flags_xxx() functions. */ union { + /* Temporary while VMA flags are being converted. */ const vm_flags_t vm_flags; - vm_flags_t __private __vm_flags; + vma_flags_t flags; }; =20 #ifdef CONFIG_PER_VMA_LOCK @@ -994,6 +1008,52 @@ struct vm_area_struct { #endif } __randomize_layout; =20 +/* Clears all bits in the VMA flags bitmap, non-atomically. */ +static inline void vma_flags_clear_all(vma_flags_t *flags) +{ + bitmap_zero(ACCESS_PRIVATE(flags, __vma_flags), NUM_VMA_FLAG_BITS); +} + +/* + * Copy value to the first system word of VMA flags, non-atomically. + * + * IMPORTANT: This does not overwrite bytes past the first system word. The + * caller must account for this. + */ +static inline void vma_flags_overwrite_word(vma_flags_t *flags, unsigned l= ong value) +{ + *ACCESS_PRIVATE(flags, __vma_flags) =3D value; +} + +/* + * Copy value to the first system word of VMA flags ONCE, non-atomically. + * + * IMPORTANT: This does not overwrite bytes past the first system word. The + * caller must account for this. + */ +static inline void vma_flags_overwrite_word_once(vma_flags_t *flags, unsig= ned long value) +{ + unsigned long *bitmap =3D ACCESS_PRIVATE(flags, __vma_flags); + + WRITE_ONCE(*bitmap, value); +} + +/* Update the first system word of VMA flags setting bits, non-atomically.= */ +static inline void vma_flags_set_word(vma_flags_t *flags, unsigned long va= lue) +{ + unsigned long *bitmap =3D ACCESS_PRIVATE(flags, __vma_flags); + + *bitmap |=3D value; +} + +/* Update the first system word of VMA flags clearing bits, non-atomically= . */ +static inline void vma_flags_clear_word(vma_flags_t *flags, unsigned long = value) +{ + unsigned long *bitmap =3D ACCESS_PRIVATE(flags, __vma_flags); + + *bitmap &=3D ~value; +} + #ifdef CONFIG_NUMA #define vma_policy(vma) ((vma)->vm_policy) #else diff --git a/rust/kernel/mm/virt.rs b/rust/kernel/mm/virt.rs index a1bfa4e19293..da21d65ccd20 100644 --- a/rust/kernel/mm/virt.rs +++ b/rust/kernel/mm/virt.rs @@ -250,7 +250,7 @@ unsafe fn update_flags(&self, set: vm_flags_t, unset: v= m_flags_t) { // SAFETY: This is not a data race: the vma is undergoing initial = setup, so it's not yet // 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 inva= lid value. - unsafe { (*self.as_ptr()).__bindgen_anon_2.__vm_flags =3D flags }; + unsafe { (*self.as_ptr()).__bindgen_anon_2.vm_flags =3D flags }; } =20 /// Set the `VM_MIXEDMAP` flag on this vma. diff --git a/tools/testing/vma/vma_internal.h b/tools/testing/vma/vma_inter= nal.h index 18659214e262..13ee825bdfcf 100644 --- a/tools/testing/vma/vma_internal.h +++ b/tools/testing/vma/vma_internal.h @@ -528,6 +528,15 @@ typedef struct { __private DECLARE_BITMAP(__mm_flags, NUM_MM_FLAG_BITS); } mm_flags_t; =20 +/* + * Opaque type representing current VMA (vm_area_struct) flag state. Must = be + * accessed via vma_flags_xxx() helper functions. + */ +#define NUM_VMA_FLAG_BITS BITS_PER_LONG +typedef struct { + DECLARE_BITMAP(__vma_flags, NUM_VMA_FLAG_BITS); +} __private vma_flags_t; + struct mm_struct { struct maple_tree mm_mt; int map_count; /* number of VMAs */ @@ -612,7 +621,10 @@ struct vm_area_desc { /* Mutable fields. Populated with initial state. */ pgoff_t pgoff; struct file *vm_file; - vm_flags_t vm_flags; + union { + vm_flags_t vm_flags; + vma_flags_t vma_flags; + }; pgprot_t page_prot; =20 /* Write-only fields. */ @@ -658,7 +670,7 @@ struct vm_area_struct { */ union { const vm_flags_t vm_flags; - vm_flags_t __private __vm_flags; + vma_flags_t flags; }; =20 #ifdef CONFIG_PER_VMA_LOCK @@ -1372,26 +1384,6 @@ static inline bool may_expand_vm(struct mm_struct *m= m, vm_flags_t flags, return true; } =20 -static inline void vm_flags_init(struct vm_area_struct *vma, - vm_flags_t flags) -{ - vma->__vm_flags =3D flags; -} - -static inline void vm_flags_set(struct vm_area_struct *vma, - vm_flags_t flags) -{ - vma_start_write(vma); - vma->__vm_flags |=3D flags; -} - -static inline void vm_flags_clear(struct vm_area_struct *vma, - vm_flags_t flags) -{ - vma_start_write(vma); - vma->__vm_flags &=3D ~flags; -} - static inline int shmem_zero_setup(struct vm_area_struct *vma) { return 0; @@ -1548,13 +1540,118 @@ static inline void userfaultfd_unmap_complete(stru= ct mm_struct *mm, { } =20 -# define ACCESS_PRIVATE(p, member) ((p)->member) +#define ACCESS_PRIVATE(p, member) ((p)->member) + +#define bitmap_size(nbits) (ALIGN(nbits, BITS_PER_LONG) / BITS_PER_BYTE) + +static __always_inline void bitmap_zero(unsigned long *dst, unsigned int n= bits) +{ + unsigned int len =3D bitmap_size(nbits); + + if (small_const_nbits(nbits)) + *dst =3D 0; + else + memset(dst, 0, len); +} =20 static inline bool mm_flags_test(int flag, const struct mm_struct *mm) { return test_bit(flag, ACCESS_PRIVATE(&mm->flags, __mm_flags)); } =20 +/* Clears all bits in the VMA flags bitmap, non-atomically. */ +static inline void vma_flags_clear_all(vma_flags_t *flags) +{ + bitmap_zero(ACCESS_PRIVATE(flags, __vma_flags), NUM_VMA_FLAG_BITS); +} + +/* + * Copy value to the first system word of VMA flags, non-atomically. + * + * IMPORTANT: This does not overwrite bytes past the first system word. The + * caller must account for this. + */ +static inline void vma_flags_overwrite_word(vma_flags_t *flags, unsigned l= ong value) +{ + *ACCESS_PRIVATE(flags, __vma_flags) =3D value; +} + +/* + * Copy value to the first system word of VMA flags ONCE, non-atomically. + * + * IMPORTANT: This does not overwrite bytes past the first system word. The + * caller must account for this. + */ +static inline void vma_flags_overwrite_word_once(vma_flags_t *flags, unsig= ned long value) +{ + unsigned long *bitmap =3D ACCESS_PRIVATE(flags, __vma_flags); + + WRITE_ONCE(*bitmap, value); +} + +/* Update the first system word of VMA flags setting bits, non-atomically.= */ +static inline void vma_flags_set_word(vma_flags_t *flags, unsigned long va= lue) +{ + unsigned long *bitmap =3D ACCESS_PRIVATE(flags, __vma_flags); + + *bitmap |=3D value; +} + +/* Update the first system word of VMA flags clearing bits, non-atomically= . */ +static inline void vma_flags_clear_word(vma_flags_t *flags, unsigned long = value) +{ + unsigned long *bitmap =3D ACCESS_PRIVATE(flags, __vma_flags); + + *bitmap &=3D ~value; +} + + +/* Use when VMA is not part of the VMA tree and needs no locking */ +static inline void vm_flags_init(struct vm_area_struct *vma, + vm_flags_t flags) +{ + vma_flags_clear_all(&vma->flags); + vma_flags_overwrite_word(&vma->flags, flags); +} + +/* + * Use when VMA is part of the VMA tree and modifications need coordination + * Note: vm_flags_reset and vm_flags_reset_once do not lock the vma and + * it should be locked explicitly beforehand. + */ +static inline void vm_flags_reset(struct vm_area_struct *vma, + vm_flags_t flags) +{ + vma_assert_write_locked(vma); + vm_flags_init(vma, flags); +} + +static inline void vm_flags_reset_once(struct vm_area_struct *vma, + vm_flags_t flags) +{ + vma_assert_write_locked(vma); + /* + * The user should only be interested in avoiding reordering of + * assignment to the first word. + */ + vma_flags_clear_all(&vma->flags); + vma_flags_overwrite_word_once(&vma->flags, flags); +} + +static inline void vm_flags_set(struct vm_area_struct *vma, + vm_flags_t flags) +{ + vma_start_write(vma); + vma_flags_set_word(&vma->flags, flags); +} + +static inline void vm_flags_clear(struct vm_area_struct *vma, + vm_flags_t flags) +{ + vma_start_write(vma); + vma_flags_clear_word(&vma->flags, flags); +} + /* * Denies creating a writable executable mapping or gaining executable per= missions. * --=20 2.51.0