Now that HVO is architecturally sound for arm64, enable support. Add a new Kconfig for this support, as it comes with a regression, described below. Add a comment about BBML2_NOABORT where HVO is relying on it. If a late-onlined CPU does not support HVO (HW AF and BBML2_NOABORT) while all boot CPUs do support HVO, the late CPU won't be onlined after this commit when a kernel is compiled with HUGETLB_PAGE_OPTIMIZE_VMEMMAP=y. Signed-off-by: James Houghton --- arch/arm64/Kconfig | 12 ++++++++++++ mm/hugetlb_vmemmap.c | 4 ++++ 2 files changed, 16 insertions(+) diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig index b3afe0688919..cf4bd6bd7f11 100644 --- a/arch/arm64/Kconfig +++ b/arch/arm64/Kconfig @@ -259,6 +259,7 @@ config ARM64 select USER_STACKTRACE_SUPPORT select VDSO_GETRANDOM select VMAP_STACK + select ARCH_WANT_OPTIMIZE_HUGETLB_VMEMMAP if ARM64_WANT_OPTIMIZE_HUGETLB_VMEMMAP help ARM 64-bit (AArch64) Linux support. @@ -1607,6 +1608,17 @@ config ARCH_SPARSEMEM_ENABLE def_bool y select SPARSEMEM_VMEMMAP_ENABLE +config ARM64_WANT_OPTIMIZE_HUGETLB_VMEMMAP + bool "Enable support for HugeTLB Vmemmap Optimization (HVO)" + default n + depends on HUGETLB_PAGE && SPARSEMEM_VMEMMAP && ARM64_HW_AFDBM + help + Enable support for HVO. When enabled, late-onlining of CPUs that do + not support features required by HVO will not be onlined if all boot + CPUs do have such support. + + If unsure, say N + config HW_PERF_EVENTS def_bool y depends on ARM_PMU diff --git a/mm/hugetlb_vmemmap.c b/mm/hugetlb_vmemmap.c index 21377f795293..977249e22ed0 100644 --- a/mm/hugetlb_vmemmap.c +++ b/mm/hugetlb_vmemmap.c @@ -86,6 +86,10 @@ static int vmemmap_split_pmd(pmd_t *pmd, struct page *head, unsigned long start, /* Make pte visible before pmd. See comment in pmd_install(). */ smp_wmb(); + /* + * On arm64, this requires BBML2_NOABORT. Its support has + * already been checked. + */ pmd_populate_kernel(&init_mm, pmd, pgtable); if (!(walk->flags & VMEMMAP_SPLIT_NO_TLB_FLUSH)) flush_tlb_kernel_range(start, start + PMD_SIZE); -- 2.55.0.795.g602f6c329a-goog