From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 12FDCC88E64 for ; Mon, 14 Sep 2026 07:52:04 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 1D5C26B009B; Mon, 14 Sep 2026 03:52:03 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 1ADCF6B009D; Mon, 14 Sep 2026 03:52:03 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 0C4516B009E; Mon, 14 Sep 2026 03:52:03 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0011.hostedemail.com [216.40.44.11]) by kanga.kvack.org (Postfix) with ESMTP id CA7596B009B for ; Mon, 14 Sep 2026 03:52:02 -0400 (EDT) Received: from smtpin26.hostedemail.com (lb01a-stub [10.200.18.249]) by unirelay05.hostedemail.com (Postfix) with ESMTP id 4C9F84116D for ; Mon, 14 Sep 2026 07:52:02 +0000 (UTC) X-FDA: 85211599284.26.E526FF0 Received: from mta0.migadu.com (out-12.mta0.migadu.com [91.218.175.12]) by imf05.hostedemail.com (Postfix) with ESMTP id E61CD100007 for ; Mon, 14 Sep 2026 07:51:59 +0000 (UTC) Authentication-Results: imf05.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=BwcSvFdE; spf=pass (imf05.hostedemail.com: domain of muchun.song@linux.dev designates 91.218.175.12 as permitted sender) smtp.mailfrom=muchun.song@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Seal: i=1; a=rsa-sha256; d=hostedemail.com; s=arc-20220608; cv=none; t=1789372320; b=LzEMH4T2YUmgV7G1f2CGcJ388zsKrjmoVxgvo3yboIVnAjFGXzGLkF9+UBvWOEvoBQyeSF QUwXWQZMvObo4u5vKS9ATjlDaaCsrsN7vRhGPRM7vNZOLYIbmS4HjWaBb5SoRCfpFfszFQ SFVgaUiJTz/gMc8+xyn+yc14yMFoIOI= ARC-Authentication-Results: i=1; imf05.hostedemail.com; dkim=pass header.d=linux.dev header.s=key1 header.b=BwcSvFdE; spf=pass (imf05.hostedemail.com: domain of muchun.song@linux.dev designates 91.218.175.12 as permitted sender) smtp.mailfrom=muchun.song@linux.dev; dmarc=pass (policy=none) header.from=linux.dev ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1789372320; 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=KZA90kbLQ1wUmr27u9GbyrLVr6ugUDDJBQ4ttjd6f5Q=; b=CoWPjko4oaw8HYgB25tIFXbjFGqKEEDQUhm5s9BUMAWPI41Riq+vKkGRHmtp4g9kG8YWtm QLBszZXt1PwK0+2lQeVlwkY7auNgUyiTZKc0SzFz8+C/1PV04fW/+C/4RlkdD1S70jwdcJ NCfcH+mof5+Ik9CQvGIbK4IWbyh+TSw= X-Envelope-To: linux-mm@kvack.org DKIM-Signature: a=rsa-sha256; bh=nXlIXZyzZAmUaaXn6/AG1Qoa90qlZRNpDV2IZ5Xt6I8=; c=simple/simple; d=linux.dev; h=from:to:subject:date:message-id:mime-version:content-type; s=key1; t=1789372317; v=1; x=1789977117; b=BwcSvFdElIUHCrFEATDcx/wtsn0aU0ZDfA152keO1eLQwSqs7cgfZjS6XOj/O2ewQoTZk+NR vu0Rr6gGGPGWkmw1sN4Cz1OpiABBGEKw4wxU4B61n5wXki9xHdFycd2PvCiIAM/OllaDj3VeFwh tI56Kt+FFaGgM9I1Cu4XAT8Y= X-Envelope-To: linux-mm@kvack.org Received: by mta10.migadu.com with ESMTPS id 7f6bbc8e5bf97846; Mon, 14 Sep 2026 07:51:57 +0000 X-Mizu-Trace-ID: 7f6bbc8e5bf97846 X-Migadu-Flow: FLOW_OUT Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 16.0 \(3864.700.51.1.1\)) Subject: Re: [PATCH v3 01/11] mm/sparse-vmemmap: introduce CONFIG_SPARSEMEM_VMEMMAP_OPTIMIZATION From: Muchun Song In-Reply-To: <178937209455.4188640.17761540933640972197.b4-review@b4> Date: Mon, 14 Sep 2026 15:51:40 +0800 Cc: Muchun Song , Andrew Morton , David Hildenbrand , Oscar Salvador , Madhavan Srinivasan , Michael Ellerman , Jonathan Corbet , linux-mm@kvack.org, linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-doc@vger.kernel.org, Lorenzo Stoakes , Qi Zheng , Nicholas Piggin , Christophe Leroy , Randy Dunlap Content-Transfer-Encoding: quoted-printable Message-Id: <42F502DE-9DEE-447B-9323-0CBB2300FAFE@linux.dev> References: <20260911050228.58884-1-songmuchun@bytedance.com> <20260911050228.58884-2-songmuchun@bytedance.com> <178937209455.4188640.17761540933640972197.b4-review@b4> To: Mike Rapoport X-Mailer: Apple Mail (2.3864.700.51.1.1) X-Rspamd-Server: rspam12 X-Rspamd-Queue-Id: E61CD100007 X-Rspam-User: X-Stat-Signature: uuwyiu1uqhoyawi5mqgbu9ce4twa16h8 X-HE-Tag: 1789372319-196555 X-HE-Meta: U2FsdGVkX1+2tvVGFwdcfnUy9oeuoqWtbli6OQURfOf9LaMCyTDE0fFlo3Zu/lQzhFx+/2aUMYBv3D8h1w+qzxTdneVjNfK/NRCpZriAzLrMrYudFsV+UEDQmmb6W8Ht845rvgYF/6dus7+d1u96Ai1tffxppqL6c8rKYPbnF6xZr/MthMEf+4yeo1ScVvV2Xh6YnEFUWFiXWp0dKcc5wjZlkdNvdccB7yvNnd7D2EX9Zo9oHHk3vkQq+cya7+qV4NyL3KOEU3aIOTHY/3siPzlv3p0Eek1UtA8p1Vq+o3X7b68ONcrSq0RFg3BGWV2/8IyR3r8/y6u4ti3kfXPjaW4h8U5lDfTmHNBVNYwXxhFiz8KwOQpdVnwxOGkzj3tRr8snJqSjd677owaIVW1mBH5IrDcq0T1qWWU0yuJIhx8VDYODBKFFvnSMkkrOoKYdxN95y2gqmBx2DRiMcbutG8dbK/pnCRkmFOT6KqLEMpSVKIeWzBPUE9Qv3+VZ60pe70GPdFCQxGfvn7MEXlpqJMQG/cQX9X6XiHUqt/tCvXlY0srUehbz2kERrKi7N00FPRx30GAe+N6xn0UtT78jksrNtJdj5ie3a6u8bOad3M+6RgHTCH182eMPrxqRdoMFq0/qPCClYzODedqlN5xzxhNLfDICEF8ykU6HpVx4Zs6PdBg8lhsQjesQZn7mtPs+bZ4SVy1NTD268HsWU/ln6d3koJ6yJX7KgklwpHdW+yb+hhpual/15/C/oH0CW2b7LxEC5gAxc1L1OJ8zCM6jJBYKCWQ+r1Y2tXjjRv5BGQBtBiA+L5IomAtkPeg0ep0wyGPB0f90oZdN8jWG/WMbCLU+xWC7hs21Cef+ZT0ImeIQN13awwG5S2YW10znUEz02njvNvoaHVoiqylTxQBNE2YUhstCepCQGA+BpcuXEO4J3LNSZvzvOJSAeGQFE2tFzgwLLwmfid+lgnnSg4h izXyrRo6 zT9JpM/5+tbPhSCJIABM4UNDIuAIzO647X09tOnSNGuEIOxs9lXvCPcPoU3NDoCsFYjpra2xZRIw0cA6n12QaXnGvg2l6Bru4DDmHesJ8usX5lMR9Zn3rszqJPrL3zCzxaX3cCrHFXAmRPGYh61Y/ba7iYuc1IlBG918vtc0mH7mljqxT4XTPv3L1sKfx6x1EdNkoc90LVBPFjq1gDHkXZfUU0GESN2K+jl7w/8N8Doi5K1Y0OeDQbMt5ULzVN+WwzDS+sPfXaR6p+MA9crCFLSNPS43DQ1cxPHLsuN20iSZhcHJ7mX4CH4KgDaTHwM5foAxSCxbF8ofsnoeVvpu+2e3nFMXyX8a8cPsbyDfO6HWUN2k= Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: > On Sep 14, 2026, at 15:48, Mike Rapoport wrote: >=20 > Hi, Hi, >=20 >> The section-based vmemmap optimization infrastructure is still = guarded by >> CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP, but it also can be used by = device >> DAX. Introduce CONFIG_SPARSEMEM_VMEMMAP_OPTIMIZATION as a common = config >=20 > CONFIG_SPARSEMEM_VMEMMAP_OPTIMIZATION is a bit mouthful :) >=20 > I think that dropping _SPARSEMEM won't hurt readability. Yes, I'll simplify it in v4. >=20 >> for the shared infrastructure. >>=20 >> Select the new option from HUGETLB_PAGE_OPTIMIZE_VMEMMAP and from >> DEV_DAX when the architecture opts in to DAX vmemmap optimization, = and >> use it to guard the generic sparse-vmemmap state and helpers. >>=20 >> Signed-off-by: Muchun Song >> Acked-by: Qi Zheng >>=20 >> diff --git a/arch/x86/entry/vdso/vdso32/fake_32bit_build.h = b/arch/x86/entry/vdso/vdso32/fake_32bit_build.h >> index bc3e549795c3f..5f8424eade2bd 100644 >> --- a/arch/x86/entry/vdso/vdso32/fake_32bit_build.h >> +++ b/arch/x86/entry/vdso/vdso32/fake_32bit_build.h >> @@ -11,7 +11,7 @@ >> #undef CONFIG_PGTABLE_LEVELS >> #undef CONFIG_ILLEGAL_POINTER_VALUE >> #undef CONFIG_SPARSEMEM_VMEMMAP >> -#undef CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP >> +#undef CONFIG_SPARSEMEM_VMEMMAP_OPTIMIZATION >> #undef CONFIG_NR_CPUS >> #undef CONFIG_PARAVIRT_XXL >>=20 >> diff --git a/drivers/dax/Kconfig b/drivers/dax/Kconfig >> index 602f9a0839a91..6250954b0fa7a 100644 >> --- a/drivers/dax/Kconfig >> +++ b/drivers/dax/Kconfig >> @@ -8,6 +8,8 @@ if DAX >> config DEV_DAX >> tristate "Device DAX: direct access mapping device" >> depends on TRANSPARENT_HUGEPAGE >> + depends on ZONE_DEVICE >> + select SPARSEMEM_VMEMMAP_OPTIMIZATION if = ARCH_WANT_OPTIMIZE_DAX_VMEMMAP >> help >> Support raw access to differentiated (persistence, bandwidth, >> latency...) memory via an mmap(2) capable character >> diff --git a/fs/Kconfig b/fs/Kconfig >> index d1c210c6508f0..9b32ce79cc805 100644 >> --- a/fs/Kconfig >> +++ b/fs/Kconfig >> @@ -278,6 +278,7 @@ config HUGETLB_PAGE_OPTIMIZE_VMEMMAP >> def_bool HUGETLB_PAGE >> depends on ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP >> depends on SPARSEMEM_VMEMMAP >> + select SPARSEMEM_VMEMMAP_OPTIMIZATION >>=20 >> config HUGETLB_PMD_PAGE_TABLE_SHARING >> def_bool HUGETLB_PAGE >> diff --git a/include/linux/mm.h b/include/linux/mm.h >> index c49ef99b4413b..a2ebe87e76546 100644 >> --- a/include/linux/mm.h >> +++ b/include/linux/mm.h >> @@ -5175,6 +5175,9 @@ static inline bool = __vmemmap_can_optimize(struct vmem_altmap *altmap, >> unsigned long nr_pages; >> unsigned long nr_vmemmap_pages; >>=20 >> + if (!IS_ENABLED(CONFIG_SPARSEMEM_VMEMMAP_OPTIMIZATION)) >> + return false; >> + >> if (!pgmap || !is_power_of_2(sizeof(struct page))) >> return false; >>=20 >> diff --git a/include/linux/mmzone.h b/include/linux/mmzone.h >> index acd94cecc0d39..97511f651ebc0 100644 >> --- a/include/linux/mmzone.h >> +++ b/include/linux/mmzone.h >> @@ -102,9 +102,9 @@ >> * >> * HVO which is only active if the size of struct page is a power of = 2. >> */ >> -#define MAX_FOLIO_VMEMMAP_ALIGN \ >> - (IS_ENABLED(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP) && \ >> - is_power_of_2(sizeof(struct page)) ? \ >> +#define MAX_FOLIO_VMEMMAP_ALIGN \ >> + (IS_ENABLED(CONFIG_SPARSEMEM_VMEMMAP_OPTIMIZATION) && \ >> + is_power_of_2(sizeof(struct page)) ? \ >> MAX_FOLIO_NR_PAGES * sizeof(struct page) : 0) >>=20 >> /* The number of retained vmemmap pages with HVO enabled. */ >> @@ -116,7 +116,8 @@ >> #define __VMEMMAP_OPTIMIZATION_NR_ORDERS \ >> (MAX_FOLIO_ORDER - VMEMMAP_OPTIMIZATION_MIN_ORDER + 1) >> #define VMEMMAP_OPTIMIZATION_NR_ORDERS \ >> - (__VMEMMAP_OPTIMIZATION_NR_ORDERS > 0 ? = __VMEMMAP_OPTIMIZATION_NR_ORDERS : 0) >> + ((__VMEMMAP_OPTIMIZATION_NR_ORDERS > 0 && \ >> + IS_ENABLED(CONFIG_SPARSEMEM_VMEMMAP_OPTIMIZATION)) ? = __VMEMMAP_OPTIMIZATION_NR_ORDERS : 0) >>=20 >> enum migratetype { >> MIGRATE_UNMOVABLE, >> @@ -1155,7 +1156,7 @@ struct zone { >> /* Zone statistics */ >> atomic_long_t vm_stat[NR_VM_ZONE_STAT_ITEMS]; >> atomic_long_t vm_numa_event[NR_VM_NUMA_EVENT_ITEMS]; >> -#ifdef CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP >> +#ifdef CONFIG_SPARSEMEM_VMEMMAP_OPTIMIZATION >> struct page *vmemmap_tails[VMEMMAP_OPTIMIZATION_NR_ORDERS]; >> #endif >> } ____cacheline_internodealigned_in_smp; >> @@ -2019,7 +2020,7 @@ struct mem_section { >> unsigned long section_mem_map; >>=20 >> struct mem_section_usage *usage; >> -#ifdef CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP >> +#ifdef CONFIG_SPARSEMEM_VMEMMAP_OPTIMIZATION >> /* >> * Normally, sections hold regular (order-0) pages. However, for >> * sections with HVO enabled, this tracks the compound page order >> diff --git a/include/linux/page-flags.h b/include/linux/page-flags.h >> index 86dd0470da117..462e89e055485 100644 >> --- a/include/linux/page-flags.h >> +++ b/include/linux/page-flags.h >> @@ -208,14 +208,13 @@ enum pageflags { >> static __always_inline bool compound_info_has_mask(void) >> { >> /* >> - * Limit mask usage to HugeTLB vmemmap optimization (HVO) where it >> - * makes a difference. >> + * Limit mask usage to HVO where it makes a difference. >> * >> * The approach with mask would work in the wider set of conditions, >> * but it requires validating that struct pages are naturally aligned >> * for all orders up to the MAX_FOLIO_ORDER, which can be tricky. >> */ >> - if (!IS_ENABLED(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP)) >> + if (!IS_ENABLED(CONFIG_SPARSEMEM_VMEMMAP_OPTIMIZATION)) >> return false; >>=20 >> return is_power_of_2(sizeof(struct page)); >> diff --git a/mm/Kconfig b/mm/Kconfig >> index bc7befafb47b5..c180d40cd6712 100644 >> --- a/mm/Kconfig >> +++ b/mm/Kconfig >> @@ -461,6 +461,10 @@ config SPARSEMEM_VMEMMAP >> pfn_to_page and page_to_pfn operations. This is the most >> efficient option when sufficient kernel resources are available. >>=20 >> +config SPARSEMEM_VMEMMAP_OPTIMIZATION >> + bool >> + depends on SPARSEMEM_VMEMMAP >> + >> # >> # Select this config option from the architecture Kconfig, if it is = preferred >> # to enable the feature of HugeTLB/dev_dax vmemmap optimization. >> diff --git a/mm/sparse.h b/mm/sparse.h >> index d3a71ef4fad0f..3151d4db75753 100644 >> --- a/mm/sparse.h >> +++ b/mm/sparse.h >> @@ -10,7 +10,7 @@ >>=20 >> #include >>=20 >> -#ifdef CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP >> +#ifdef CONFIG_SPARSEMEM_VMEMMAP_OPTIMIZATION >> static inline unsigned int section_compound_order(const struct = mem_section *section) >> { >> return section->compound_page_order; >> @@ -75,7 +75,7 @@ static inline bool vmemmap_optimizable_pfn(unsigned = long pfn) >>=20 >> static inline bool vmemmap_optimizable_order(unsigned int order) >> { >> - if (!IS_ENABLED(CONFIG_HUGETLB_PAGE_OPTIMIZE_VMEMMAP)) >> + if (!IS_ENABLED(CONFIG_SPARSEMEM_VMEMMAP_OPTIMIZATION)) >> return false; >>=20 >> if (!is_power_of_2(sizeof(struct page))) >=20 > Acked-by: Mike Rapoport (Microsoft) Thank you Mike. >=20 > --=20 > Sincerely yours, > Mike. >=20