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 X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,MSGID_FROM_MTA_HEADER,SPF_HELO_NONE,SPF_PASS, USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id B421EC433E0 for ; Wed, 20 Jan 2021 01:33:33 +0000 (UTC) Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by mail.kernel.org (Postfix) with ESMTP id 2268922241 for ; Wed, 20 Jan 2021 01:33:33 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2268922241 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=oracle.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=owner-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix) id AF2BF6B0005; Tue, 19 Jan 2021 20:33:32 -0500 (EST) Received: by kanga.kvack.org (Postfix, from userid 40) id AA0E86B0006; Tue, 19 Jan 2021 20:33:32 -0500 (EST) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 91BA36B0007; Tue, 19 Jan 2021 20:33:32 -0500 (EST) X-Delivered-To: linux-mm@kvack.org Received: from forelay.hostedemail.com (smtprelay0166.hostedemail.com [216.40.44.166]) by kanga.kvack.org (Postfix) with ESMTP id 7BD0E6B0005 for ; Tue, 19 Jan 2021 20:33:32 -0500 (EST) Received: from smtpin08.hostedemail.com (10.5.19.251.rfc1918.com [10.5.19.251]) by forelay02.hostedemail.com (Postfix) with ESMTP id 3C38933CD for ; Wed, 20 Jan 2021 01:33:32 +0000 (UTC) X-FDA: 77724431064.08.knife87_510914827556 Received: from filter.hostedemail.com (10.5.16.251.rfc1918.com [10.5.16.251]) by smtpin08.hostedemail.com (Postfix) with ESMTP id 21D451819E62A for ; Wed, 20 Jan 2021 01:33:32 +0000 (UTC) X-HE-Tag: knife87_510914827556 X-Filterd-Recvd-Size: 17541 Received: from aserp2130.oracle.com (aserp2130.oracle.com [141.146.126.79]) by imf04.hostedemail.com (Postfix) with ESMTP for ; Wed, 20 Jan 2021 01:33:30 +0000 (UTC) Received: from pps.filterd (aserp2130.oracle.com [127.0.0.1]) by aserp2130.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 10K1SeBL121604; Wed, 20 Jan 2021 01:33:20 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-2020-01-29; bh=GkEtRCoCPbH2VxS8quwLysFsPwNTBQ+D3u0/k/wZa04=; b=EjkESOLVEQmZuFB1go6Z21hwwLt4H20skqKWxsgeFblBAUjHLGYc4QCEAaeO24sKuP64 F8V8eGKUguAWgjUJgUQ1qlcAAmD66YJ+wJ4P8K1/ND+GupQHQ+FW/sI4bdYnM0tgwspI UGiE/xlQOpXCY5ckzIOTYlLXw2dQfbGtDkEfJmzKvJh08m+P8FMaRJ4NWX1QZCP3TW6m O8m7MBWzaNmzjWjNSXp9wbT9m+Yk9XM/ueQcDYABecKd514c4FrVuCoFTYNAM9bDk2f1 LHmOhrvfxQEeigMf1AjIJwnAzFyqs2KEXhG3CJlkT7akINmY74DFOyquAXk5Moh/fo6q MQ== Received: from aserp3020.oracle.com (aserp3020.oracle.com [141.146.126.70]) by aserp2130.oracle.com with ESMTP id 3668qr8ah7-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 20 Jan 2021 01:33:19 +0000 Received: from pps.filterd (aserp3020.oracle.com [127.0.0.1]) by aserp3020.oracle.com (8.16.0.42/8.16.0.42) with SMTP id 10K1Tjrb072254; Wed, 20 Jan 2021 01:31:19 GMT Received: from nam10-dm6-obe.outbound.protection.outlook.com (mail-dm6nam10lp2107.outbound.protection.outlook.com [104.47.58.107]) by aserp3020.oracle.com with ESMTP id 3668rd56g3-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 20 Jan 2021 01:31:19 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=be5EN3cfQIWaHsqzfX+GpMiTu/SfNFEVFe5e2BMaPCR0qFmwetttn30IP4M+MilhiX4y1PLkL/WI6md/dN3Nt0puX3rKfvy9AjlJA6q1wixQaSyCI6iDB0JvDQF56/CVB+w1Z267Wxg8Xwc95BWcQUboulYmwidb79QWOuHZwx9rkQa3Sm/bJ0p3imVftbijnBcG1k57wRovkJbKJuhyfBbpxCPqU+b3YBN1IkVw0fzn2JSJhT3xPwbhEiTJ0PL58SLDzp9yYlKFLGUZTzGXy7CszJQKQ4NCimnxIqjlHrk56258RMWCmZXr0At4i27BNxb/6pNtWpr1DfSW6HrOTA== 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-SenderADCheck; bh=GkEtRCoCPbH2VxS8quwLysFsPwNTBQ+D3u0/k/wZa04=; b=Q2kFcJa0tw533b109iO8edn61Lmcv+xWel+9xV1Rk7Oc/uOlg8DwUuxHNixWsALdCR0mTLWt+/8hvZo6B3KUsqKlf8gN/pDhKF4Oj5JNLYGXBus8Y4u/I8v5+r61Hh3a10qaaRrDDuyjfBGqaJH8TjJk2/2sCWyD6lVaogL7DgbRCf7k7xOcaPQpWRbmogEYKd9OSnFVpRBCQ/+zg+9W+GbdkTy6YPhZpG6xtSHccWw+/0j3a82s7Mb8dTVPT+t/N/v6w72rVpoVGIhfKzf2fb79pgs//MbLJu88iOuGoPyCYC9E5NVCXJVHtwIe39gdCkMHT3rJfHbcDlFO+HVV5A== 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=GkEtRCoCPbH2VxS8quwLysFsPwNTBQ+D3u0/k/wZa04=; b=ERsZm35kspP/WEUB8vgnS8bq6sXYShBvJ5EjK6YHEKKXd8YwX9yNPlYT8wIKVdBnEa1cGDDsPpDHsFCLxBDxzoaeADkDN8X8LCzh4vt73jXUnhSXtqvOqqRktPPazqM3/EyUOj+46BnC90xBVhpHslHkjfH7WXDdbX7zxPlVlfk= Authentication-Results: vger.kernel.org; dkim=none (message not signed) header.d=none;vger.kernel.org; dmarc=none action=none header.from=oracle.com; Received: from MWHPR10MB1389.namprd10.prod.outlook.com (2603:10b6:300:21::22) by MWHPR1001MB2384.namprd10.prod.outlook.com (2603:10b6:301:2d::26) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3763.10; Wed, 20 Jan 2021 01:31:17 +0000 Received: from MWHPR10MB1389.namprd10.prod.outlook.com ([fe80::897d:a360:92db:3074]) by MWHPR10MB1389.namprd10.prod.outlook.com ([fe80::897d:a360:92db:3074%5]) with mapi id 15.20.3763.014; Wed, 20 Jan 2021 01:31:17 +0000 From: Mike Kravetz To: linux-kernel@vger.kernel.org, linux-mm@kvack.org Cc: Michal Hocko , Naoya Horiguchi , Muchun Song , David Hildenbrand , Oscar Salvador , Matthew Wilcox , Andrew Morton , Mike Kravetz Subject: [PATCH v2 2/5] hugetlb: convert page_huge_active() HPageMigratable flag Date: Tue, 19 Jan 2021 17:30:46 -0800 Message-Id: <20210120013049.311822-3-mike.kravetz@oracle.com> X-Mailer: git-send-email 2.29.2 In-Reply-To: <20210120013049.311822-1-mike.kravetz@oracle.com> References: <20210120013049.311822-1-mike.kravetz@oracle.com> Content-Type: text/plain X-Originating-IP: [50.38.35.18] X-ClientProxiedBy: CO2PR04CA0178.namprd04.prod.outlook.com (2603:10b6:104:4::32) To MWHPR10MB1389.namprd10.prod.outlook.com (2603:10b6:300:21::22) MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 Received: from monkey.oracle.com (50.38.35.18) by CO2PR04CA0178.namprd04.prod.outlook.com (2603:10b6:104:4::32) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.11 via Frontend Transport; Wed, 20 Jan 2021 01:31:17 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: a0d9e085-0b14-4b72-0682-08d8bce3153e X-MS-TrafficTypeDiagnostic: MWHPR1001MB2384: X-MS-Exchange-Transport-Forked: True X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:9508; X-MS-Exchange-SenderADCheck: 1 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: Uky+p+qNNKCnR6uR6r+iGbkrv5ND83yhINZGrp2XEdEju2LuuU5sBravHVVuXEPiDoHn8EvB86J4G6iImT9tKmO1GbYmx5eWbhszxkn5zp50Omcz1WdjcNkMmYJxT7aDH/nIgffJxwbaW+tGtUs8ZqG8V6fTyZ+BdYjKjCKX+6iPKy1aoCKc1+78OPeKsQYFUok3OdsfNOttssTq8vaDujrle4p3dlFnxIVzZfnRSbjtfqHXYpnt9I+egeAb00S/DkZOVMSHJxA2gGL1UbucSw2uDFwpJnAtjDIxD2+6BA9IoimIls1A80fOMBys/yp/35NrAKwK7bHSXBZ1AjhuTMOAUEYZXzWrlyknvNJtnxoNuFVHoehAbCXGPRWPkjE6K3VLjOaxnZqssws28tqBdWRgfO3hmHaBuRvi72cj6RGk4VEa8YHxbwPo+zkyMsuu7sibGPEOA6nxW0g49lz/LQWhfbi82BNL0Ka6/Gc/+7vHkylWngrhipxbwqZanlBnTg1UdJoQdsIU/pNj47wT2jGLva+Yb/2qUduDzoO4/BlNvtaaVAs8onDFaSSRlBP4 X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MWHPR10MB1389.namprd10.prod.outlook.com;PTR:;CAT:NONE;SFS:(39860400002)(376002)(346002)(366004)(136003)(396003)(1076003)(8676002)(186003)(36756003)(107886003)(8936002)(478600001)(16526019)(4326008)(956004)(316002)(86362001)(5660300002)(54906003)(6486002)(2616005)(7696005)(66946007)(66476007)(66556008)(83380400001)(44832011)(2906002)(52116002)(6666004)(26005)(14583001);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData: =?us-ascii?Q?QQprUyw28FEtVCEmXd/q+R3oONHAbCUgC2AvwIjr+/g3fO+WH9wdiWHN9sq8?= =?us-ascii?Q?EwAyA9utIcquz/U9iOnCVJpaFpeqVRCnAkEbFEE6F7PIToSC0Ie1iSJBdYpk?= =?us-ascii?Q?hCZ89YxYunMhmqAJAwu6Q9Dzz1Yql/Ijh7CLk0vUb4SWtJdUkcPnN2YctowA?= =?us-ascii?Q?6ec2TgvC21Ybk8LGt79kVlb/EgTESCsaZJza/p8XH+YHckrlS2FyELAO3Xsv?= =?us-ascii?Q?J5J0r8hOfUFmKCOgRp5FIb8ys6zU72p1+aTx+LbmVSH7OfKIxtr2LD9f1XuY?= =?us-ascii?Q?tm3RbyAJ2C26WzwFRdDVDwH0kI1nBNwv+fqHxG3HzkljJVV1PPn8Z9DIgDE6?= =?us-ascii?Q?M+s4FWNT7zB2YcxAZ8KV/I/lf5wgcNcvOe7qFMdyx7Lvwp4BDqMDbaFOKMDN?= =?us-ascii?Q?lLDQRVA4lDVGaLb7+2H4/eW025RSiCpiPXlA6gVrDrk3bpE3IgWYdIirHkwS?= =?us-ascii?Q?JUKPFu/Dl4MNIXZu5W/OPflzOd/Kn1zG0YdC5kEHPGUDxSYsdOSgsPMPZSan?= =?us-ascii?Q?nYaOCKdl79SR6RFp02y/EnXo4oXvyS4TU+kGCm+7ucoLbS2gmQ60CrrtnpQu?= =?us-ascii?Q?hC9f8jwvqP4qjpGBVCneSCgrei7hyvHIPB0r7pCY+HCCt6wrOMGzLIcC/NwJ?= =?us-ascii?Q?kWF8FI218iIbYkDUhE/uNc+gOxtljO49qKcIABPyRzFHzy1fCKIWp9/E8q+/?= =?us-ascii?Q?8klLqcp3X5luxbd5S40JpT59PrmXgPYjO3dZglL9Upy0zwVOkjCqKC0CXmf0?= =?us-ascii?Q?+ifHTOpecEMWKydA2C39M0/6c6DldPWMviBeKUpe5vh/YbHdeK5rveEvykm+?= =?us-ascii?Q?uLysymPPr0pcPiC5y1c1IoVWeeZ302IYSn42Y6JLR8+/hi4YkMWWTby+O25J?= =?us-ascii?Q?lOAGs35kqFIAU5OKe4hWgu8KJrFrzk/ii2+EKOFtWvJlyr3pY0LNj8KDrZSa?= =?us-ascii?Q?3TX+BC41ZpymskokQViIXtYKLnpxizLX53260GgdAY3YsLOgXdXVsCV7tyg4?= =?us-ascii?Q?9iXgdk819hvMjmLCx5L6cfzEA3jBlApRj8/I/Kgc97f0XZ5n98E/qee3tGMq?= =?us-ascii?Q?jFtoaC4M?= X-OriginatorOrg: oracle.com X-MS-Exchange-CrossTenant-Network-Message-Id: a0d9e085-0b14-4b72-0682-08d8bce3153e X-MS-Exchange-CrossTenant-AuthSource: MWHPR10MB1389.namprd10.prod.outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 20 Jan 2021 01:31:17.4588 (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: du3cj/HSWycxuFgPgeGjypPPRnzrr+FqyGrlx88ChOFHJEDvf2Smgf+ye5/95i53eAt0JxQq6nErLxkDCdChgg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR1001MB2384 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9869 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxscore=0 spamscore=0 suspectscore=0 adultscore=0 mlxlogscore=999 bulkscore=0 malwarescore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2101200005 X-Proofpoint-Virus-Version: vendor=nai engine=6000 definitions=9869 signatures=668683 X-Proofpoint-Spam-Details: rule=notspam policy=default score=0 mlxlogscore=999 mlxscore=0 suspectscore=0 lowpriorityscore=0 bulkscore=0 adultscore=0 spamscore=0 phishscore=0 priorityscore=1501 impostorscore=0 malwarescore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2009150000 definitions=main-2101200005 Content-Transfer-Encoding: quoted-printable 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: Use the new hugetlb page specific flag HPageMigratable to replace the page_huge_active interfaces. By it's name, page_huge_active implied that a huge page was on the active list. However, that is not really what code checking the flag wanted to know. It really wanted to determin= e if the huge page could be migrated. This happens when the page is actual= ly added the page cache and/or task page table. This is the reasoning behin= d the name change. The VM_BUG_ON_PAGE() calls in the *_huge_active() interfaces are not really necessary as we KNOW the page is a hugetlb page. Therefore, they are removed. The routine page_huge_active checked for PageHeadHuge before testing the active bit. This is unnecessary in the case where we hold a reference or lock and know it is a hugetlb head page. page_huge_active is also called without holding a reference or lock (scan_movable_pages), and can race wi= th code freeing the page. The extra check in page_huge_active shortened the race window, but did not prevent the race. Offline code calling scan_movable_pages already deals with these races, so removing the check is acceptable. Add comment to racy code. Signed-off-by: Mike Kravetz --- fs/hugetlbfs/inode.c | 2 +- include/linux/hugetlb.h | 5 +++++ include/linux/page-flags.h | 6 ----- mm/hugetlb.c | 45 ++++++++++---------------------------- mm/memory_hotplug.c | 8 ++++++- 5 files changed, 24 insertions(+), 42 deletions(-) diff --git a/fs/hugetlbfs/inode.c b/fs/hugetlbfs/inode.c index b8a661780c4a..ec9f03aa2738 100644 --- a/fs/hugetlbfs/inode.c +++ b/fs/hugetlbfs/inode.c @@ -735,7 +735,7 @@ static long hugetlbfs_fallocate(struct file *file, in= t mode, loff_t offset, =20 mutex_unlock(&hugetlb_fault_mutex_table[hash]); =20 - set_page_huge_active(page); + SetHPageMigratable(page); /* * unlock_page because locked by add_to_page_cache() * put_page() due to reference from alloc_huge_page() diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index be71a00ee2a0..ce3d03da0133 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -480,9 +480,13 @@ unsigned long hugetlb_get_unmapped_area(struct file = *file, unsigned long addr, * HPG_restore_reserve - Set when a hugetlb page consumes a reservation = at * allocation time. Cleared when page is fully instantiated. Free * routine checks flag to restore a reservation on error paths. + * HPG_migratable - Set after a newly allocated page is added to the pa= ge + * cache and/or page tables. Indicates the page is a candidate for + * migration. */ enum hugetlb_page_flags { HPG_restore_reserve =3D 0, + HPG_migratable, __NR_HPAGEFLAGS, }; =20 @@ -529,6 +533,7 @@ static inline void ClearHPage##uname(struct page *pag= e) \ * Create functions associated with hugetlb page flags */ HPAGEFLAG(RestoreReserve, restore_reserve) +HPAGEFLAG(Migratable, migratable) =20 #ifdef CONFIG_HUGETLB_PAGE =20 diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index bc6fd1ee7dd6..04a34c08e0a6 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -592,15 +592,9 @@ static inline void ClearPageCompound(struct page *pa= ge) #ifdef CONFIG_HUGETLB_PAGE int PageHuge(struct page *page); int PageHeadHuge(struct page *page); -bool page_huge_active(struct page *page); #else TESTPAGEFLAG_FALSE(Huge) TESTPAGEFLAG_FALSE(HeadHuge) - -static inline bool page_huge_active(struct page *page) -{ - return 0; -} #endif =20 =20 diff --git a/mm/hugetlb.c b/mm/hugetlb.c index 8bed6b5202d2..c24da40626d3 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -1353,30 +1353,6 @@ struct hstate *size_to_hstate(unsigned long size) return NULL; } =20 -/* - * Test to determine whether the hugepage is "active/in-use" (i.e. being= linked - * to hstate->hugepage_activelist.) - * - * This function can be called for tail pages, but never returns true fo= r them. - */ -bool page_huge_active(struct page *page) -{ - return PageHeadHuge(page) && PagePrivate(&page[1]); -} - -/* never called for tail page */ -void set_page_huge_active(struct page *page) -{ - VM_BUG_ON_PAGE(!PageHeadHuge(page), page); - SetPagePrivate(&page[1]); -} - -static void clear_page_huge_active(struct page *page) -{ - VM_BUG_ON_PAGE(!PageHeadHuge(page), page); - ClearPagePrivate(&page[1]); -} - /* * Internal hugetlb specific page flag. Do not use outside of the hugetl= b * code @@ -1438,7 +1414,7 @@ static void __free_huge_page(struct page *page) } =20 spin_lock(&hugetlb_lock); - clear_page_huge_active(page); + ClearHPageMigratable(page); hugetlb_cgroup_uncharge_page(hstate_index(h), pages_per_huge_page(h), page); hugetlb_cgroup_uncharge_page_rsvd(hstate_index(h), @@ -4220,7 +4196,7 @@ static vm_fault_t hugetlb_cow(struct mm_struct *mm,= struct vm_area_struct *vma, make_huge_pte(vma, new_page, 1)); page_remove_rmap(old_page, true); hugepage_add_new_anon_rmap(new_page, vma, haddr); - set_page_huge_active(new_page); + SetHPageMigratable(new_page); /* Make the old page be freed below */ new_page =3D old_page; } @@ -4457,12 +4433,12 @@ static vm_fault_t hugetlb_no_page(struct mm_struc= t *mm, spin_unlock(ptl); =20 /* - * Only make newly allocated pages active. Existing pages found - * in the pagecache could be !page_huge_active() if they have been - * isolated for migration. + * Only set HPageMigratable in newly allocated pages. Existing pages + * found in the pagecache may not have HPageMigratableset if they have + * been isolated for migration. */ if (new_page) - set_page_huge_active(page); + SetHPageMigratable(page); =20 unlock_page(page); out: @@ -4773,7 +4749,7 @@ int hugetlb_mcopy_atomic_pte(struct mm_struct *dst_= mm, update_mmu_cache(dst_vma, dst_addr, dst_pte); =20 spin_unlock(ptl); - set_page_huge_active(page); + SetHPageMigratable(page); if (vm_shared) unlock_page(page); ret =3D 0; @@ -5591,12 +5567,13 @@ bool isolate_huge_page(struct page *page, struct = list_head *list) bool ret =3D true; =20 spin_lock(&hugetlb_lock); - if (!PageHeadHuge(page) || !page_huge_active(page) || + if (!PageHeadHuge(page) || + !HPageMigratable(page) || !get_page_unless_zero(page)) { ret =3D false; goto unlock; } - clear_page_huge_active(page); + ClearHPageMigratable(page); list_move_tail(&page->lru, list); unlock: spin_unlock(&hugetlb_lock); @@ -5607,7 +5584,7 @@ void putback_active_hugepage(struct page *page) { VM_BUG_ON_PAGE(!PageHead(page), page); spin_lock(&hugetlb_lock); - set_page_huge_active(page); + SetHPageMigratable(page); list_move_tail(&page->lru, &(page_hstate(page))->hugepage_activelist); spin_unlock(&hugetlb_lock); put_page(page); diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index f9d57b9be8c7..563da803e0e0 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1260,7 +1260,13 @@ static int scan_movable_pages(unsigned long start,= unsigned long end, if (!PageHuge(page)) continue; head =3D compound_head(page); - if (page_huge_active(head)) + /* + * This test is racy as we hold no reference or lock. The + * hugetlb page could have been free'ed and head is no longer + * a hugetlb page before the following check. In such unlikely + * cases false positives and negatives are possible. + */ + if (HPageMigratable(head)) goto found; skip =3D compound_nr(head) - (page - head); pfn +=3D skip - 1; --=20 2.29.2