[PATCH] arm64: mm: hugetlb: Disable HUGETLB_PAGE_OPTIMIZE_VMEMMAP

Anshuman Khandual anshuman.khandual at arm.com
Wed Feb 22 19:22:33 PST 2023



On 2/22/23 23:22, Catalin Marinas wrote:
> Revert the HUGETLB_PAGE_FREE_VMEMMAP selection from commit 1e63ac088f20
> ("arm64: mm: hugetlb: enable HUGETLB_PAGE_FREE_VMEMMAP for arm64") but
> keep the flush_dcache_page() compound_head() change as it aligns with
> the corresponding check in the __sync_icache_dcache() function.
> 
> The original config option was renamed in commit 47010c040dec ("mm:
> hugetlb_vmemmap: cleanup CONFIG_HUGETLB_PAGE_FREE_VMEMMAP*") to
> HUGETLB_PAGE_OPTIMIZE_VMEMMAP and the flush_dcache_page() check was
> further simplified by commit 2da1c30929a2 ("mm: hugetlb_vmemmap: delete
> hugetlb_optimize_vmemmap_enabled()").
> 
> The reason for the revert is that the generic vmemmap_remap_pte()
> function changes both the permissions (writeable to read-only) and the
> output address (pfn) of the vmemmap ptes. This is deemed UNPREDICTABLE
> by the Arm architecture without a break-before-make sequence (make the
> PTE invalid, TLBI, write the new valid PTE). However, such sequence is
> not possible since the vmemmap may be concurrently accessed by the
> kernel. Disable the optimisation until a better solution is found.
> 
> Signed-off-by: Catalin Marinas <catalin.marinas at arm.com>
> Fixes: 1e63ac088f20 ("arm64: mm: hugetlb: enable HUGETLB_PAGE_FREE_VMEMMAP for arm64")
> Cc: <stable at vger.kernel.org> # 5.19.x
> Cc: Muchun Song <muchun.song at linux.dev>
> Cc: Will Deacon <will at kernel.org>
> Cc: Anshuman Khandual <anshuman.khandual at arm.com>
> Link: https://lore.kernel.org/r/Y9pZALdn3pKiJUeQ@arm.com

As per earlier discussions, this LGTM.

Reviewed-by: Anshuman Khandual <anshuman.khandual at arm.com>

> ---
>  arch/arm64/Kconfig | 1 -
>  1 file changed, 1 deletion(-)
> 
> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
> index 619ab046744a..71c35178e017 100644
> --- a/arch/arm64/Kconfig
> +++ b/arch/arm64/Kconfig
> @@ -100,7 +100,6 @@ 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_OPTIMIZE_VMEMMAP
>  	select ARCH_WANT_LD_ORPHAN_WARN
>  	select ARCH_WANTS_NO_INSTR
>  	select ARCH_WANTS_THP_SWAP if ARM64_4K_PAGES
> 
> base-commit: b61b82f81e095fe265b0614045d17b08e6ee5c72



More information about the linux-arm-kernel mailing list