Hi Zi, >> Add a config option STATIC_PMD_ZERO_PAGE that will always allocate the huge_zero_folio via >> memblock, and it will never be freed. > > Do the above users want a PMD sized zero page or a 2MB zero page? Because on systems with non > 4KB base page size, e.g., ARM64 with 64KB base page, PMD size is different. ARM64 with 64KB base > page has 512MB PMD sized pages. Having STATIC_PMD_ZERO_PAGE means losing half GB memory. I am > not sure if it is acceptable. > That is a good point. My intial RFC patches allocated 2M instead of a PMD sized page. But later David wanted to reuse the memory we allocate here with huge_zero_folio. So if this config is enabled, we simply just use the same pointer for huge_zero_folio. Since that happened, I decided to go with PMD sized page. This config is still opt in and I would expect the users with 64k page size systems to not enable this. But to make sure we don't enable this for those architecture, I could do a per-arch opt in with something like this[1] that I did in my previous patch: diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 340e5468980e..c3a9d136ec0a 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -153,6 +153,7 @@ config X86 select ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP if X86_64 select ARCH_WANT_HUGETLB_VMEMMAP_PREINIT if X86_64 select ARCH_WANTS_THP_SWAP if X86_64 + select ARCH_HAS_STATIC_PMD_ZERO_PAGE if X86_64 select ARCH_HAS_PARANOID_L1D_FLUSH select ARCH_WANT_IRQS_OFF_ACTIVATE_MM select BUILDTIME_TABLE_SORT diff --git a/mm/Kconfig b/mm/Kconfig index 781be3240e21..fd1c51995029 100644 --- a/mm/Kconfig +++ b/mm/Kconfig @@ -826,6 +826,19 @@ config ARCH_WANTS_THP_SWAP config MM_ID def_bool n +config ARCH_HAS_STATIC_PMD_ZERO_PAGE + def_bool n + +config STATIC_PMD_ZERO_PAGE + bool "Allocate a PMD page for zeroing" + depends on ARCH_HAS_STATIC_PMD_ZERO_PAGE <snip> Let me know your thoughts. [1] https://lore.kernel.org/linux-mm/20250612105100.59144-4-p.raghav@xxxxxxxxxxx/#Z31mm:Kconfig -- Pankaj