From patchwork Tue Feb 18 23:50:09 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Zi Yan X-Patchwork-Id: 13981100 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 0B483C021AD for ; Tue, 18 Feb 2025 23:53:37 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 7E6B92801B9; Tue, 18 Feb 2025 18:53:36 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id 7958A2801B5; Tue, 18 Feb 2025 18:53:36 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 59B202801B9; Tue, 18 Feb 2025 18:53:36 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0014.hostedemail.com [216.40.44.14]) by kanga.kvack.org (Postfix) with ESMTP id 38EBD2801B5 for ; Tue, 18 Feb 2025 18:53:36 -0500 (EST) Received: from smtpin06.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id AC6481A046E for ; Tue, 18 Feb 2025 23:53:35 +0000 (UTC) X-FDA: 83134719990.06.B28E821 Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2076.outbound.protection.outlook.com [40.107.237.76]) by imf28.hostedemail.com (Postfix) with ESMTP id E09E1C0002 for ; Tue, 18 Feb 2025 23:53:32 +0000 (UTC) Authentication-Results: imf28.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=kXd13dd8; spf=pass (imf28.hostedemail.com: domain of ziy@nvidia.com designates 40.107.237.76 as permitted sender) smtp.mailfrom=ziy@nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); dmarc=pass (policy=reject) header.from=nvidia.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1739922813; 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=LodQMgwtSalEnTvSN1UxhYrt3Qo5c8mY43vKRMlOiT8=; b=uO9eNUQIw2U2Zy0OdBUNICxwyJ9mgCHj2K11Ww7RInCxDep2iNb/rt41hWKinM3kYYkhui hM4vODncd/pHHUq1Wsh6Vtspz5FY/pQWw0vdid1T080GeHNr6e80JJmElqUY1u3N2pOn0y bkrDgkhGeyc2BjDwlo8mdwFyyzrQEDc= ARC-Authentication-Results: i=2; imf28.hostedemail.com; dkim=pass header.d=Nvidia.com header.s=selector2 header.b=kXd13dd8; spf=pass (imf28.hostedemail.com: domain of ziy@nvidia.com designates 40.107.237.76 as permitted sender) smtp.mailfrom=ziy@nvidia.com; arc=pass ("microsoft.com:s=arcselector10001:i=1"); dmarc=pass (policy=reject) header.from=nvidia.com ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1739922813; a=rsa-sha256; cv=pass; b=D4UmuazWmYPz3iK74y/noVbVq/bKAlZsDvnSx8sirupCGnht/McBNExBKW3e/WowugQEG5 k0PyEFlwmagH9tKKQjgGCxCONwpHSK64nd9NI/q3M/gPppoKfpSoukEgrYuxnpmtLxvWcP i/69e5i6OqKlfx/WGi1JFvky1cGIQjU= ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=Zmln+RSMiJ97Qzi0JP+VlFeBLdhivcRK1LbhtCdOSkyp4qmH0YfK0kqdMshQLpXB81Mqo4SbsL4jQ7jI/+/kRt/INsiGVPbECmEYKc76N+tU+ZIQU/HnnYS50XlDqFfHlMYN15TP3bosD4eJQLV2wHZRjZceA9FIwQm2lT66NS3/KpjRpoz2mRKRTAOykdq/Gs/5eBtPBP5lq4SIg1HSBIZhc9CTZbhtQsCh+kbE9N1vBl/ASHLO5FKypHuKyTMHhr6Fy2kOh9+4mKLesSvwjboXDKnB/Wk7h6wl+8hKPWuL1zL6njLYbJMnEyTppmT/rI/rVGcXitTs6GqDM00wTw== 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=LodQMgwtSalEnTvSN1UxhYrt3Qo5c8mY43vKRMlOiT8=; b=LxDtnwzpqd+0WgWR50DKzujRAIa7JFUndhTd0z1Aaq36ZBFSmDeuWjCzWkDYS6XJtcXe2pnj1+8IV/bBqc2c85YNEB4SnRdm1HNvlNEiqOsIuxo7Px55GnFFCWMLRGcV47Is9f2zhoPu67qowUHNvNw/7qu8eXo4PYNZ4jsvpnxS/9OSvZxttFy47IjPvsliL3SB5APKaKPMm17qfPobwtSV24Qporq4CrUplYynRU/B1kxh1bIgsxGhNlpd+4i3485kAAvhKRA4ywgKwPTtc41vojbvONIgDxO1db1mvAXSJCyOC8fXaE0XMrGeTCKivkN+Tfq3MjXUHoJNXhSvVQ== 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=LodQMgwtSalEnTvSN1UxhYrt3Qo5c8mY43vKRMlOiT8=; b=kXd13dd8PASUxxS861j2Znsg0WDfyX78547DAKythzLbrDg7SfzKI+eFkxMCbWigeej3oGX6X/A3up4iBHXjO8FTnYD71Tk/OSxhkyCrrZHS+a+Ap/mWxE035e670iwusnKuaZp525U545kHaQKyTVRwPXfOTrlWKjgMrrMIkW+MyWWqRCw+9kQVdxKoZGVC27AazdT+PyKDZRmt3t1cte2qbqnjeYpgPxc117gSWVIaYZ0b1yzrkVH6xpRqmAoWkZ4dNQ9XFJRT5Ie/NftcB01wpGXj/t2NORf6NSEF14erQqZQKYrpjkUWRRNeDnit7eRwZiFl+HJ0Plnged9OCg== Received: from DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) by CH2PR12MB4326.namprd12.prod.outlook.com (2603:10b6:610:af::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8466.14; Tue, 18 Feb 2025 23:50:23 +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; Tue, 18 Feb 2025 23:50:23 +0000 From: Zi Yan To: linux-mm@kvack.org, Andrew Morton , "Kirill A . Shutemov" , "Matthew Wilcox (Oracle)" Cc: Ryan Roberts , Hugh Dickins , David Hildenbrand , Yang Shi , Miaohe Lin , Kefeng Wang , Yu Zhao , John Hubbard , Baolin Wang , linux-kselftest@vger.kernel.org, linux-kernel@vger.kernel.org, Zi Yan Subject: [PATCH v8 5/8] mm/huge_memory: remove the old, unused __split_huge_page() Date: Tue, 18 Feb 2025 18:50:09 -0500 Message-ID: <20250218235012.1542225-6-ziy@nvidia.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250218235012.1542225-1-ziy@nvidia.com> References: <20250218235012.1542225-1-ziy@nvidia.com> X-ClientProxiedBy: MN2PR22CA0005.namprd22.prod.outlook.com (2603:10b6:208:238::10) To DS7PR12MB9473.namprd12.prod.outlook.com (2603:10b6:8:252::5) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: DS7PR12MB9473:EE_|CH2PR12MB4326:EE_ X-MS-Office365-Filtering-Correlation-Id: ac130c2c-49b5-421f-c33c-08dd507702da X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0;ARA:13230040|376014|7416014|1800799024|366016; X-Microsoft-Antispam-Message-Info: T9AtyS0jtKXF+hivYgE2uAIrY6XGSIdBDhrJoG9mvQg0XOxp1jFkkpCoOqYY5Stu+EdVPesvGy8FR+I0H+AppwBWdZlAG5WP2fr5j52+7B0PBMNiI/4cSh9Jys5SwezGPQkJ06fPrMT4kSJVnLOY15+Cbf0uNQVzXY0Nyg+fEK0ASx8MvzUsRMZdTAB2dm7up53ETcSrdQOP5+eSLkvTliT2yBBtX13ANt1B2MXeebNyIjl4MuoeCr8M8U6ZHwwmG9sVUemtHNYSgsCfwptEc378A9BNatbE0LbR4/5YPrjg1Nl82Z0BwED2vubMUAQrcyZQIwbAnXtDYtfSpFzHYFnbQZdNZC1iJHxkAlQEilzWbwD59KVGwTaSjCkgMBcOeSdA7OdtCPVlNZgpd+Os+ALqx9Tu3j22rbwfpSNjrY673cfWIIfkAAZa1nGW8KU8vurySFkwTiAbyc4U5/Jn0Fv2E4nNSDjvS88NP3dzCTzEHbBnKBZdOMRqY7TuXZH5BSR6GNSea+5KjHXqbudPL5s/Ldt8+ghZVYL9pqvl6xI+yBEOsXskeHslzac7bKBhAZ9wuiAjBzsuKt/DsxAGakfdDyvL/UvRbo6ZO4HFFRU59DlsZygWmGmcTKdVsRy81v+PR4zMixPbppC1PelSRCI8m9oyF80MqExv1EZ7EzcHob6GxUx2VxkwTvi5CuB7PonW7wJFFYBJjeUlr4onADL8LKz0b0y1XQVyYY65wXp19gmfIpX3UJihUsvCUdzSsVXXKCVYpLvwZUSp1EasAIO6EnO2BF847/Z6X9Ms0+ix44SrvH50vh5gg3IHBNqWLM46zjBu901/WqNhMcdWanY3QM3MQdbs4g6lv0HxbMompHhjPt2ddSw/6SNBE41ksf5KhpM3BDWeecYnnTg0RLNKTexd/NOFwXehMSh9UHhCVyP0lbDPZ13L33qFwNrO7bYV0ud7lIF6HpFKiMQoHOFZUTLNzITb9mvizCrV512TsOsUpiL8NvmaSSZA3NGccyrK8eVed5ujZiUrRZVwtNryW7rVeGF9RThFgzNw9/6KTDe/gVaf31d1NFiojwNm3cK5iarj39EDkbt7gL8TJWJ284+Lzi9x9/2evJtxT9vbFaZznv8sWf5aKnEDb65go+aoV9PuDVZAqYn6kNdUZ/ewGr3QfijzZxShFC8oYt41myYnXdQDrou8brg0uSX9yYX9Pd2QMFEyOU7CTGGnzTuXT0uPnls/k2CLLrNteMoKiofozCRZxl6M0+eBGdWVDo2sGhl4SAGc77mSgpgeSKJgB/o52b+flCQ8Q2MaqKE8Q4f4ZfR8aZaOeG/T+IfvHeIExwe/xLp5Rt/ACLFHKdmtnPsksOciju/kCK4ddmT2K1f/DaCtTbKAKOZ7tnRA 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)(7416014)(1800799024)(366016);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: HEquv/rUQDLpwbGocHAmkrpHMbcc11qeWvaGP/tH2tL3CX/PekKBA1APEKQ77qARLcZafPXzKKjZcLh9dVvvyw+STqCpbroL1Ks7JSIDm+UEFvguvD4TBS+Cnr6lrNV9EsUobBWLYX9p6Y/bbnla82Ext7Q2r3CgV+49QW9cXUiWlixwmGSHUZaN9WkCx9cPIoiiwG7UgzuXlnmUO9SvUw2dVBVRfImzMsJWFfo8bSkVw3b8n1ooV58+5GWj5yJdEyHCKSEY7BXkVurIYc92oXPx5YSl/nqyfvSAsj8i4LXtLe6zVBGIUuO6msNiwyi6CeuitYjyAZ02KOqQpB9pXSlRp6btpHFeU4KLai+bNvJfa4sKqo5ozTuukr77vjXn6Gzw62oUrd5O4WOJl0Pgk3VeUSU7VXZjzIZ5OxmFKFWJnIAHltJ4HXn7mCbl1VAeXI9zXNYqQac4vMantJsAMBWqEPKs5+TGh+0PkHVxzX3YYCgQoX5Z0VaqihEJSsobInodTldoMQtW8IhMFAbTYLPkwI6Dd+hpLOv/ZdsEG4pfLLfdMPAGGLNj3oh+qfJf3UsiUnWghT2gHcD+QpWBRDdXxeNrxenqUpYVubhi1+yzvdDgHtjFvsIP85wSBwzXdz+XwuNo4qRLzKqlpMHZGJQUyVDMwuPRjBem8HxogkLARgmhb1/hq5FD+Dsn1sV6Lr542jwEKVm+3q1Pyp+EDq/+4xQee3c2XK/JgfnIJfhy1iO0gjW1pNN3OtUOI1dqA4spTNcbRs4azUIEfT/g/mUXYoEL1BUaKro4/bEgEzXqGV/7KpVkkVixdYX92+ADpR1gErtU2sczt1TCq7ULlI/JmTZBpZghX2y9/Mg9B+RWU/0tAt40/QSY5pHlrhHalzXldx6ukoC8+3EE9aWY2dMoGAAG2szqbbMdL+7RKFkoWXLoXkk37xHmezZIq6qngBF5UyuEPfT0N8I4FGSK3F4ZIpFyG9XZ6UO9K4Zs9gQG692m0SrFz35sfZ8Kc1Vl/Te0iUkYjm/A5cE8FyqIjKIQjk9PeHzpRw1tC2WhoWZo1RVsZiwsBUXIIhcrda6D8l4tZHVCVmV+H0wQmQm0JS/4aYNIGTL1/Kb6sGpAVKd0Rbjw1EOhlzybEDj7lEiTLEpLE5GHgMLnfJsP/oSQRECzLEmX3Ng6k2lzOK6uirnnVkw8HefY4CJC1Mb+K28uwbBQ/PLko048jXOOKb8PZlKhz4ErGt8c4QtANF/HTeqalDVXasDzLAzUGKDbmqivvJ15B0iKrrXN454I8WW6TcCXbqQ1k9xEm9rV66FE7KeHSM0n2LBikeMH5NpKr+Jq74oRraxUpuYQs5p86stsyKsB+QYuR+ofd+DjXRouISKtsiCqhVKsKOseS9SNb2g0GvKMstLJcAdAKRYk4+kVvC6Caf10nHbF22tZnzN1i5beLAI/FBAMHv200QrJ1/esfVdIKNyzrMbPT21xZdusfN2iTv7xg3ia7v50kJUnyWiAxzEeAffKtiIHTF1r+CRQmJHpaa2KoS2RcvlwvRfO79FEa/oUWz2vh0VwIablfVFjtVMb2c1B3XaXEZWi8OXx X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-Network-Message-Id: ac130c2c-49b5-421f-c33c-08dd507702da X-MS-Exchange-CrossTenant-AuthSource: DS7PR12MB9473.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 18 Feb 2025 23:50:23.6892 (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: HNrnACCPBjFZJXYSKfBQiITUWmNAtRt4RZwPRdJDkSZfDMPnhyr+YIh8H5PUhR5d X-MS-Exchange-Transport-CrossTenantHeadersStamped: CH2PR12MB4326 X-Rspam-User: X-Rspamd-Server: rspam09 X-Rspamd-Queue-Id: E09E1C0002 X-Stat-Signature: 4z31fy1j1ndkhsxz6hqfsirbywjd3a1b X-HE-Tag: 1739922812-296628 X-HE-Meta: U2FsdGVkX19Ha7LR6CpD/vKASUzNstZPlIt6kJDIKIlHryp/OA+r6MtDWtPC97lOkcpGkFOYbh2U5Vn4GT711BvJw8ALfOGvaEnzknOt3cIHj/Gx0sy0V/vHZdqwm2siypXEWhGpgevaT8XtS2TJ2tapX7mJKCLIqtF0Glapd9wYHPpPbzepGfCi3I9NPBplqidmrTiY+Y0zJoNnxJrDMkB7bMadfqD8eB/HZpF1XcNz1cgMp1TFfAGsWSlD37hEpFVwy4x7VuiuN7xvuz0KyspNwOmXnPlMUjROVJDewnyCp+7MKGkuUChdSS474UOkgvqRNTKxgNxXf0Sng/b1xkZNzDORvgwxIKEoCTdk219JuanA+qqEb+weaKnZqKBhK03VcQlLxuIMZsg4yqaExG02/U7ymRzMIuvUh8dpgIYGmXMnfdk7fJUNBO5JcCNhaY1J78kfC/Z8EoVVFDkwe5zLIeZbw08UQBu7pRqbGNoil4UPlxIeBbWp4elTZfkj2IGCDCBVilzfCOTy3FOCot5iujtDTB7bB5G8DnXu05OuhigDbTUd6lUL/C5iKsNg3tnUtdC7wVP8q4rV2mq0yrzzeVIQbBCJXwe0JxPK9ezDY9hzYxjfVmJeHjDIEtv3HbC7OAD8yGeDKrbKw+Ua6NrYl8dXOMCYKk19rrM587MWJSYrNF4ly5m6LIiaBME7GGLhVA2xSxR51eSw5f5+S4gGRDhnGxkPKgdyWaQNqgDhBYPbj4eVn3a1LaGfMtu/cEYQxi2B/3v8qVj0ErYxewgNT7wmbKOQ+lb9hrq5Ska3xj67mZsptJAHDVtA8lQGSHmohalWowDq1qZ6q6g9EIXZWf1cgyaXdl7f3d/TRfcqo3PbjFoKCw4rdhf6cYwo51IW7pbd8g3d1enhYdWGTExIjkJP5+WKLuRnJilCFCeOSRpY4e/BQgX38PzBij20IAEPWhjMyr5wMxYeOYR 8StbRttj gEJniyCSpJk8RRkCoO8VFpdYd8gNQWlPtMs3TIcGxc72xxfyQOk01gczD3+zPjbRDL9vq66eMpD55cvoFcXwz1zO3ZhteWoj2kQVIJiFTZcsFJ//ua9Ffum7snHA6tT+xmZFrtRCJ6+KhfsY608hh1ndh3GEzWkYI2OAQKcUprg8RmOE/vpejvzuEoW4tJ9yY8eWd8syx3q/vZ2Yollad2kJiPmW/KEtDfiFsO6VbPb6zNvSthx+MzYR74j0sM4l3MKO+zU9EGlPQRVeeO/1HMWaFQ0EjvnAX2ElGNUMV792CDWoF91iUKZHqM3ZwNDnVYWpq8GQBzfdoTEaRog6Mrn00CWLh36a2rJTlhJ07xjOq3MIHVIBHVwbERdR4ph3cWzW4DOCxlf/BxergcG3SwZ4TX+BzctClTCbCTdwnpL6XhQCPen4ZkwFtxmYpEzPCbVauR+pEwfwHhn8blp7t0FEyJKq7EfaV9jzR8YFwEmGbW+QXJwTY8CNyU5H6C8vfrDUHttsY59AzLuEgXyRXGDh5UL5pz0U8Tb2ERvUx9Qy/b/LMyfiPRZtwIgsS250zq16FSs9mUSBMNSo/McNgj/NSHtZW47fSYOnLvim94PZkchNLE6WTiRjFyJSCir8CDi/6g5VaQBIm7ZZPwQPiGrwzk8YRxWY81D2OT7KQnUHeM7sS7NsTAvYPSY4Xu49V8ZWTAdniJo3d7WFYpW1oWAggT/dpJ0uW8nAJKpl1aoLXn7kFWZ4hMEk4rl0qzG5HhlglmURxVKLqMzio9QAnG9gZz6UHkqb/Uo+1KVpf34pw3QxLWQuVYrSYb8Lz3r4q0VT7Pu6u6db7O2jnBBn3nvHlypgHn8fLiG4mr8Ol7WW5w3HZn0rcOTUspgx6vN+u7bRsuckDK1It79ckZjakKtRqgRdMQCutL8newLUPxee61DbJ3/cp/MOofE6XbzA+LN7z0gVU/Qf0iwxhS0iJKOcQmA== 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: Now split_huge_page_to_list_to_order() uses the new backend split code in __folio_split_without_mapping(), the old __split_huge_page() and __split_huge_page_tail() can be removed. Signed-off-by: Zi Yan Cc: Baolin Wang Cc: David Hildenbrand Cc: Hugh Dickins Cc: John Hubbard Cc: Kefeng Wang Cc: Kirill A. Shuemov Cc: Matthew Wilcox Cc: Miaohe Lin Cc: Ryan Roberts Cc: Yang Shi Cc: Yu Zhao --- mm/huge_memory.c | 207 ----------------------------------------------- 1 file changed, 207 deletions(-) diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 2880dd010bff..ab9fef680a9d 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -3168,213 +3168,6 @@ static void lru_add_page_tail(struct folio *folio, struct page *tail, } } -static void __split_huge_page_tail(struct folio *folio, int tail, - struct lruvec *lruvec, struct list_head *list, - unsigned int new_order) -{ - struct page *head = &folio->page; - struct page *page_tail = head + tail; - /* - * Careful: new_folio is not a "real" folio before we cleared PageTail. - * Don't pass it around before clear_compound_head(). - */ - struct folio *new_folio = (struct folio *)page_tail; - - VM_BUG_ON_PAGE(atomic_read(&page_tail->_mapcount) != -1, page_tail); - - /* - * Clone page flags before unfreezing refcount. - * - * After successful get_page_unless_zero() might follow flags change, - * for example lock_page() which set PG_waiters. - * - * Note that for mapped sub-pages of an anonymous THP, - * PG_anon_exclusive has been cleared in unmap_folio() and is stored in - * the migration entry instead from where remap_page() will restore it. - * We can still have PG_anon_exclusive set on effectively unmapped and - * unreferenced sub-pages of an anonymous THP: we can simply drop - * PG_anon_exclusive (-> PG_mappedtodisk) for these here. - */ - page_tail->flags &= ~PAGE_FLAGS_CHECK_AT_PREP; - page_tail->flags |= (head->flags & - ((1L << PG_referenced) | - (1L << PG_swapbacked) | - (1L << PG_swapcache) | - (1L << PG_mlocked) | - (1L << PG_uptodate) | - (1L << PG_active) | - (1L << PG_workingset) | - (1L << PG_locked) | - (1L << PG_unevictable) | -#ifdef CONFIG_ARCH_USES_PG_ARCH_2 - (1L << PG_arch_2) | -#endif -#ifdef CONFIG_ARCH_USES_PG_ARCH_3 - (1L << PG_arch_3) | -#endif - (1L << PG_dirty) | - LRU_GEN_MASK | LRU_REFS_MASK)); - - /* ->mapping in first and second tail page is replaced by other uses */ - VM_BUG_ON_PAGE(tail > 2 && page_tail->mapping != TAIL_MAPPING, - page_tail); - new_folio->mapping = folio->mapping; - new_folio->index = folio->index + tail; - - /* - * page->private should not be set in tail pages. Fix up and warn once - * if private is unexpectedly set. - */ - if (unlikely(page_tail->private)) { - VM_WARN_ON_ONCE_PAGE(true, page_tail); - page_tail->private = 0; - } - if (folio_test_swapcache(folio)) - new_folio->swap.val = folio->swap.val + tail; - - /* Page flags must be visible before we make the page non-compound. */ - smp_wmb(); - - /* - * Clear PageTail before unfreezing page refcount. - * - * After successful get_page_unless_zero() might follow put_page() - * which needs correct compound_head(). - */ - clear_compound_head(page_tail); - if (new_order) { - prep_compound_page(page_tail, new_order); - folio_set_large_rmappable(new_folio); - } - - /* Finally unfreeze refcount. Additional reference from page cache. */ - page_ref_unfreeze(page_tail, - 1 + ((!folio_test_anon(folio) || folio_test_swapcache(folio)) ? - folio_nr_pages(new_folio) : 0)); - - if (folio_test_young(folio)) - folio_set_young(new_folio); - if (folio_test_idle(folio)) - folio_set_idle(new_folio); - - folio_xchg_last_cpupid(new_folio, folio_last_cpupid(folio)); - - /* - * always add to the tail because some iterators expect new - * pages to show after the currently processed elements - e.g. - * migrate_pages - */ - lru_add_page_tail(folio, page_tail, lruvec, list); -} - -static void __split_huge_page(struct page *page, struct list_head *list, - pgoff_t end, unsigned int new_order) -{ - struct folio *folio = page_folio(page); - struct page *head = &folio->page; - struct lruvec *lruvec; - struct address_space *swap_cache = NULL; - unsigned long offset = 0; - int i, nr_dropped = 0; - unsigned int new_nr = 1 << new_order; - int order = folio_order(folio); - unsigned int nr = 1 << order; - - /* complete memcg works before add pages to LRU */ - split_page_memcg(head, order, new_order); - - if (folio_test_anon(folio) && folio_test_swapcache(folio)) { - offset = swap_cache_index(folio->swap); - swap_cache = swap_address_space(folio->swap); - xa_lock(&swap_cache->i_pages); - } - - /* lock lru list/PageCompound, ref frozen by page_ref_freeze */ - lruvec = folio_lruvec_lock(folio); - - folio_clear_has_hwpoisoned(folio); - - for (i = nr - new_nr; i >= new_nr; i -= new_nr) { - struct folio *tail; - __split_huge_page_tail(folio, i, lruvec, list, new_order); - tail = page_folio(head + i); - /* Some pages can be beyond EOF: drop them from page cache */ - if (tail->index >= end) { - if (shmem_mapping(folio->mapping)) - nr_dropped += new_nr; - else if (folio_test_clear_dirty(tail)) - folio_account_cleaned(tail, - inode_to_wb(folio->mapping->host)); - __filemap_remove_folio(tail, NULL); - folio_put(tail); - } else if (!folio_test_anon(folio)) { - __xa_store(&folio->mapping->i_pages, tail->index, - tail, 0); - } else if (swap_cache) { - __xa_store(&swap_cache->i_pages, offset + i, - tail, 0); - } - } - - if (!new_order) - ClearPageCompound(head); - else { - struct folio *new_folio = (struct folio *)head; - - folio_set_order(new_folio, new_order); - } - unlock_page_lruvec(lruvec); - /* Caller disabled irqs, so they are still disabled here */ - - split_page_owner(head, order, new_order); - pgalloc_tag_split(folio, order, new_order); - - /* See comment in __split_huge_page_tail() */ - if (folio_test_anon(folio)) { - /* Additional pin to swap cache */ - if (folio_test_swapcache(folio)) { - folio_ref_add(folio, 1 + new_nr); - xa_unlock(&swap_cache->i_pages); - } else { - folio_ref_inc(folio); - } - } else { - /* Additional pin to page cache */ - folio_ref_add(folio, 1 + new_nr); - xa_unlock(&folio->mapping->i_pages); - } - local_irq_enable(); - - if (nr_dropped) - shmem_uncharge(folio->mapping->host, nr_dropped); - remap_page(folio, nr, PageAnon(head) ? RMP_USE_SHARED_ZEROPAGE : 0); - - /* - * set page to its compound_head when split to non order-0 pages, so - * we can skip unlocking it below, since PG_locked is transferred to - * the compound_head of the page and the caller will unlock it. - */ - if (new_order) - page = compound_head(page); - - for (i = 0; i < nr; i += new_nr) { - struct page *subpage = head + i; - struct folio *new_folio = page_folio(subpage); - if (subpage == page) - continue; - folio_unlock(new_folio); - - /* - * Subpages may be freed if there wasn't any mapping - * like if add_to_swap() is running on a lru page that - * had its mapping zapped. And freeing these pages - * requires taking the lru_lock so we do the put_page - * of the tail pages after the split is complete. - */ - free_page_and_swap_cache(subpage); - } -} - /* Racy check whether the huge page can be split */ bool can_split_folio(struct folio *folio, int caller_pins, int *pextra_pins) {