From patchwork Fri Oct 6 03:20:07 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mike Kravetz X-Patchwork-Id: 13410938 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 C8654E92FDB for ; Fri, 6 Oct 2023 03:21:29 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 254E694000D; Thu, 5 Oct 2023 23:21:14 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1DB5994000B; Thu, 5 Oct 2023 23:21:14 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id E5EF794000D; Thu, 5 Oct 2023 23:21:13 -0400 (EDT) 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 CDDD994000B for ; Thu, 5 Oct 2023 23:21:13 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay09.hostedemail.com (Postfix) with ESMTP id 7B3B8806E5 for ; Fri, 6 Oct 2023 03:21:13 +0000 (UTC) X-FDA: 81313585626.27.4BA24EF Received: from mx0b-00069f02.pphosted.com (mx0b-00069f02.pphosted.com [205.220.177.32]) by imf16.hostedemail.com (Postfix) with ESMTP id 3ED2A180009 for ; Fri, 6 Oct 2023 03:21:10 +0000 (UTC) Authentication-Results: imf16.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-03-30 header.b="OEk0D+/S"; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=hqdXZDn6; arc=pass ("microsoft.com:s=arcselector9901:i=1"); spf=pass (imf16.hostedemail.com: domain of mike.kravetz@oracle.com designates 205.220.177.32 as permitted sender) smtp.mailfrom=mike.kravetz@oracle.com; dmarc=pass (policy=none) header.from=oracle.com ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1696562470; 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=o8COXuu6/TtJ5IDPv6UZqVnZDWI+bSmwncS3etnX9L8=; b=Ti8o9ZgmelXcxYsMz34arrryhgu1nf9u0fq5DWnxR+OiHWI/ldPguqXxV8HuGe3kqiZEVb ijSHdfNvM8TNiEscJ05vRBr1j5S2AYdxVLbgr6zXAFSYhfM1NFIH/nYOWVEn9KwY9m4iuY 9Jh0DEGr0AaxZJueRSU4l7884FFpkIg= ARC-Seal: i=2; s=arc-20220608; d=hostedemail.com; t=1696562470; a=rsa-sha256; cv=pass; b=kV+h12Da5YT+jY6mI5ektR2ErR0vHKGmgfX/XOvEOrSl1aNIS4Xfg7uQV5h7cvY7POAFQi zjzxDwOmrHzmdO8eEm53VP+xYb8QiyS98bExLewX2Xa0Ex0UVeJYOw7zjZHOOwra2uKs0Q hWpYgJJJI/PIUddaJpd4K+Ma+zOQ6FA= ARC-Authentication-Results: i=2; imf16.hostedemail.com; dkim=pass header.d=oracle.com header.s=corp-2023-03-30 header.b="OEk0D+/S"; dkim=pass header.d=oracle.onmicrosoft.com header.s=selector2-oracle-onmicrosoft-com header.b=hqdXZDn6; arc=pass ("microsoft.com:s=arcselector9901:i=1"); spf=pass (imf16.hostedemail.com: domain of mike.kravetz@oracle.com designates 205.220.177.32 as permitted sender) smtp.mailfrom=mike.kravetz@oracle.com; dmarc=pass (policy=none) header.from=oracle.com Received: from pps.filterd (m0246630.ppops.net [127.0.0.1]) by mx0b-00069f02.pphosted.com (8.17.1.19/8.17.1.19) with ESMTP id 3962O544027984; Fri, 6 Oct 2023 03:20:40 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oracle.com; h=from : to : cc : subject : date : message-id : in-reply-to : references : content-transfer-encoding : content-type : mime-version; s=corp-2023-03-30; bh=o8COXuu6/TtJ5IDPv6UZqVnZDWI+bSmwncS3etnX9L8=; b=OEk0D+/STrWX9EUMhMW2zvjYPmAQg8LOFsTTTh596Nb3LrprpEkveGX5uoIGk3ScorIc na+r+H19hlZUVzZx4SV7miFEZhi3S9zzkTp7QrWnk3py2Zm19Ds/ayU6enMSrcwTkFKH lkpySEktYiA/JST5f5v4lypSMs1cjUL8fV3dcsxshdCUYSJ+kLchk3dU98QGDhxTA74R Ny/dmrv2q3fjXNCNp62SNSdKLYn+7EYAKMUYBWDXArrJhGl5+P9CH52zySYw0PWLWz7m y9hpnQ1RTmRvJvXx14l3+TJj5qtOR9teXAJjV30XXMOk3Vb8jY8dGTWHm8gd3zmpnf/L zQ== Received: from iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (iadpaimrmta02.appoci.oracle.com [147.154.18.20]) by mx0b-00069f02.pphosted.com (PPS) with ESMTPS id 3tea3ejyaw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 06 Oct 2023 03:20:40 +0000 Received: from pps.filterd (iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com [127.0.0.1]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (8.17.1.19/8.17.1.19) with ESMTP id 3960oAAI002983; Fri, 6 Oct 2023 03:20:38 GMT Received: from nam02-dm3-obe.outbound.protection.outlook.com (mail-dm3nam02lp2042.outbound.protection.outlook.com [104.47.56.42]) by iadpaimrmta02.imrmtpd1.prodappiadaev1.oraclevcn.com (PPS) with ESMTPS id 3tea49ypvt-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 06 Oct 2023 03:20:38 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=aKuQ9KTc9TZOnvgn38k7hiYiB/H7nsXpWldNju2fGtyl079qgXnCUNEk/d7nf/3jgAgZ8EzkHIj56EptInA1uEpdGF3J630WjYyNgZyts5llkzWkXHgmiiGhC9WjHOFhhJFzhPUcppmB0BPg1/JQ44vweeFvpyK8s6W5Jp7o5WNY4q7xpluZFAWOTa0gMfMb0F9XzkmebfygRXbfBoxQ9MJlTMiejs4meHsetmlWkO0Iqv/+OIhCQXwoiCPWxEzBF18q/CcixFULQXBcpQIxLre4bt0iJj4AJtE8q/Aam/yXRgNGQQk4huaRwm3C+p3uKxCIuMR98YBTfYgAAYTIYA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=o8COXuu6/TtJ5IDPv6UZqVnZDWI+bSmwncS3etnX9L8=; b=OArL9szItFuqafH+CnCfaJgcd1zA1dmfmATuAHDyOTRlbEIAFaeMvJFlJzBc0IeqDBGKYt4cGpWsjdFpJsBbRR1nPDZiweCh5Re0z/CzeRyuZy9vz7AAM/vxpNemSozpZZWcCJGLIK1WHtNSQbJ0cbB95iMW7PdEx8cmm9nIor5ZrBDXNrjtxnIKT39K4vxnplWUnASZQk1AGDl+IluOHepcgkRX6XeWg+clRwnAyRWoBvln81CgQ8EupDO6+iwPVePeWFjDDSgxEOvrUYlAal68chRuWGEFydCJzmUQXdY4VrO+aIRwo0ZXxs/b2vOytDg1Ugt6GosaktWDTks9eA== 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=o8COXuu6/TtJ5IDPv6UZqVnZDWI+bSmwncS3etnX9L8=; b=hqdXZDn62+w89Ktzhq/d/oPlNu4Cg0WOYAtVFVksm1eBEPin9KPnuY/w9xIHUL1Jd9GJbJki7BXUwgdTXvFHRRC/gi9N9KfVc4nS8NRve6x2MbLoMDznqWYIcoHkjoE4N2SvS673/l+jD9wLHxAupjCEaXBgzd6XGSmAFUDJGJA= Received: from BY5PR10MB4196.namprd10.prod.outlook.com (2603:10b6:a03:20d::23) by DS7PR10MB5391.namprd10.prod.outlook.com (2603:10b6:5:3ac::8) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.6838.38; Fri, 6 Oct 2023 03:20:36 +0000 Received: from BY5PR10MB4196.namprd10.prod.outlook.com ([fe80::59f7:ec45:eb41:d8c2]) by BY5PR10MB4196.namprd10.prod.outlook.com ([fe80::59f7:ec45:eb41:d8c2%6]) with mapi id 15.20.6838.033; Fri, 6 Oct 2023 03:20:36 +0000 From: Mike Kravetz To: linux-mm@kvack.org, linux-kernel@vger.kernel.org Cc: Muchun Song , Joao Martins , Konrad Dybcio , Oscar Salvador , David Hildenbrand , Miaohe Lin , David Rientjes , Anshuman Khandual , Naoya Horiguchi , Barry Song <21cnbao@gmail.com>, Michal Hocko , Matthew Wilcox , Xiongchun Duan , Andrew Morton , Mike Kravetz Subject: [PATCH v7 5/8] hugetlb: batch freeing of vmemmap pages Date: Thu, 5 Oct 2023 20:20:07 -0700 Message-ID: <20231006032012.296473-6-mike.kravetz@oracle.com> X-Mailer: git-send-email 2.41.0 In-Reply-To: <20231006032012.296473-1-mike.kravetz@oracle.com> References: <20231006032012.296473-1-mike.kravetz@oracle.com> X-ClientProxiedBy: MW4PR03CA0213.namprd03.prod.outlook.com (2603:10b6:303:b9::8) To BY5PR10MB4196.namprd10.prod.outlook.com (2603:10b6:a03:20d::23) MIME-Version: 1.0 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: BY5PR10MB4196:EE_|DS7PR10MB5391:EE_ X-MS-Office365-Filtering-Correlation-Id: 44630959-3a0a-4db7-c92b-08dbc61b34fc X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 9bpA4f6UR5D9j2bqtkunDVibRvmFBe3ABM6pzFIOsahecWryycRDHoC1c3QCDerpxbZmCkor3qUJSxNQzKCaD6WuyfjXIG0CnxkAzT/MriKA5sLGxyqMuTD7om2VEFMAWEpyTw2OUq+GJlXLePPSmc+npy4qJbtMMrsIGHMAATHt0Z7iT6GVwcudOLQKSnHE5kmG2h9XamK8GIZl+jsQ/qb6jOdYdBgaYFHDuz68ut/78eqSstcgu7jhAPHZ7lZNMlc2D94jjPiIbHVOeS28ZbUwKU+ln3gSoSeC2mTg2avyMRcoG23K5O3FKKMV1+wUHhKIlCxMAFrCJPqkUrKUvnyLGkygEKjO+9NnZDMz6Qz+u+yMJmXriCmcsWS7cHAZygNrGNqF1Njm9wXB4J9vYbyF9Kf90G3akPRG0h0S/btWMOrIkanljj8aAqOYfDkZkmHk0o8ObqXm+N38dGi/FlMW7uZhME1wZ8wdSiiJ8tGeRJ09dJGzFYYFlvB9XP+n94+BcuoU//l1FjPCzdi4ZRllu1oZCnQCnMBWMp535gX5TkmmBNXMAqbr/ReNNKoF X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BY5PR10MB4196.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(39860400002)(396003)(366004)(376002)(136003)(346002)(230922051799003)(64100799003)(451199024)(186009)(1800799009)(6506007)(6666004)(6512007)(6486002)(478600001)(38100700002)(86362001)(2906002)(7416002)(316002)(41300700001)(2616005)(83380400001)(1076003)(107886003)(26005)(36756003)(44832011)(66946007)(66556008)(66476007)(5660300002)(54906003)(4326008)(8936002)(8676002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: tiygdZgaRfsSFuT7EBEHjXhyIog5em+8pNMlh5Psfc56nmsAMTjTgKYKASXfXmPlJnzlq1jquiOLCUn8XSZF0ZaoekA1nAuxAPM1+L3T4YQ6ahsI9fnplO6V9CbH4mc7kK67vy1fUn/nLFQJ0UPKPbAE+xcmclLWSpj/Wv55O3jneS58EL34rIDB74MvQ6gpUhRpyhwmGeCRhF+UQMTZBflQO7DfGn/GsBxjVSl0DA9PqYhwVVX1o9CQR2uZ3v+cP7NOjtmpc/zduW4V3QXOfrkrQPpiT48n77gKU8f56qc4jm24GYVk/lOw6Y0+i73UL+gAAzYDHq+Z1NzOyDTInYc4wqOGKzjaO1B3VmRsnAiC4lt2KlnKfdp3zJ/MI0D9qVCqrxksw5ik7HJIR78ORJytnUWQZFqdYwJqMOZAmbezOLv7nEbcHFSSh8f6FVSLMAUKdAm5Z0cyaelCFlo889MQsP5dpdMTwzaJkXHGHpf+wY5lu+CKUJP4SZ/Umg3qWqCgRLobo1gpLI2/TD3nh5VcAspXW0oQgp+wqr1xp0x0U69hqpj0AVgtSwni3vpknJZAMDPqLp3niVlpXAC0DVoldw2wAdgcrKIamIEqzRvxR4OSGgukOSqt38exRt272ZW/XjUiH1zKdWmyrYKMAFkMnoHGLW5R5AooBKliR4ed52Ynf420KxNk+qy0cN2UzeyAMfaj9tGsMqCJ1eDk4syiqd0aKTDxMYORv9wDS/iKVnGO28h7Bq2lfANf8dqAajbW6+MIZEEklPELe1WQRRXgMANWZ8hlH2CtknTQXNl4IswaIKJd4SgBL8xv4K9a3bihs/vuXEc5CNBtUx0WWiYiB2c+8sVTQNHXhCFCi5X05zJ7afvC5MCBwYWZ8RChSSoiWeDJEfnlpGhz/cXh+pE/IPW9TJO8jWUCZyE9M8+Vqj/8oeLIktO7JV0DDfWMaMeMSSWvWnvTW6rVPn97i9zmbpO3YhH9FEPyZlN1I6bh+cePyUZISC3G9eJmbB9o9mlpX8lhEU77txAGzC0lHc+13oHQzD7BIZsgxSbRZMoHYEglLbAELg4hIIAE12QyJpfXDN1lXnkw+nPr4RDCVGrVTh/6MYUl9IW5e9RLlb7/lOSvyH1XF8nZuxGMeueJkELRmvkupeDifSAPkl6hCCvF9doSzGPcleELZ9UynmuiOyBx+jfmBp2GQDeWuo9BnQFAjLUjd26sIfeTjbUR8yIXGVkwpQBqmVycagYHFnNV6rtgKMrwfhhVcwEq7mLX/XdPJiPH+ufK6b2CxVYspAHoxDdAwkGTAJSgDnLAfZaHjCjYp1o/6MQ0qDM0pCN2xFUNGbl97gIwW5PCSRAxMZCEgZhSuUNe3NjfP8Y8sqAzM9i9esi05fzridf2lMwBidPBvU+MLU/0lmBpvLjYgoSEpJd5TTcB5h8DRhAib09SSvdNtQ+KFgjPS+DZ2fRvze/TrFl/2OPVb7RH2uVPCCR7REculbTJQc5tDBdqtc6qOc8EhklGi1lEA+VUVUtuABFZlO4bA8EGLcnF6TEgS7z7GK07uF6D0ibtk/JquiWoBQjFaUgKTPWnIJygNHn+HnGPZlVTT8NsgInMln+mvg== X-MS-Exchange-AntiSpam-ExternalHop-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-ExternalHop-MessageData-0: Mi/TM4QQOpAH61zW4tLN1/md73USVSUVh6Ds5kuEEBwKBXWbt4Hne62y7pvLuT8BiHwQbAAa4RtTx0PZsv/5eh+huFoBy2iQiDhYqWiMGm3aKa5gzGgIAC92bUhxADHq8uunAv0TCXAF0+kJlOvzEk65e9f5m3mttux81twj62wJ7efY/xTwAFmro7Dd3+OadoTFAehl/yD+/bnub4FpxUA/H9N4V+4Cv4PwCxCN633GiueVTKOMZOV/2z6xz/K7BLoYBLeDBvjdwr06EFasDoKX+Gw+0iPCWWgEHpeszYXI6BKWrIWfLMHuzHxV3fOo7cjEqIePb0tgn7FHt4MrSd3Xymqsg8dOXWk08R+ed84bPQdKe3Mvu2jvzG+dpPpEzfGljYvqzYRvJXnGJgBdzkYP9F4iR5dqWAKQ639HGVAFMguCIcKWwldhrkTL8g1XfsEcLwMWtgHpUTF5/8x8xVExhh7/GJKEC0ZQfB+XirLEeRVx+NUEaHUxko/Ahmpd5G0Kdy9l4tVtybgx1oWq0zbOYAQvFRRq2HQMaIom1LT/aoJUTO8o5yuDW0i/tpfMRW3lSZsBhd1IzBfkPDNSL7BW9t4RJ/B25vRpURv/DNXYLlmEGak4LFEZ7ULk08EmjViOijYdm0vygxFCpjpEdfNsDnHJKDOiw17ZQZoBcOnpxxP83vvqGGXWy0IDTgKWUOo4xqyaeurMUN2uUFcJzkAHnvhaC5CQNM1VkdLxaHPlevu+gnvxzi18ii8cB3qi7MAld42frafxugYNnQriETrjc1ObV94TjywRVck6wdUR6pWXd6XE71DlzB7sa4eIFiWNm6Bsn7ooiUyJ18p0OoN7TIanuBHhk2cwu7HQc6YVwE/MXEpWxjuPLfFFXNuf4weAQ252mHzA6HRCahyaiCH5DCPJre3iGuuQCvjjLR7qFv9fnB5LqzASyipkgPo2K3SNAuLhVkW9LB4SfIaTUmLIEpwUSkocozuHahYoVNs2HkaFIzbKR54DXzB7vVP0sinDe/LIF6NkXu9S/lIYIqqQxepK8ahTqhp5e66OUHJxxgHY5LcF4FpMh4qjA4lHPl9ovdoSw+FrF9dF/TxnmNR4InNpG1MIEq3X0Y0bB9Ek68F7VjZrqcA2EaM95pmDHWwjeCduQXaYweu75Cquyw== X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: 44630959-3a0a-4db7-c92b-08dbc61b34fc X-MS-Exchange-CrossTenant-AuthSource: BY5PR10MB4196.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 06 Oct 2023 03:20:35.9889 (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: Fl/GEpIwq/Js5ji+zrzq2fDW4R/D49PWwqBVgCwh1W821ZWc9uenMfDtIw9yCv/KWUPfjD4dsZwRH1/z76gpLA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR10MB5391 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.267,Aquarius:18.0.980,Hydra:6.0.619,FMLib:17.11.176.26 definitions=2023-10-05_18,2023-10-05_01,2023-05-22_02 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 adultscore=0 mlxlogscore=999 mlxscore=0 spamscore=0 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2309180000 definitions=main-2310060024 X-Proofpoint-ORIG-GUID: t2hYD3M9Pk0TB8r8dPy7YM-f1gXPPTdz X-Proofpoint-GUID: t2hYD3M9Pk0TB8r8dPy7YM-f1gXPPTdz X-Stat-Signature: sdfos1jg9uiep9nb9sfyjzrwtozfy7z6 X-Rspamd-Server: rspam10 X-Rspamd-Queue-Id: 3ED2A180009 X-Rspam-User: X-HE-Tag: 1696562470-381460 X-HE-Meta: U2FsdGVkX19b8f4Gqkbt04Rcu6tFOe+Jt2YwnwovUbPPi9NGrK0wJHhI+dhBBTYmB5SgllU1ytlLcGaFU30eIUT84nSgRYw+q7upj/eJRpwZMMUQpOrVvhiTWm/9XzdzCVlK6nrIKbI5Y8F/VAHX4t3EQDPoVnqp/kzjV52yvk0iEu7akN36HYIjqNyJVf75wVxygh393yez8qRPyAZdQdlonCofgNzxNMVHJ8mXDWVx+FAc6Dj1wAdYyQou0NWWVE+REtYvj5Cz0fbWI71APiolA7i3YcSccTkgbzVVzBNwyJAkazG+CRiq+EIyYgRdxKfN9C1lNCCnIQMVXKKAypGYeMxeCOtAPFZqwAXMgISxbnnHSeAIH/AtkcQwINE1mC7FBMUd2KEF2vuCyG4tpzoGP94zhUwM+uhUs7EEA4ZIk4fie4uki3j0dH2kADWdWcbdYNxcjElw8HvvJzBmN/nComrGxn16HR3RTKkqntsUl6J6hFacri2DIBRXc3tJm8yOkL6/Qj/qj/jKqqIiXwQxWb3dVN8XlHFh+p1nnlr2jFkdoQXgoVNfadfsJri0qGWfbzunuu3cZEp0YUH7qf0pId+thLPlTg+0zwF7rsP1z8PccvGVMmxHVi9pWFCiHH20nPwxqozhjViVHaz+ndy+Bxc8nIEV421gGWEEwvCqMmO0E4y4melR7ymn3VLw01zOUAupkKkYxpMYY96cMu8T4QhH+dJnACUT/lxpUyW0n0BHtie4cq2LTr6qYYlwV0YMreZvO1IEjQml6+kszFBhdKiDj5aMWufYWscqYpneWDWNxQpfyjKbYwn/EoNvkn1D97+cFXxId4ZUAFxnph9ti7TRBVwb91iEb8gbnavqW7RsL3lEydqalPFBLYMmKveT0ixmXCp/5RfolwQDJAarJN9NYPfaE/9maqMUf6ph7Gb478ieZ2IDdgH4SPCAcz91OPjdP0fce1ZykQJ HWDBOb/u 4ZclcX1YRhZhOdLlEMXjk3c39kuoybU4Nt3BqDZB/AOriLk339e566mJgL+I6mx65HB2zyey84MU5WmESLpl09NpfusC4NmvYslu0NdCwArUivBMtVcPbJmoFqA6wRz1YkrtDo5SioYFe+QSl9zyEdY5oqiUOX1eognu5JfHZ3BkdpW3/hQsu723M/dWs5kcAtDCY9OABuJZ8OFWGh+lJ1LEpvKvtg5igX/Yk16Ol2Krb3IuVKrD6FNhy6oLw+2LVgqesdh5980WBy1IeThq4y+RdOGKoGdLjY8d3Paj+dstzx0VEl6Nv6X6EsTWROi2ypa1P2fV0++X84Hxv/E0KhJ9/7JnMFx7R3QPeHbyuOwfHfa1i5ifRpA4nrtjiS2IABR7e3yc24MXy+Kft9tiQ5u8MOmoGon+wL6k9lmlFCP8j5kLD60teFtXNBANHVx+ZDnCTLlA+22fzyr6k3ZOCTyzGJ0TLsOkCTXnR 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: Now that batching of hugetlb vmemmap optimization processing is possible, batch the freeing of vmemmap pages. When freeing vmemmap pages for a hugetlb page, we add them to a list that is freed after the entire batch has been processed. This enhances the ability to return contiguous ranges of memory to the low level allocators. Signed-off-by: Mike Kravetz Reviewed-by: Muchun Song --- mm/hugetlb_vmemmap.c | 82 ++++++++++++++++++++++++++++++-------------- 1 file changed, 56 insertions(+), 26 deletions(-) diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c index 77f44b81ff01..4ac521e596db 100644 --- a/mm/hugetlb_vmemmap.c +++ b/mm/hugetlb_vmemmap.c @@ -251,7 +251,7 @@ static void vmemmap_remap_pte(pte_t *pte, unsigned long addr, } entry = mk_pte(walk->reuse_page, pgprot); - list_add_tail(&page->lru, walk->vmemmap_pages); + list_add(&page->lru, walk->vmemmap_pages); set_pte_at(&init_mm, addr, pte, entry); } @@ -306,18 +306,20 @@ static void vmemmap_restore_pte(pte_t *pte, unsigned long addr, * @end: end address of the vmemmap virtual address range that we want to * remap. * @reuse: reuse address. + * @vmemmap_pages: list to deposit vmemmap pages to be freed. It is callers + * responsibility to free pages. * * Return: %0 on success, negative error code otherwise. */ static int vmemmap_remap_free(unsigned long start, unsigned long end, - unsigned long reuse) + unsigned long reuse, + struct list_head *vmemmap_pages) { int ret; - LIST_HEAD(vmemmap_pages); struct vmemmap_remap_walk walk = { .remap_pte = vmemmap_remap_pte, .reuse_addr = reuse, - .vmemmap_pages = &vmemmap_pages, + .vmemmap_pages = vmemmap_pages, }; int nid = page_to_nid((struct page *)reuse); gfp_t gfp_mask = GFP_KERNEL | __GFP_NORETRY | __GFP_NOWARN; @@ -334,7 +336,7 @@ static int vmemmap_remap_free(unsigned long start, unsigned long end, if (walk.reuse_page) { copy_page(page_to_virt(walk.reuse_page), (void *)walk.reuse_addr); - list_add(&walk.reuse_page->lru, &vmemmap_pages); + list_add(&walk.reuse_page->lru, vmemmap_pages); } /* @@ -365,15 +367,13 @@ static int vmemmap_remap_free(unsigned long start, unsigned long end, walk = (struct vmemmap_remap_walk) { .remap_pte = vmemmap_restore_pte, .reuse_addr = reuse, - .vmemmap_pages = &vmemmap_pages, + .vmemmap_pages = vmemmap_pages, }; vmemmap_remap_range(reuse, end, &walk); } mmap_read_unlock(&init_mm); - free_vmemmap_page_list(&vmemmap_pages); - return ret; } @@ -389,7 +389,7 @@ static int alloc_vmemmap_page_list(unsigned long start, unsigned long end, page = alloc_pages_node(nid, gfp_mask, 0); if (!page) goto out; - list_add_tail(&page->lru, list); + list_add(&page->lru, list); } return 0; @@ -577,24 +577,17 @@ static bool vmemmap_should_optimize(const struct hstate *h, const struct page *h return true; } -/** - * hugetlb_vmemmap_optimize - optimize @head page's vmemmap pages. - * @h: struct hstate. - * @head: the head page whose vmemmap pages will be optimized. - * - * This function only tries to optimize @head's vmemmap pages and does not - * guarantee that the optimization will succeed after it returns. The caller - * can use HPageVmemmapOptimized(@head) to detect if @head's vmemmap pages - * have been optimized. - */ -void hugetlb_vmemmap_optimize(const struct hstate *h, struct page *head) +static int __hugetlb_vmemmap_optimize(const struct hstate *h, + struct page *head, + struct list_head *vmemmap_pages) { + int ret = 0; unsigned long vmemmap_start = (unsigned long)head, vmemmap_end; unsigned long vmemmap_reuse; VM_WARN_ON_ONCE(!PageHuge(head)); if (!vmemmap_should_optimize(h, head)) - return; + return ret; static_branch_inc(&hugetlb_optimize_vmemmap_key); @@ -604,21 +597,58 @@ void hugetlb_vmemmap_optimize(const struct hstate *h, struct page *head) /* * Remap the vmemmap virtual address range [@vmemmap_start, @vmemmap_end) - * to the page which @vmemmap_reuse is mapped to, then free the pages - * which the range [@vmemmap_start, @vmemmap_end] is mapped to. + * to the page which @vmemmap_reuse is mapped to. Add pages previously + * mapping the range to vmemmap_pages list so that they can be freed by + * the caller. */ - if (vmemmap_remap_free(vmemmap_start, vmemmap_end, vmemmap_reuse)) + ret = vmemmap_remap_free(vmemmap_start, vmemmap_end, vmemmap_reuse, vmemmap_pages); + if (ret) static_branch_dec(&hugetlb_optimize_vmemmap_key); else SetHPageVmemmapOptimized(head); + + return ret; +} + +/** + * hugetlb_vmemmap_optimize - optimize @head page's vmemmap pages. + * @h: struct hstate. + * @head: the head page whose vmemmap pages will be optimized. + * + * This function only tries to optimize @head's vmemmap pages and does not + * guarantee that the optimization will succeed after it returns. The caller + * can use HPageVmemmapOptimized(@head) to detect if @head's vmemmap pages + * have been optimized. + */ +void hugetlb_vmemmap_optimize(const struct hstate *h, struct page *head) +{ + LIST_HEAD(vmemmap_pages); + + __hugetlb_vmemmap_optimize(h, head, &vmemmap_pages); + free_vmemmap_page_list(&vmemmap_pages); } void hugetlb_vmemmap_optimize_folios(struct hstate *h, struct list_head *folio_list) { struct folio *folio; + LIST_HEAD(vmemmap_pages); + + list_for_each_entry(folio, folio_list, lru) { + int ret = __hugetlb_vmemmap_optimize(h, &folio->page, + &vmemmap_pages); + + /* + * Pages to be freed may have been accumulated. If we + * encounter an ENOMEM, free what we have and try again. + */ + if (ret == -ENOMEM && !list_empty(&vmemmap_pages)) { + free_vmemmap_page_list(&vmemmap_pages); + INIT_LIST_HEAD(&vmemmap_pages); + __hugetlb_vmemmap_optimize(h, &folio->page, &vmemmap_pages); + } + } - list_for_each_entry(folio, folio_list, lru) - hugetlb_vmemmap_optimize(h, &folio->page); + free_vmemmap_page_list(&vmemmap_pages); } static struct ctl_table hugetlb_vmemmap_sysctls[] = {