From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id D93D0C02198 for ; Sun, 16 Feb 2025 14:17:26 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id B2F7F6B00C5; Sun, 16 Feb 2025 09:17:25 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id ADFCC6B00C6; Sun, 16 Feb 2025 09:17:25 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 958D36B00C7; Sun, 16 Feb 2025 09:17:25 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id 705B86B00C5 for ; Sun, 16 Feb 2025 09:17:25 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay10.hostedemail.com (Postfix) with ESMTP id D332AC0750 for ; Sun, 16 Feb 2025 14:17:24 +0000 (UTC) X-FDA: 83126010408.06.A5809D3 Received: from NAM04-BN8-obe.outbound.protection.outlook.com (mail-bn8nam04on2058.outbound.protection.outlook.com [40.107.100.58]) by imf18.hostedemail.com (Postfix) with ESMTP id 15A6B1C0006 for ; Sun, 16 Feb 2025 14:17:21 +0000 (UTC) Authentication-Results: imf18.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b="I/MbeO5t"; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf18.hostedemail.com: domain of ziy@nvidia.com designates 40.107.100.58 as permitted sender) smtp.mailfrom=ziy@nvidia.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1739715442; a=rsa-sha256; cv=pass; b=gjhpYdnJ9FAZUONSPeeM2xufWBE+F3r23IAwXZKBOmVDYIp1erfUVrJGNmIgSo45qar4l2 IcPlHp318yoWnk+T2NU11e3kCJolphe/RhD+SkC4EIfGFavuvd5QwIzO6+CH+Yb67jbB4b S1OkEH7r1cXSvmb8tgOtP2BuxxozTBY= ARC-Authentication-Results: i=2; imf18.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b="I/MbeO5t"; dmarc=pass (policy=reject) header.from=nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); spf=pass (imf18.hostedemail.com: domain of ziy@nvidia.com designates 40.107.100.58 as permitted sender) smtp.mailfrom=ziy@nvidia.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739715442; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=Rdk6KOdowAxoYgHmxqFi58UPIPJpHV2RePrCiOmXthA=; b=SIwl8P6/d01cB+yDosPGJ+B/Q+V4H6OMNnDrY5Ww7W59BlAPL0CkVhknwGIIpzpoNRCIlW HHt8SK58OEg2oau/21gg/Rh9dCLcGim3fjThPR4iNGA+8wNZHPpK0Go14U+COYDYXEkXpS w/GV7IIoVCr7uawRHXAx9PgQCbML4jU= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=jy6sJnTsPFStqhEaPrHVbKZo8jmoNeVM+a7QQG3zY+C/K31XNjbj+IL47IxOxqAl08fhidtyTZJT+fEPaaFQi2PDB1SULOpFV6e40iBp5ssgWDfCHTbwLCS+MlvUqwvDphJkq9i7jfiJ8+t+jin0BVnjhstuhB2oU4O5UtnQP9UVY0qWsXaxhNsS7IkkgRJxjyPXbd4XE0VSbAoM5QT7UdM873tqai0ZrRAkOsIIxrPedtMLXoiYQRpNAdW4skFVilrINkXjiZL7OrnChXHS5BIcDpZQxhYls2UPk6NRcoTY3PUFZi2eh85DZQl08C/nGb/8Fl1YpnrcgLu+YuWNVQ== 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=Rdk6KOdowAxoYgHmxqFi58UPIPJpHV2RePrCiOmXthA=; b=c7zgSHb2Bh8Irn+2J+dLK73M0dwg4jCsp5JabkFGxUE/MP4LByrz1S5IYT1Zb5PNYDVezODvfOz1x7s3cK3dzVh2/UW8ZvuGd7QzhZ5JStjXnvGLs69eG5/shKEtT3/5wIU7+AQwlaLO33gmIManrtbQwAnLxjdkut9XNtDYJeYKjeCm6pS73XOGlX8mYJueJXPwEBhZiFJ9k2ia6AFM0lJwoPmuP4QW9FOilwaQT6XGiMHq5xdbKgyfrGDVh7bL0U+dU7NR1fkox29WKO4OWpOt6our1KjMBodoQmUsjaIcdeBp2c2xQrr53/x6j3H/JopbiJTM+YqcJjzyzF1dEQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Rdk6KOdowAxoYgHmxqFi58UPIPJpHV2RePrCiOmXthA=; b=I/MbeO5tgZ7LKLsaO1YYKYiQhaCvq4jtr4rbvOH+SPjHnDrpjigQ+Rk/dC8dEjSlmwmp+3dBJLUgPLUh2nwRHCDN+Jkjir1dK0f8aYb3XQD3UAB+Rwo2KxomUGK8g9Jq0lAdrmlw/ByQ5VYJG+UM9X5x5/l+gCyw0kNEc5eIKx9zBrve+R6VOA8z8xheP65Ogai/6nXjvo6FBW1oobhCT1/5IF2pom7k44UJWIZ+oVbjBnKKfgRXlASKLrMXeQPPsmn1owXuxIP6hrEGSIO4MuWA8MjRnFD+6OtLmboijtYGvHCnYi2EYy6hJ0wn9hXlsODu1hl+nYJBiZ1RN0oZNQ== Received: from DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) by IA0PPF316EEACD8.namprd12.prod.outlook.com (2603:10b6:20f:fc04::bcb) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8445.19; Sun, 16 Feb 2025 14:17:19 +0000 Received: from DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a]) by DS7PR12MB9473.namprd12.prod.outlook.com ([fe80::5189:ecec:d84a:133a%5]) with mapi id 15.20.8445.017; Sun, 16 Feb 2025 14:17:17 +0000 From: Zi Yan To: David Hildenbrand Cc: linux-mm@kvack.org, Andrew Morton , "Kirill A . Shutemov" , "Matthew Wilcox (Oracle)" , Ryan Roberts , Hugh Dickins , Yang Shi , Miaohe Lin , Kefeng Wang , Yu Zhao , John Hubbard , Baolin Wang , linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH v7 4/8] mm/huge_memory: add buddy allocator like (non-uniform) folio_split() Date: Sun, 16 Feb 2025 09:17:14 -0500 X-Mailer: MailMate (2.0r6222) Message-ID: <4483B46A-FEAF-46D9-AFF4-F0DF34864633@nvidia.com> In-Reply-To: References: <20250211155034.268962-1-ziy@nvidia.com> <20250211155034.268962-5-ziy@nvidia.com> Content-Type: text/plain Content-Transfer-Encoding: quoted-printable X-ClientProxiedBy: BL1PR13CA0356.namprd13.prod.outlook.com (2603:10b6:208:2c6::31) To DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB9473:EE_|IA0PPF316EEACD8:EE_ X-MS-Office365-Filtering-Correlation-Id: 1969640b-2a41-4888-2392-08dd4e949e01 X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|366016|7416014|1800799024; X-Microsoft-Antispam-Message-Info: =?us-ascii?Q?35Suxc7Hc7JWYDm98gsnDexfOBvp0odwLKUOxlRDTy2kL6oemIhYbtJyqMCh?= =?us-ascii?Q?IiuDIepCFLBYioIjDkbCL38wFMkdiGkyG15OdAqFGtG/Iw93SHX9Ue/Brlqq?= =?us-ascii?Q?O36wNiAyQgAufNN1vtHSqGEujhT7t0tjLzXiFdWJKLbyu5wNiO2MQmnFJ7b/?= =?us-ascii?Q?opF6z8jfcOJhqZAMzK2iNPid40h9ZQ4KX3Ntv+GR4/9zrCJzCAOkYwZrfVnx?= =?us-ascii?Q?jQH95TdgCpLChXa/eRR9PR3POMeTsIN2L6X7zdGdOx9D1qP7DUZbt1DFSXir?= =?us-ascii?Q?S6NsIYj+1he0UZqpgFgMNjhC6YFVuXeqmjvEHJK6aHC2btHhKNrHRU4Rip5H?= =?us-ascii?Q?AWoQSjca0S695r/4y5XFIvJUQMulBmtClBZ7SmOqwFFMwVne/OSjinjYwLv1?= =?us-ascii?Q?+rUYK6MhSbkfA6f59QPDkZAC+dcV+ZiAz/ciBpEbPhpcaYai0GLGGDU7iCho?= =?us-ascii?Q?24usbgiq+QSguv4zYMaUz2p8ZZ52GJsdWBu97oD/XfKcfPoVYLDT7EUDewZD?= =?us-ascii?Q?29KZLZ4aL95r0K2SDSoWNyL50XF0sUJaFvslq6tgls2edMXEaCona66P4++e?= =?us-ascii?Q?3JNAdQ7YYObJS3LfRcvArxkteFAs7ld8YZq5nYi6cYZZsPlRntDRai9y9Q6X?= =?us-ascii?Q?mRpWep6+u86FJrmTMtKKNnUoeLiEKpk2dzcgsIrRlQqkp+ZPDeU8XzjPG4Ac?= =?us-ascii?Q?hvo4QA29Lhsjo6IUl9sWJs/WLfF6FA+dyGS2stRYzAP6l0cN74aiOULMQwzJ?= =?us-ascii?Q?iJkphOuxlusOAPSXf+eapa9z8ZIWoSmRaw+k4ikMBunZXDyF1Xbd4x03zaG6?= =?us-ascii?Q?P0L882jhsUKohl6etpYZDLc5tPYNnoKTMzC56vUsWH2XzCcWKDihSntCsACz?= =?us-ascii?Q?MGJf6+h3QhHy1yJhrZqelS/IjbILuURRHN9symVVtlmvNH70HsDFsd/OfIu1?= =?us-ascii?Q?C68TKCyTJM9iz/erbhsPLvKTFy8iDxxN9KxDxiyJUNU4sIywi2x6cfdRlwQg?= =?us-ascii?Q?I98LErd6wzir5bue0yzpPKoRW3YlgQQjOvW0wn2789HldyBs+paYgJVxVV3r?= =?us-ascii?Q?HEx5LRUB4o+Uk4N3wqWJ2h//DSkpdfDyHYt9RdHnHNUHjrqT7U9ZgRVP1+FU?= =?us-ascii?Q?Shu0fHLkRINuvsCuILMhZ/puYC5VJGsXbGKGog1FtqKPqJdj+yPd2itLMdYK?= =?us-ascii?Q?U4JYRoJYpmpxogWqXDkx+65dJMMajKSOC0srlwgJNM8IKFLWXZZ40qbeq1MW?= =?us-ascii?Q?ePt33b0YNDnnYpNZTAi0xL57zBqnPujYpx2OPqVQD3yVbavGdH6l8S1X6gvd?= =?us-ascii?Q?J4l956GkYDHEzD2lCA0bDMaIwU7ZjQpDmhBPFcLKspfsUoIiGQw/0dXkp67E?= =?us-ascii?Q?ovdJ+Vgc8Lpfk4x9lHLG0R7AVyx1?= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:DS7PR12MB9473.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230040)(376014)(366016)(7416014)(1800799024);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?us-ascii?Q?HBXFYW+433Mdwn+Q6jGuItvJpL0qbYtsDyW7F67Nfx0yHZAfa/olhV04QnSW?= =?us-ascii?Q?QlGnn3PQwxH9NHc98pUtQlsNsdfBw4APSxtZRWzqt2/49c6FR48nLe8d1ziE?= =?us-ascii?Q?T3My6yPsv7y3hfoU2IYIP+wrnT6m2O8v81LwyO0QAbLT0J11mMyuOsCqgdcx?= =?us-ascii?Q?ygqqtuFlwFxPh4m5LdWyPs2K3N2gV/5DpsKANNMVmoQmtVmUJdlQAjXYrDsI?= =?us-ascii?Q?8bKPlFuK58RXkr7GlUWa2T8WTgx2YqFzvig3fSc6oumQQvfyv7Dlh3lVch+m?= =?us-ascii?Q?8gUtNAEZkCMV7b8WzrvBwut8ha6HGBQYvPjGNRTQlSRQW6hgHGAX822Vgaas?= =?us-ascii?Q?s9G677VeDuGGk2o4MjhrGmdZImojL/NJt0a3RL5rnCIHsQdNvOQHQtVOODIx?= =?us-ascii?Q?NeNVhxRk7UAv/CmJr3ZoJhNEmy9H3x/2qUNfVtAF5lLkUB+6dc8iFR3bdED/?= =?us-ascii?Q?HnMgq1HKBzLxynaFUCTl4jgWuLbO3MNniNp7nvG+CGgd7ESfnjv75KYh67FR?= =?us-ascii?Q?FUNX/6IsAkStlmi1wY9adSGBJ8sA4hh09Hzs10AEQI2EXb+L2M7HwiYarnmF?= =?us-ascii?Q?1EWIQpBpeZdrTe/ECy/X7ewyg4jiMz9MSSkFGUwVOy2oq0hHvayhUy10Oh13?= =?us-ascii?Q?8fxNqoluwXZJiHXr2sDWXZfZswy8KVzRodwJoF3LNAPZRRZEaknwRUfdpvIi?= =?us-ascii?Q?xIFFRLsWY3YyK6mHmRoXAz8/XcGHgtiwDZ5133SSkoBWROkhG0Jtqg4UjvRT?= =?us-ascii?Q?ABWrqVzNWw+Ae4z04cmVPlN3RfaA9KPdS/ZeAoHiZWD4o2/mXVUTylex2XLm?= =?us-ascii?Q?dK4dsqwU4hTn7dN2nSaQ2R45c9VaepZ1rfhVi/H8+WpOStbVsrBn6vAAIkkd?= =?us-ascii?Q?AxALwOpto2BGq2bvgrQzSPQrw9k6zdMtiukEkukyI4NOwZZsZku7yxEQEnWO?= =?us-ascii?Q?HbGKqIk9VHqslYdju29X3V8RfCJiOltPCge1Wl/B+9IE+KHjS7NTKnBsrcv+?= =?us-ascii?Q?drsy+KBzU//fEe8h0vfmavWAMOOqPvkb9wTpsTTjw5FcW34PSAg19B88qMLx?= =?us-ascii?Q?EbviiTZINmgWtmBWeoLJLG+20e/V7BgncjUCeFBurWMzazJ1gaB5pKcyO+gq?= =?us-ascii?Q?0Qcu492MMAzu4lmU1828hbYozajlaPjWGYvb3f6gxY3U+oGnu6bN6FoC3qme?= =?us-ascii?Q?WsgT8neagqKJD1L0eXSPhuC01vgYMFNfp+Qp/dcCGGyx56HAYyx8aHA5XJ2B?= =?us-ascii?Q?uHjQnykL/GKvTN4ntKgfePhdkEU6bO+QZ37rMKfAX90Dbhc8wUBbEaFld+js?= =?us-ascii?Q?PJwub+YB/iSqDjgpIOa0OSIbG5j2N7HGOzBfTIt9QR9a5F/r2OBRZ9blPwy8?= =?us-ascii?Q?GEb4IndFkV1L5OERow0vrp8zk22j4YMT+ha9lQ8S6u/IDWvGXWxG9veOSlL0?= =?us-ascii?Q?cAjA0s/EShia4lFTkxhxxy2z/jJUwNogguPAmh7AAxluUZfaxuF6H0dOvr+s?= =?us-ascii?Q?QMPkDh38IYJM/LryMQM+IPDt5s5SouWUAWfKa996agJThzCPYAphlO6G1rvn?= =?us-ascii?Q?+/oV/UWIJuKT4JeBr3Y=3D?= X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: 1969640b-2a41-4888-2392-08dd4e949e01 X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB9473.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 16 Feb 2025 14:17:17.1177 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: vFl9WXyEMFTt2KGnIo2K/ywo2P7Ifo8I6Im6gxy/fTZd1QLKMGOkbC21I+NofX3/ X-MS-Exchange-Transport-CrossTenantHeadersStamped: IA0PPF316EEACD8 X-Rspam-User: X-Rspamd-Queue-Id: 15A6B1C0006 X-Rspamd-Server: rspam12 X-Stat-Signature: hmhomhpae43czqxxm6bg14gfbt6ag87s X-HE-Tag: 1739715441-390024 X-HE-Meta: U2FsdGVkX1/aGncFWCV/hFkPECT0sj2tN/efj8yVqVCtXkPYHFWRKURydWbYyRaWWEeWwAvp0aAnbNxeNdPzUVrhDkZaQZvVw9q2m7XZldr9Lv3MDD7kimIDMoe7lsi0189kVMj9WETDdwlS344/LbhjkwBV/Y8lMA4+Z6xutsXU/sygkoTIflvDg8WjePCQ/XeyiYB8TS0ybkdCdeawG8BscHjKSwQSt8Jy2iXa+cwGOXf2jbnMULQ9v76MfKwxAB4SfQfFTPHPlIkbQv9QNn0+NVE59xlsRTWe+koOLxQEvo2IyAfJ9kUjmHOhMIOGFPdjTg5UNZs6B0htA//6AOsTrtsltF4zgoLHTUEjHmBN1/yAaDZ2LnIcznXoRqh8+XjsRBEqsRJQrNKV+FbWvfZ5QJ+9rKXNtbi+tCftNdqVaV9kRLtrDCjreuA0DVmUfM47AS5kB+GcUjSpn64NxbVAJJm7CqgI9tQPZ9TIxuMBBxcX/3MrAXRnsBuY7JU8zAYCbscPdn+P5DPBqMXkISpqqXkusqoiEw684zzze8UgNmd3VfZE5/9Ov4jsZfgdg86I0/OoJHjy0nczKK1Bo8M4npJCvqYErnvmqoxRfHWrt5zhUfG2eN1HEKloMCFAPBTG8xGSM3Mnayh/837m0ja6UPQ2hnnacZRNHZHbdvKfVpVf3XZu5TjUTVnB6uhX5IV5kbGq6lem0j/hqapPIsrhDbGUJN8QwqcA1nZsOGG0mMB0e2bbGPSGhpFxesKWlFMP/GLGqWKE4guGTSAeGI85ma1viFAIufYOvsrHhfxTE7bZI2BAp/K5PH1yr7bGZ2nL22QSl7yYV1VxQ+tZYozT7CVJWiF1sqZAXWod/XnGLbCSlN6O6d4rzcV0HA6vXxGDx61ZaiX+8ZM5FRHI4p9E2wBL4q1Xa4TkBM/HMKacabP0plDj/RmxNF22iD4hmQr2dBZTZEl7f+RKCEF 9tBNBYGl RdMNtO5vHcBMxMkkhgBsaCusOkkPl8dxFOFZ8YaInNID6ayM///WMj9vRPzWTP3UhgG4RR/EztMx7ijt/8H97X3tHiMzIW9fqkQrLEhV6pq1KkEGnR1C9p3Kl+PPbzko0irsGJlO/zQcDxAdkugttHsJxv09/HoTpDB6fvUnVtpr0uD+eHzW2WDgrJrakmECR/CX5sFls0QqSmNEL8dsHyzXhXZ5nx3Hbd0HlqObwmQXE2AHMSMzEQL5iAA/fhwAMcl5Rych+seq/t0YIXoYtNJIfKJAd2OFqsDObCwWllvqFGwBObdR1BAgTTFCTdBRCj57ZVMs1brg+h2tgAD2Plk0ENDDucCiXRN5rV7fUGTT5aN2nBSNMbn/DeKjN2atX4SU8Z90sGrNOevI= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On 16 Feb 2025, at 5:32, David Hildenbrand wrote: > On 11.02.25 16:50, Zi Yan wrote: >> folio_split() splits a large folio in the same way as buddy allocator >> splits a large free page for allocation. The purpose is to minimize th= e >> number of folios after the split. For example, if user wants to free t= he >> 3rd subpage in a order-9 folio, folio_split() will split the order-9 f= olio >> as: >> O-0, O-0, O-0, O-0, O-2, O-3, O-4, O-5, O-6, O-7, O-8 if it is anon, >> since anon folio does not support order-1 yet. >> ----------------------------------------------------------------- >> | | | | | | | | | >> |O-0|O-0|O-0|O-0| O-2 |...| O-7 | O-8 | >> | | | | | | | | | >> ----------------------------------------------------------------- >> >> O-1, O-0, O-0, O-2, O-3, O-4, O-5, O-6, O-7, O-9 if it is pagecac= he >> --------------------------------------------------------------- >> | | | | | | | | >> | O-1 |O-0|O-0| O-2 |...| O-7 | O-8 | >> | | | | | | | | >> --------------------------------------------------------------- >> >> It generates fewer folios (i.e., 11 or 10) than existing page split >> approach, which splits the order-9 to 512 order-0 folios. It also redu= ces >> the number of new xa_node needed during a pagecache folio split from >> 8 to 1, potentially decreasing the folio split failure rate due to mem= ory >> constraints. >> >> folio_split() and existing split_huge_page_to_list_to_order() share >> the folio unmapping and remapping code in __folio_split() and the comm= on >> backend split code in __split_unmapped_folio() using >> uniform_split variable to distinguish their operations. >> >> uniform_split_supported() and non_uniform_split_supported() are added >> to factor out check code and will be used outside __folio_split() in t= he >> following commit. >> >> Signed-off-by: Zi Yan >> --- >> mm/huge_memory.c | 137 ++++++++++++++++++++++++++++++++++-----------= -- >> 1 file changed, 100 insertions(+), 37 deletions(-) >> >> diff --git a/mm/huge_memory.c b/mm/huge_memory.c >> index 21ebe2dec5a4..400dfe8a6e60 100644 >> --- a/mm/huge_memory.c >> +++ b/mm/huge_memory.c >> @@ -3853,12 +3853,68 @@ static int __split_unmapped_folio(struct folio= *folio, int new_order, >> return ret; >> } >> +static bool non_uniform_split_supported(struct folio *folio, unsigne= d int new_order, >> + bool warns) >> +{ >> + /* order-1 is not supported for anonymous THP. */ >> + if (folio_test_anon(folio) && new_order =3D=3D 1) { >> + VM_WARN_ONCE(warns, "Cannot split to order-1 folio"); >> + return false; >> + } >> + >> + /* >> + * No split if the file system does not support large folio. >> + * Note that we might still have THPs in such mappings due to >> + * CONFIG_READ_ONLY_THP_FOR_FS. But in that case, the mapping >> + * does not actually support large folios properly. >> + */ >> + if (IS_ENABLED(CONFIG_READ_ONLY_THP_FOR_FS) && >> + !mapping_large_folio_support(folio->mapping)) { > > In this (and a similar case below), you need > > if (IS_ENABLED(CONFIG_READ_ONLY_THP_FOR_FS) && > !folio_test_anon(folio) && > !mapping_large_folio_support(folio->mapping)) { > > Otherwise mapping_large_folio_support() is unhappy: > Thanks. The patch below should fix it. I am going to send V8, since 1. there have been 4 fixes so far for V7, a new series would help people review; 2. based on the discussion with you in THP cabal meeting, to convert split_huge_page*() to use __folio_split(), the current __folio_split() interface becomes awkward. Two changes are needed: a) use in folio offset instead of struct page, since even in truncate_inode_partial_folio() I needed to convert in folio offset struct page to use my current interface; b) split_huge_page*()'s caller might hold the page lock at a non-head page, so an additional keep_lock_at_in_folio_offset is needed to indicate which after-split folio should be kept locked after split is done. =46rom 8b2aa5432c8d726a1fb6ce74c971365650da9370 Mon Sep 17 00:00:00 2001 From: Zi Yan Date: Sun, 16 Feb 2025 09:01:29 -0500 Subject: [PATCH] mm/huge_memory: check folio_test_anon() before mapping_large_folio_support() Otherwise mapping_large_folio_support() complains. Signed-off-by: Zi Yan --- mm/huge_memory.c | 48 ++++++++++++++++++++++++------------------------ 1 file changed, 24 insertions(+), 24 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 87cb62c81bf3..deb16fe662c4 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -3629,20 +3629,19 @@ static int __split_unmapped_folio(struct folio *f= olio, int new_order, bool non_uniform_split_supported(struct folio *folio, unsigned int new_o= rder, bool warns) { - /* order-1 is not supported for anonymous THP. */ - if (folio_test_anon(folio) && new_order =3D=3D 1) { - VM_WARN_ONCE(warns, "Cannot split to order-1 folio"); - return false; - } - - /* - * No split if the file system does not support large folio. - * Note that we might still have THPs in such mappings due to - * CONFIG_READ_ONLY_THP_FOR_FS. But in that case, the mapping - * does not actually support large folios properly. - */ - if (IS_ENABLED(CONFIG_READ_ONLY_THP_FOR_FS) && + if (folio_test_anon(folio)) { + /* order-1 is not supported for anonymous THP. */ + VM_WARN_ONCE(warns && new_order =3D=3D 1, + "Cannot split to order-1 folio"); + return new_order !=3D 1; + } else if (IS_ENABLED(CONFIG_READ_ONLY_THP_FOR_FS) && !mapping_large_folio_support(folio->mapping)) { + /* + * No split if the file system does not support large folio. + * Note that we might still have THPs in such mappings due to + * CONFIG_READ_ONLY_THP_FOR_FS. But in that case, the mapping + * does not actually support large folios properly. + */ VM_WARN_ONCE(warns, "Cannot split file folio to non-0 order"); return false; @@ -3662,24 +3661,25 @@ bool non_uniform_split_supported(struct folio *fo= lio, unsigned int new_order, bool uniform_split_supported(struct folio *folio, unsigned int new_order= , bool warns) { - if (folio_test_anon(folio) && new_order =3D=3D 1) { - VM_WARN_ONCE(warns, "Cannot split to order-1 folio"); - return false; - } - - if (new_order) { + if (folio_test_anon(folio)) { + VM_WARN_ONCE(warns && new_order =3D=3D 1, + "Cannot split to order-1 folio"); + return new_order !=3D 1; + } else if (new_order) { if (IS_ENABLED(CONFIG_READ_ONLY_THP_FOR_FS) && !mapping_large_folio_support(folio->mapping)) { VM_WARN_ONCE(warns, "Cannot split file folio to non-0 order"); return false; } - if (folio_test_swapcache(folio)) { - VM_WARN_ONCE(warns, - "Cannot split swapcache folio to non-0 order"); - return false; - } } + + if (new_order && folio_test_swapcache(folio)) { + VM_WARN_ONCE(warns, + "Cannot split swapcache folio to non-0 order"); + return false; + } + return true; } -- = 2.47.2 -- Best Regards, Yan, Zi