From nobody Fri Jun 19 13:30:16 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id EE793C433EF for ; Mon, 4 Apr 2022 07:47:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347150AbiDDHt2 (ORCPT ); Mon, 4 Apr 2022 03:49:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38204 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1357940AbiDDHtR (ORCPT ); Mon, 4 Apr 2022 03:49:17 -0400 Received: from mail-pf1-x42e.google.com (mail-pf1-x42e.google.com [IPv6:2607:f8b0:4864:20::42e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 972863B028 for ; Mon, 4 Apr 2022 00:47:21 -0700 (PDT) Received: by mail-pf1-x42e.google.com with SMTP id y10so8198245pfa.7 for ; Mon, 04 Apr 2022 00:47:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=lC2h3Z6cLQPfmZiyooW/1psSSkQBU7SQH9OssEYi9S4=; b=iYFAero0C1uGiy/RKm8ALKfdReKFAW/xq6ySV+p/WR9w+sSqKFiDxAMw2n8TW6FqTd Q/HncU1Mdyyfvx9jw4Xx0snP3Dfa8JL9v5AJXc9+v0vwdKdZMW9UZox8CDv5iq3Cwiz4 QzSjZq7Id+HECBjJn8Muq67jep8q1Y+034IbMut0Lwuwrw5oPWCRH8IU9qhiamUgiXxu Ymnnrkx4pmVjHPC7DH2Bd9a2V541jSkaX1Vh/H48th0iDq0bDr/gdA7EA29egOKKJQ/N 2rBdOWhXC00o772NqZSUSO3qLmEBx7HJZlMngmpn+hAXWwmU3sEZ57IWMDnAWh8vUudh 7Utw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=lC2h3Z6cLQPfmZiyooW/1psSSkQBU7SQH9OssEYi9S4=; b=uu096VDVmsu8ykxjZhpBq/hVvFadp+DEtdw9OF5Deu++ILLdVSemg00V/y4588Af1t 2u3pVemqeZwlINNG5c25IT90tdH7FoQh2tvgaGrMT1X3Vi4s2wKBw3e1RY2wcOCvmFVR 1IOhm6iLkVbIRTqauJT1HUjoo9OMiuDZ3GggbVvP0yr+3FhKh4sJeRTRbllUgK+Lrp/8 5OUg1s3KkKb4+MTK3ug2oxD/8dUFqP4f01NonJJQe5rXaM/lH9x9yJ2HBMC0kgYpnQ2J dNObIpjDofMsYx4Rgu69rPTvdBJ2ryWpiOzXKaIcBTBDafZ4WO2jfJmzqT/xR/IOxw/A 8Pxg== X-Gm-Message-State: AOAM531J6Pqyopm+i1aLMuydHDgRXdLnvFz5hSoG4j+vseVJJEyZTYHh +1uUOh7rRtXkhkU8aXuGW16vlg== X-Google-Smtp-Source: ABdhPJwIKLc+bbXglEKEk8PeuNGWL8h9SDP+7P/jztgJ3cd8Kd5/Bwx/Z/49/hAPtUzYDigduzUgTA== X-Received: by 2002:a65:5acd:0:b0:399:24bc:bbfd with SMTP id d13-20020a655acd000000b0039924bcbbfdmr3428233pgt.323.1649058441043; Mon, 04 Apr 2022 00:47:21 -0700 (PDT) Received: from FVFYT0MHHV2J.bytedance.net ([139.177.225.245]) by smtp.gmail.com with ESMTPSA id g70-20020a636b49000000b003823dd39d41sm9376579pgc.64.2022.04.04.00.47.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Apr 2022 00:47:20 -0700 (PDT) From: Muchun Song To: mike.kravetz@oracle.com, akpm@linux-foundation.org, david@redhat.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, smuchun@bytedance.com, Muchun Song Subject: [PATCH 1/3] mm: hugetlb_vmemmap: cleanup hugetlb_vmemmap related functions Date: Mon, 4 Apr 2022 15:46:50 +0800 Message-Id: <20220404074652.68024-2-songmuchun@bytedance.com> X-Mailer: git-send-email 2.32.0 (Apple Git-132) In-Reply-To: <20220404074652.68024-1-songmuchun@bytedance.com> References: <20220404074652.68024-1-songmuchun@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The word of "free" is not expressive enough to express the feature of optim= izing vmemmap pages associated with each HugeTLB, rename this keywork to "optimez= e". And some function names are prefixed with "huge_page" instead of "hugetlb",= it is easily to be confused with THP. In this patch , cheanup related functions = to make code more clear and expressive. Signed-off-by: Muchun Song Reviewed-by: Mike Kravetz --- include/linux/hugetlb.h | 2 +- mm/hugetlb.c | 10 +++++----- mm/hugetlb_vmemmap.c | 42 ++++++++++++++++++++---------------------- mm/hugetlb_vmemmap.h | 20 ++++++++++---------- 4 files changed, 36 insertions(+), 38 deletions(-) diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index 53c1b6082a4c..c16fbb1228a3 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -618,7 +618,7 @@ struct hstate { unsigned int free_huge_pages_node[MAX_NUMNODES]; unsigned int surplus_huge_pages_node[MAX_NUMNODES]; #ifdef CONFIG_HUGETLB_PAGE_FREE_VMEMMAP - unsigned int nr_free_vmemmap_pages; + unsigned int optimize_vmemmap_pages; #endif #ifdef CONFIG_CGROUP_HUGETLB /* cgroup control files */ diff --git a/mm/hugetlb.c b/mm/hugetlb.c index dd642cfc538b..1f9fbdddc86b 100644 --- a/mm/hugetlb.c +++ b/mm/hugetlb.c @@ -1540,7 +1540,7 @@ static void __update_and_free_page(struct hstate *h, = struct page *page) if (hstate_is_gigantic(h) && !gigantic_page_runtime_supported()) return; =20 - if (alloc_huge_page_vmemmap(h, page)) { + if (hugetlb_vmemmap_alloc(h, page)) { spin_lock_irq(&hugetlb_lock); /* * If we cannot allocate vmemmap pages, just refuse to free the @@ -1617,7 +1617,7 @@ static DECLARE_WORK(free_hpage_work, free_hpage_workf= n); =20 static inline void flush_free_hpage_work(struct hstate *h) { - if (free_vmemmap_pages_per_hpage(h)) + if (hugetlb_optimize_vmemmap_pages(h)) flush_work(&free_hpage_work); } =20 @@ -1739,7 +1739,7 @@ static void __prep_account_new_huge_page(struct hstat= e *h, int nid) =20 static void __prep_new_huge_page(struct hstate *h, struct page *page) { - free_huge_page_vmemmap(h, page); + hugetlb_vmemmap_free(h, page); INIT_LIST_HEAD(&page->lru); set_compound_page_dtor(page, HUGETLB_PAGE_DTOR); hugetlb_set_page_subpool(page, NULL); @@ -2112,7 +2112,7 @@ int dissolve_free_huge_page(struct page *page) * Attempt to allocate vmemmmap here so that we can take * appropriate action on failure. */ - rc =3D alloc_huge_page_vmemmap(h, head); + rc =3D hugetlb_vmemmap_alloc(h, head); if (!rc) { /* * Move PageHWPoison flag from head page to the raw @@ -3427,7 +3427,7 @@ static int demote_free_huge_page(struct hstate *h, st= ruct page *page) remove_hugetlb_page_for_demote(h, page, false); spin_unlock_irq(&hugetlb_lock); =20 - rc =3D alloc_huge_page_vmemmap(h, page); + rc =3D hugetlb_vmemmap_alloc(h, page); if (rc) { /* Allocation of vmemmmap failed, we can not demote page */ spin_lock_irq(&hugetlb_lock); diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c index 791626983c2e..91b79b9d9e25 100644 --- a/mm/hugetlb_vmemmap.c +++ b/mm/hugetlb_vmemmap.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * Free some vmemmap pages of HugeTLB + * Optimize vmemmap pages associated with HugeTLB * * Copyright (c) 2020, Bytedance. All rights reserved. * @@ -192,7 +192,7 @@ DEFINE_STATIC_KEY_MAYBE(CONFIG_HUGETLB_PAGE_FREE_VMEMMA= P_DEFAULT_ON, hugetlb_free_vmemmap_enabled_key); EXPORT_SYMBOL(hugetlb_free_vmemmap_enabled_key); =20 -static int __init early_hugetlb_free_vmemmap_param(char *buf) +static int __init hugetlb_vmemmap_early_param(char *buf) { /* We cannot optimize if a "struct page" crosses page boundaries. */ if (!is_power_of_2(sizeof(struct page))) { @@ -212,29 +212,26 @@ static int __init early_hugetlb_free_vmemmap_param(ch= ar *buf) =20 return 0; } -early_param("hugetlb_free_vmemmap", early_hugetlb_free_vmemmap_param); - -static inline unsigned long free_vmemmap_pages_size_per_hpage(struct hstat= e *h) -{ - return (unsigned long)free_vmemmap_pages_per_hpage(h) << PAGE_SHIFT; -} +early_param("hugetlb_free_vmemmap", hugetlb_vmemmap_early_param); =20 /* * Previously discarded vmemmap pages will be allocated and remapping * after this function returns zero. */ -int alloc_huge_page_vmemmap(struct hstate *h, struct page *head) +int hugetlb_vmemmap_alloc(struct hstate *h, struct page *head) { int ret; unsigned long vmemmap_addr =3D (unsigned long)head; - unsigned long vmemmap_end, vmemmap_reuse; + unsigned long vmemmap_end, vmemmap_reuse, vmemmap_pages; =20 if (!HPageVmemmapOptimized(head)) return 0; =20 - vmemmap_addr +=3D RESERVE_VMEMMAP_SIZE; - vmemmap_end =3D vmemmap_addr + free_vmemmap_pages_size_per_hpage(h); - vmemmap_reuse =3D vmemmap_addr - PAGE_SIZE; + vmemmap_addr +=3D RESERVE_VMEMMAP_SIZE; + vmemmap_pages =3D hugetlb_optimize_vmemmap_pages(h); + vmemmap_end =3D vmemmap_addr + (vmemmap_pages << PAGE_SHIFT); + vmemmap_reuse =3D vmemmap_addr - PAGE_SIZE; + /* * The pages which the vmemmap virtual address range [@vmemmap_addr, * @vmemmap_end) are mapped to are freed to the buddy allocator, and @@ -250,17 +247,18 @@ int alloc_huge_page_vmemmap(struct hstate *h, struct = page *head) return ret; } =20 -void free_huge_page_vmemmap(struct hstate *h, struct page *head) +void hugetlb_vmemmap_free(struct hstate *h, struct page *head) { unsigned long vmemmap_addr =3D (unsigned long)head; - unsigned long vmemmap_end, vmemmap_reuse; + unsigned long vmemmap_end, vmemmap_reuse, vmemmap_pages; =20 - if (!free_vmemmap_pages_per_hpage(h)) + vmemmap_pages =3D hugetlb_optimize_vmemmap_pages(h); + if (!vmemmap_pages) return; =20 - vmemmap_addr +=3D RESERVE_VMEMMAP_SIZE; - vmemmap_end =3D vmemmap_addr + free_vmemmap_pages_size_per_hpage(h); - vmemmap_reuse =3D vmemmap_addr - PAGE_SIZE; + vmemmap_addr +=3D RESERVE_VMEMMAP_SIZE; + vmemmap_end =3D vmemmap_addr + (vmemmap_pages << PAGE_SHIFT); + vmemmap_reuse =3D vmemmap_addr - PAGE_SIZE; =20 /* * Remap the vmemmap virtual address range [@vmemmap_addr, @vmemmap_end) @@ -297,8 +295,8 @@ void __init hugetlb_vmemmap_init(struct hstate *h) * hugetlbpage.rst for more details. */ if (likely(vmemmap_pages > RESERVE_VMEMMAP_NR)) - h->nr_free_vmemmap_pages =3D vmemmap_pages - RESERVE_VMEMMAP_NR; + h->optimize_vmemmap_pages =3D vmemmap_pages - RESERVE_VMEMMAP_NR; =20 - pr_info("can free %d vmemmap pages for %s\n", h->nr_free_vmemmap_pages, - h->name); + pr_info("can optimize %d vmemmap pages for %s\n", + h->optimize_vmemmap_pages, h->name); } diff --git a/mm/hugetlb_vmemmap.h b/mm/hugetlb_vmemmap.h index cb2bef8f9e73..9760537849b5 100644 --- a/mm/hugetlb_vmemmap.h +++ b/mm/hugetlb_vmemmap.h @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * Free some vmemmap pages of HugeTLB + * Optimize vmemmap pages associated with HugeTLB * * Copyright (c) 2020, Bytedance. All rights reserved. * @@ -11,25 +11,25 @@ #include =20 #ifdef CONFIG_HUGETLB_PAGE_FREE_VMEMMAP -int alloc_huge_page_vmemmap(struct hstate *h, struct page *head); -void free_huge_page_vmemmap(struct hstate *h, struct page *head); +int hugetlb_vmemmap_alloc(struct hstate *h, struct page *head); +void hugetlb_vmemmap_free(struct hstate *h, struct page *head); void hugetlb_vmemmap_init(struct hstate *h); =20 /* - * How many vmemmap pages associated with a HugeTLB page that can be freed - * to the buddy allocator. + * How many vmemmap pages associated with a HugeTLB page that can be + * optimized and freed to the buddy allocator. */ -static inline unsigned int free_vmemmap_pages_per_hpage(struct hstate *h) +static inline unsigned int hugetlb_optimize_vmemmap_pages(struct hstate *h) { - return h->nr_free_vmemmap_pages; + return h->optimize_vmemmap_pages; } #else -static inline int alloc_huge_page_vmemmap(struct hstate *h, struct page *h= ead) +static inline int hugetlb_vmemmap_alloc(struct hstate *h, struct page *hea= d) { return 0; } =20 -static inline void free_huge_page_vmemmap(struct hstate *h, struct page *h= ead) +static inline void hugetlb_vmemmap_free(struct hstate *h, struct page *hea= d) { } =20 @@ -37,7 +37,7 @@ static inline void hugetlb_vmemmap_init(struct hstate *h) { } =20 -static inline unsigned int free_vmemmap_pages_per_hpage(struct hstate *h) +static inline unsigned int hugetlb_optimize_vmemmap_pages(struct hstate *h) { return 0; } --=20 2.11.0 From nobody Fri Jun 19 13:30:16 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CF7ECC433EF for ; Mon, 4 Apr 2022 07:47:38 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377805AbiDDHtb (ORCPT ); Mon, 4 Apr 2022 03:49:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38234 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377792AbiDDHtV (ORCPT ); Mon, 4 Apr 2022 03:49:21 -0400 Received: from mail-pl1-x629.google.com (mail-pl1-x629.google.com [IPv6:2607:f8b0:4864:20::629]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id BD9053B028 for ; Mon, 4 Apr 2022 00:47:24 -0700 (PDT) Received: by mail-pl1-x629.google.com with SMTP id n8so476621plh.1 for ; Mon, 04 Apr 2022 00:47:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=fLdrPfzfFhe0FD0vYILkdtb9G4w8CHIGtiLey2rvfw8=; b=78DXuMTunFMf5V2vrc40rzu6yjpZRWkp0Ts1Za48QZbHqzxa78WeDuvLe47XTZYvNX KCRWou8zyu4lG8i0WMA4x00bsrnBpxpuVvsh6C/94GisJnUTPkHV0pVncSsThaiVab2J bMWY32eHZtnklZaKysstLy0UnE0EZeNPZnqA7zOZXzr0eKt+8662KHpmyloNVo9DoLzv Y1rSSVnjJ7V1sPZIp4N3i9dVJBw2iNKE05vsWQOJ7Gyd7Y/87GqoPMoEGwm47RhuHPGH Ltom9FCpbey3Y57RMvVif1zH7MF08RG/ViEPTmUwhnzJhsBOI1y9X/JGzPDZHyryKwqP MbNQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=fLdrPfzfFhe0FD0vYILkdtb9G4w8CHIGtiLey2rvfw8=; b=EECcm7JKQqeLe2NDDUktYEdga1rYP6yL0uWkUJ5cIQmsMmnQO6tKcOvCrmkhbxw4Ze G5ieg2OTdc/4/jRvFPRsCsQLnh19PA8VBONuBh7fDtDijtPnGX4ZxeCV360gbu9XjyvI F/h6HUgK+xy0K5ZNILSxEQZTXNi+a8ANFd57UfhzVXvfOneqK4elWti2aNRtvmyuG0gh +VxysWh7BnenaexL9UpB37DhpEKYdWHPcjI/CqcV1Imj4WCTKqOMhK9FgIvccSu5Nm7g nA8f9zqHS1Gja9g4IB7xs+AK/9uFa1QYswa/4XmOqO6I+DO6vc7PfpW5XtlM8bk+7DCO 9ZOA== X-Gm-Message-State: AOAM532kEwGJSk7uKclcHwXqdb1hK90PoL/DVQ7lAYcjWozGvRUPmHd8 77N+UUKKC7uKgJ++zt4gZxbCjw== X-Google-Smtp-Source: ABdhPJyXQqHUSwFeKwVmfqRrJa7how2ljLBKmlg1Oa5U6X04bi8XhqkZsPdPuCRM5vf1hNRH9R0JVA== X-Received: by 2002:a17:902:f70a:b0:153:88c7:774 with SMTP id h10-20020a170902f70a00b0015388c70774mr21867931plo.166.1649058444200; Mon, 04 Apr 2022 00:47:24 -0700 (PDT) Received: from FVFYT0MHHV2J.bytedance.net ([139.177.225.245]) by smtp.gmail.com with ESMTPSA id g70-20020a636b49000000b003823dd39d41sm9376579pgc.64.2022.04.04.00.47.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Apr 2022 00:47:23 -0700 (PDT) From: Muchun Song To: mike.kravetz@oracle.com, akpm@linux-foundation.org, david@redhat.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, smuchun@bytedance.com, Muchun Song Subject: [PATCH 2/3] mm: hugetlb_vmemmap: cleanup hugetlb_free_vmemmap_enabled* Date: Mon, 4 Apr 2022 15:46:51 +0800 Message-Id: <20220404074652.68024-3-songmuchun@bytedance.com> X-Mailer: git-send-email 2.32.0 (Apple Git-132) In-Reply-To: <20220404074652.68024-1-songmuchun@bytedance.com> References: <20220404074652.68024-1-songmuchun@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The word of "free" is not expressive enough to express the feature of optim= izing vmemmap pages associated with each HugeTLB, rename this keywork to "optimez= e". In this patch , cheanup the static key and hugetlb_free_vmemmap_enabled() t= o make code more expressive. Signed-off-by: Muchun Song Reviewed-by: David Hildenbrand Reviewed-by: Mike Kravetz --- arch/arm64/mm/flush.c | 2 +- include/linux/page-flags.h | 12 ++++++------ mm/hugetlb_vmemmap.c | 10 +++++----- mm/memory_hotplug.c | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/arch/arm64/mm/flush.c b/arch/arm64/mm/flush.c index 1efd01e10cba..d19a13234a81 100644 --- a/arch/arm64/mm/flush.c +++ b/arch/arm64/mm/flush.c @@ -85,7 +85,7 @@ void flush_dcache_page(struct page *page) * set since the head vmemmap page frame is reused (more details can * refer to the comments above page_fixed_fake_head()). */ - if (hugetlb_free_vmemmap_enabled() && PageHuge(page)) + if (hugetlb_optimize_vmemmap_enabled() && PageHuge(page)) page =3D compound_head(page); =20 if (test_bit(PG_dcache_clean, &page->flags)) diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 9f488668a1d7..557d15ef3dc0 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -201,16 +201,16 @@ enum pageflags { =20 #ifdef CONFIG_HUGETLB_PAGE_FREE_VMEMMAP DECLARE_STATIC_KEY_MAYBE(CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON, - hugetlb_free_vmemmap_enabled_key); + hugetlb_optimize_vmemmap_key); =20 -static __always_inline bool hugetlb_free_vmemmap_enabled(void) +static __always_inline bool hugetlb_optimize_vmemmap_enabled(void) { return static_branch_maybe(CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON, - &hugetlb_free_vmemmap_enabled_key); + &hugetlb_optimize_vmemmap_key); } =20 /* - * If the feature of freeing some vmemmap pages associated with each HugeT= LB + * If the feature of optimizing vmemmap pages associated with each HugeTLB * page is enabled, the head vmemmap page frame is reused and all of the t= ail * vmemmap addresses map to the head vmemmap page frame (furture details c= an * refer to the figure at the head of the mm/hugetlb_vmemmap.c). In other @@ -227,7 +227,7 @@ static __always_inline bool hugetlb_free_vmemmap_enable= d(void) */ static __always_inline const struct page *page_fixed_fake_head(const struc= t page *page) { - if (!hugetlb_free_vmemmap_enabled()) + if (!hugetlb_optimize_vmemmap_enabled()) return page; =20 /* @@ -256,7 +256,7 @@ static inline const struct page *page_fixed_fake_head(c= onst struct page *page) return page; } =20 -static inline bool hugetlb_free_vmemmap_enabled(void) +static inline bool hugetlb_optimize_vmemmap_enabled(void) { return false; } diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c index 91b79b9d9e25..f25294973398 100644 --- a/mm/hugetlb_vmemmap.c +++ b/mm/hugetlb_vmemmap.c @@ -189,8 +189,8 @@ #define RESERVE_VMEMMAP_SIZE (RESERVE_VMEMMAP_NR << PAGE_SHIFT) =20 DEFINE_STATIC_KEY_MAYBE(CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON, - hugetlb_free_vmemmap_enabled_key); -EXPORT_SYMBOL(hugetlb_free_vmemmap_enabled_key); + hugetlb_optimize_vmemmap_key); +EXPORT_SYMBOL(hugetlb_optimize_vmemmap_key); =20 static int __init hugetlb_vmemmap_early_param(char *buf) { @@ -204,9 +204,9 @@ static int __init hugetlb_vmemmap_early_param(char *buf) return -EINVAL; =20 if (!strcmp(buf, "on")) - static_branch_enable(&hugetlb_free_vmemmap_enabled_key); + static_branch_enable(&hugetlb_optimize_vmemmap_key); else if (!strcmp(buf, "off")) - static_branch_disable(&hugetlb_free_vmemmap_enabled_key); + static_branch_disable(&hugetlb_optimize_vmemmap_key); else return -EINVAL; =20 @@ -282,7 +282,7 @@ void __init hugetlb_vmemmap_init(struct hstate *h) BUILD_BUG_ON(__NR_USED_SUBPAGE >=3D RESERVE_VMEMMAP_SIZE / sizeof(struct page)); =20 - if (!hugetlb_free_vmemmap_enabled()) + if (!hugetlb_optimize_vmemmap_enabled()) return; =20 vmemmap_pages =3D (nr_pages * sizeof(struct page)) >> PAGE_SHIFT; diff --git a/mm/memory_hotplug.c b/mm/memory_hotplug.c index 3fb4196094d9..74430f88853d 100644 --- a/mm/memory_hotplug.c +++ b/mm/memory_hotplug.c @@ -1273,7 +1273,7 @@ bool mhp_supports_memmap_on_memory(unsigned long size) * populate a single PMD. */ return memmap_on_memory && - !hugetlb_free_vmemmap_enabled() && + !hugetlb_optimize_vmemmap_enabled() && IS_ENABLED(CONFIG_MHP_MEMMAP_ON_MEMORY) && size =3D=3D memory_block_size_bytes() && IS_ALIGNED(vmemmap_size, PMD_SIZE) && --=20 2.11.0 From nobody Fri Jun 19 13:30:16 2026 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C7B76C433EF for ; Mon, 4 Apr 2022 07:47:44 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377814AbiDDHth (ORCPT ); Mon, 4 Apr 2022 03:49:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38298 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377791AbiDDHtX (ORCPT ); Mon, 4 Apr 2022 03:49:23 -0400 Received: from mail-pj1-x1030.google.com (mail-pj1-x1030.google.com [IPv6:2607:f8b0:4864:20::1030]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D6E263B028 for ; Mon, 4 Apr 2022 00:47:27 -0700 (PDT) Received: by mail-pj1-x1030.google.com with SMTP id bx5so7949678pjb.3 for ; Mon, 04 Apr 2022 00:47:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bytedance-com.20210112.gappssmtp.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=8JDJT3Qxh7fbWsff5CNkcwlCUJKfGwejjpZxOeH2orE=; b=cv0bvkOz4QU7byShnVLo1cg1rr2nYKGki7mEcTk0uRyT1j07VStWmstjgCKwyYLOTN hlqQVWAjNNac4Er3/x+mlx8GkShHtxxirT4Ntat+wpqKWU6y7R4/Wj9+ksqwUj8br8Cp tcNDxdC8cApKebr0QG5srntAEwIbkp+JWgXQXZSFUzQYessOu83inDt/CYlklAU3E8XT dQoLyFmmeoZSxcCBT8BXUzlb9Mt+iYc8XicTN7krhBJiQ14INpl0qPWyOIxGUJXqNG+d hoihQ18s7+DRC0gLbhbRQ7KwCODRbb+Nk3ldp0FT1mW1YWFsxPrHA0Opi1H4U95HRGfz owcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=8JDJT3Qxh7fbWsff5CNkcwlCUJKfGwejjpZxOeH2orE=; b=LRbWYsOhwMW5CxwlWIC2o3kFyaaCbzWQCic5wniWJ+ZchJNsjbB9GP1YymWU9lg1hV GPHXNAUUDi1Btwqx8GcJoj0eaDs0sRF+WN/rFDkEXIq73SoajWF+6sEyF74+If4cPMI0 QCvu8J4wDBX/ypiG5O+af18pRW9sifejvS1sA/sGMy980tQffVycyqW8o+qUI8yY5/99 nFs+9CCxMrUaVnYR8K4jx0k80hXxerPy47lCN4JfwjTagTUuhisbIx8nucAkVLEjij1B BmLSNtr05hORzReSkuA68X74mhcLYMMDfdR3IW/Fw53dU2UvsySbPX9pIHnXozrlkz/S HFQg== X-Gm-Message-State: AOAM5322WCyjNcYruVcra2GIWDlj2FzcgI4MD6nctsIfGvEYKn88QLpT SPA5c1B4K7GsvFP6l4AJdVtHvA== X-Google-Smtp-Source: ABdhPJzc54DXU8VFqaNDpbxjrIsBuqp7LseE/GLvp12Eg/j7vGkoZGZR/ITzF4BE9JyF3XSfj7EicA== X-Received: by 2002:a17:902:e889:b0:151:a56d:eb8f with SMTP id w9-20020a170902e88900b00151a56deb8fmr21594082plg.142.1649058447273; Mon, 04 Apr 2022 00:47:27 -0700 (PDT) Received: from FVFYT0MHHV2J.bytedance.net ([139.177.225.245]) by smtp.gmail.com with ESMTPSA id g70-20020a636b49000000b003823dd39d41sm9376579pgc.64.2022.04.04.00.47.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 Apr 2022 00:47:27 -0700 (PDT) From: Muchun Song To: mike.kravetz@oracle.com, akpm@linux-foundation.org, david@redhat.com Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org, smuchun@bytedance.com, Muchun Song Subject: [PATCH 3/3] mm: hugetlb_vmemmap: cleanup CONFIG_HUGETLB_PAGE_FREE_VMEMMAP* Date: Mon, 4 Apr 2022 15:46:52 +0800 Message-Id: <20220404074652.68024-4-songmuchun@bytedance.com> X-Mailer: git-send-email 2.32.0 (Apple Git-132) In-Reply-To: <20220404074652.68024-1-songmuchun@bytedance.com> References: <20220404074652.68024-1-songmuchun@bytedance.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" The word of "free" is not expressive enough to express the feature of optim= izing vmemmap pages associated with each HugeTLB, rename this keywork to "optimez= e". In this patch , cheanup configs to make code more expressive. Signed-off-by: Muchun Song Acked-by: Mike Kravetz --- Documentation/admin-guide/kernel-parameters.txt | 4 ++-- Documentation/admin-guide/mm/hugetlbpage.rst | 2 +- arch/arm64/Kconfig | 2 +- arch/arm64/mm/flush.c | 2 +- arch/x86/Kconfig | 2 +- arch/x86/mm/init_64.c | 2 +- fs/Kconfig | 16 ++++++++-------- include/linux/hugetlb.h | 2 +- include/linux/mm.h | 2 +- include/linux/page-flags.h | 6 +++--- mm/Makefile | 2 +- mm/hugetlb_vmemmap.c | 4 ++-- mm/hugetlb_vmemmap.h | 4 ++-- mm/sparse-vmemmap.c | 4 ++-- 14 files changed, 27 insertions(+), 27 deletions(-) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentatio= n/admin-guide/kernel-parameters.txt index 56edbe3f458f..89a58ac49d5f 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -1660,7 +1660,7 @@ Format: size[KMG] =20 hugetlb_free_vmemmap=3D - [KNL] Reguires CONFIG_HUGETLB_PAGE_FREE_VMEMMAP + [KNL] Reguires CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP enabled. Allows heavy hugetlb users to free up some more memory (7 * PAGE_SIZE for each 2MB hugetlb page). @@ -1669,7 +1669,7 @@ on: enable the feature off: disable the feature =20 - Built with CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON=3Dy, + Built with CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON=3Dy, the default is on. =20 This is not compatible with memory_hotplug.memmap_on_memory. diff --git a/Documentation/admin-guide/mm/hugetlbpage.rst b/Documentation/a= dmin-guide/mm/hugetlbpage.rst index 0166f9de3428..a90330d0a837 100644 --- a/Documentation/admin-guide/mm/hugetlbpage.rst +++ b/Documentation/admin-guide/mm/hugetlbpage.rst @@ -164,7 +164,7 @@ default_hugepagesz will all result in 256 2M huge pages being allocated. Valid default huge page size is architecture dependent. hugetlb_free_vmemmap - When CONFIG_HUGETLB_PAGE_FREE_VMEMMAP is set, this enables freeing + When CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP is set, this enables optimizing unused vmemmap pages associated with each HugeTLB page. =20 When multiple huge page sizes are supported, ``/proc/sys/vm/nr_hugepages`` diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index bb7fc91d14f4..42ff6d3dbfb5 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -96,7 +96,7 @@ config ARM64 select ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT select ARCH_WANT_FRAME_POINTERS select ARCH_WANT_HUGE_PMD_SHARE if ARM64_4K_PAGES || (ARM64_16K_PAGES && = !ARM64_VA_BITS_36) - select ARCH_WANT_HUGETLB_PAGE_FREE_VMEMMAP + select ARCH_WANT_HUGETLB_PAGE_OPTIMIZE_VMEMMAP select ARCH_WANT_LD_ORPHAN_WARN select ARCH_WANTS_NO_INSTR select ARCH_HAS_UBSAN_SANITIZE_ALL diff --git a/arch/arm64/mm/flush.c b/arch/arm64/mm/flush.c index d19a13234a81..9e39598bbc21 100644 --- a/arch/arm64/mm/flush.c +++ b/arch/arm64/mm/flush.c @@ -78,7 +78,7 @@ void flush_dcache_page(struct page *page) /* * Only the head page's flags of HugeTLB can be cleared since the tail * vmemmap pages associated with each HugeTLB page are mapped with - * read-only when CONFIG_HUGETLB_PAGE_FREE_VMEMMAP is enabled (more + * read-only when CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP is enabled (more * details can refer to vmemmap_remap_pte()). Although * __sync_icache_dcache() only set PG_dcache_clean flag on the head * page struct, some tail page structs still can be seen the flag is diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index a4cc8dd871f2..7ec9a91e2386 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -121,7 +121,7 @@ config X86 select ARCH_WANTS_NO_INSTR select ARCH_WANT_GENERAL_HUGETLB select ARCH_WANT_HUGE_PMD_SHARE - select ARCH_WANT_HUGETLB_PAGE_FREE_VMEMMAP if X86_64 + select ARCH_WANT_HUGETLB_PAGE_OPTIMIZE_VMEMMAP if X86_64 select ARCH_WANT_LD_ORPHAN_WARN select ARCH_WANTS_THP_SWAP if X86_64 select ARCH_HAS_PARANOID_L1D_FLUSH diff --git a/arch/x86/mm/init_64.c b/arch/x86/mm/init_64.c index 96d34ebb20a9..af34dd1510d6 100644 --- a/arch/x86/mm/init_64.c +++ b/arch/x86/mm/init_64.c @@ -1269,7 +1269,7 @@ static struct kcore_list kcore_vsyscall; =20 static void __init register_page_bootmem_info(void) { -#if defined(CONFIG_NUMA) || defined(CONFIG_HUGETLB_PAGE_FREE_VMEMMAP) +#if defined(CONFIG_NUMA) || defined(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP) int i; =20 for_each_online_node(i) diff --git a/fs/Kconfig b/fs/Kconfig index 8f6ab1cf5115..5976eb33535f 100644 --- a/fs/Kconfig +++ b/fs/Kconfig @@ -250,22 +250,22 @@ config HUGETLB_PAGE # to enable the feature of minimizing overhead of struct page associated w= ith # each HugeTLB page. # -config ARCH_WANT_HUGETLB_PAGE_FREE_VMEMMAP +config ARCH_WANT_HUGETLB_PAGE_OPTIMIZE_VMEMMAP bool =20 -config HUGETLB_PAGE_FREE_VMEMMAP +config HUGETLB_PAGE_OPTIMIZE_VMEMMAP def_bool HUGETLB_PAGE - depends on ARCH_WANT_HUGETLB_PAGE_FREE_VMEMMAP + depends on ARCH_WANT_HUGETLB_PAGE_OPTIMIZE_VMEMMAP depends on SPARSEMEM_VMEMMAP =20 -config HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON - bool "Default freeing vmemmap pages of HugeTLB to on" +config HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON + bool "Default optimizing vmemmap pages of HugeTLB to on" default n - depends on HUGETLB_PAGE_FREE_VMEMMAP + depends on HUGETLB_PAGE_OPTIMIZE_VMEMMAP help - When using HUGETLB_PAGE_FREE_VMEMMAP, the freeing unused vmemmap + When using HUGETLB_PAGE_OPTIMIZE_VMEMMAP, the optimizing unused vmemmap pages associated with each HugeTLB page is default off. Say Y here - to enable freeing vmemmap pages of HugeTLB by default. It can then + to enable optimizing vmemmap pages of HugeTLB by default. It can then be disabled on the command line via hugetlb_free_vmemmap=3Doff. =20 config MEMFD_CREATE diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h index c16fbb1228a3..c40dda4daf51 100644 --- a/include/linux/hugetlb.h +++ b/include/linux/hugetlb.h @@ -617,7 +617,7 @@ struct hstate { unsigned int nr_huge_pages_node[MAX_NUMNODES]; unsigned int free_huge_pages_node[MAX_NUMNODES]; unsigned int surplus_huge_pages_node[MAX_NUMNODES]; -#ifdef CONFIG_HUGETLB_PAGE_FREE_VMEMMAP +#ifdef CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP unsigned int optimize_vmemmap_pages; #endif #ifdef CONFIG_CGROUP_HUGETLB diff --git a/include/linux/mm.h b/include/linux/mm.h index 26428ff262fc..75f7d309a9cf 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -3188,7 +3188,7 @@ static inline void print_vma_addr(char *prefix, unsig= ned long rip) } #endif =20 -#ifdef CONFIG_HUGETLB_PAGE_FREE_VMEMMAP +#ifdef CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP int vmemmap_remap_free(unsigned long start, unsigned long end, unsigned long reuse); int vmemmap_remap_alloc(unsigned long start, unsigned long end, diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h index 557d15ef3dc0..b70124b9c7c1 100644 --- a/include/linux/page-flags.h +++ b/include/linux/page-flags.h @@ -199,13 +199,13 @@ enum pageflags { =20 #ifndef __GENERATING_BOUNDS_H =20 -#ifdef CONFIG_HUGETLB_PAGE_FREE_VMEMMAP -DECLARE_STATIC_KEY_MAYBE(CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON, +#ifdef CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP +DECLARE_STATIC_KEY_MAYBE(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON, hugetlb_optimize_vmemmap_key); =20 static __always_inline bool hugetlb_optimize_vmemmap_enabled(void) { - return static_branch_maybe(CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON, + return static_branch_maybe(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_O= N, &hugetlb_optimize_vmemmap_key); } =20 diff --git a/mm/Makefile b/mm/Makefile index 4cc13f3179a5..6f9ffa968a1a 100644 --- a/mm/Makefile +++ b/mm/Makefile @@ -77,7 +77,7 @@ obj-$(CONFIG_FRONTSWAP) +=3D frontswap.o obj-$(CONFIG_ZSWAP) +=3D zswap.o obj-$(CONFIG_HAS_DMA) +=3D dmapool.o obj-$(CONFIG_HUGETLBFS) +=3D hugetlb.o -obj-$(CONFIG_HUGETLB_PAGE_FREE_VMEMMAP) +=3D hugetlb_vmemmap.o +obj-$(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP) +=3D hugetlb_vmemmap.o obj-$(CONFIG_NUMA) +=3D mempolicy.o obj-$(CONFIG_SPARSEMEM) +=3D sparse.o obj-$(CONFIG_SPARSEMEM_VMEMMAP) +=3D sparse-vmemmap.o diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c index f25294973398..2655434a946b 100644 --- a/mm/hugetlb_vmemmap.c +++ b/mm/hugetlb_vmemmap.c @@ -188,7 +188,7 @@ #define RESERVE_VMEMMAP_NR 1U #define RESERVE_VMEMMAP_SIZE (RESERVE_VMEMMAP_NR << PAGE_SHIFT) =20 -DEFINE_STATIC_KEY_MAYBE(CONFIG_HUGETLB_PAGE_FREE_VMEMMAP_DEFAULT_ON, +DEFINE_STATIC_KEY_MAYBE(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP_DEFAULT_ON, hugetlb_optimize_vmemmap_key); EXPORT_SYMBOL(hugetlb_optimize_vmemmap_key); =20 @@ -276,7 +276,7 @@ void __init hugetlb_vmemmap_init(struct hstate *h) =20 /* * There are only (RESERVE_VMEMMAP_SIZE / sizeof(struct page)) struct - * page structs that can be used when CONFIG_HUGETLB_PAGE_FREE_VMEMMAP, + * page structs that can be used when CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMA= P, * so add a BUILD_BUG_ON to catch invalid usage of the tail struct page. */ BUILD_BUG_ON(__NR_USED_SUBPAGE >=3D diff --git a/mm/hugetlb_vmemmap.h b/mm/hugetlb_vmemmap.h index 9760537849b5..109b0a53b6fe 100644 --- a/mm/hugetlb_vmemmap.h +++ b/mm/hugetlb_vmemmap.h @@ -10,7 +10,7 @@ #define _LINUX_HUGETLB_VMEMMAP_H #include =20 -#ifdef CONFIG_HUGETLB_PAGE_FREE_VMEMMAP +#ifdef CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP int hugetlb_vmemmap_alloc(struct hstate *h, struct page *head); void hugetlb_vmemmap_free(struct hstate *h, struct page *head); void hugetlb_vmemmap_init(struct hstate *h); @@ -41,5 +41,5 @@ static inline unsigned int hugetlb_optimize_vmemmap_pages= (struct hstate *h) { return 0; } -#endif /* CONFIG_HUGETLB_PAGE_FREE_VMEMMAP */ +#endif /* CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP */ #endif /* _LINUX_HUGETLB_VMEMMAP_H */ diff --git a/mm/sparse-vmemmap.c b/mm/sparse-vmemmap.c index 8aecd6b3896c..52f36527bab3 100644 --- a/mm/sparse-vmemmap.c +++ b/mm/sparse-vmemmap.c @@ -34,7 +34,7 @@ #include #include =20 -#ifdef CONFIG_HUGETLB_PAGE_FREE_VMEMMAP +#ifdef CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP /** * struct vmemmap_remap_walk - walk vmemmap page table * @@ -420,7 +420,7 @@ int vmemmap_remap_alloc(unsigned long start, unsigned l= ong end, =20 return 0; } -#endif /* CONFIG_HUGETLB_PAGE_FREE_VMEMMAP */ +#endif /* CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP */ =20 /* * Allocate a block of memory to be used to back the virtual memory map --=20 2.11.0