Re: [PATCH 2/2] arm64/mm: Enable THP migration

From: Catalin Marinas
Date: Thu Sep 03 2020 - 12:59:00 EST


On Mon, Aug 17, 2020 at 02:49:44PM +0530, Anshuman Khandual wrote:
> In certain page migration situations, a THP page can be migrated without
> being split into it's constituent subpages. This saves time required to
> split a THP and put it back together when required. But it also saves an
> wider address range translation covered by a single TLB entry, reducing
> future page fault costs.
>
> A previous patch changed platform THP helpers per generic memory semantics,
> clearing the path for THP migration support. This adds two more THP helpers
> required to create PMD migration swap entries. Now just enable HP migration

s/HP/THP/

> via ARCH_ENABLE_THP_MIGRATION.
>
> Cc: Catalin Marinas <catalin.marinas@xxxxxxx>
> Cc: Will Deacon <will@xxxxxxxxxx>
> Cc: Mark Rutland <mark.rutland@xxxxxxx>
> Cc: Marc Zyngier <maz@xxxxxxxxxx>
> Cc: Suzuki Poulose <suzuki.poulose@xxxxxxx>
> Cc: linux-arm-kernel@xxxxxxxxxxxxxxxxxxx
> Cc: linux-kernel@xxxxxxxxxxxxxxx
> Signed-off-by: Anshuman Khandual <anshuman.khandual@xxxxxxx>
> ---
> arch/arm64/Kconfig | 4 ++++
> arch/arm64/include/asm/pgtable.h | 5 +++++
> 2 files changed, 9 insertions(+)
>
> diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
> index 6d232837cbee..e21b94061780 100644
> --- a/arch/arm64/Kconfig
> +++ b/arch/arm64/Kconfig
> @@ -1876,6 +1876,10 @@ config ARCH_ENABLE_HUGEPAGE_MIGRATION
> def_bool y
> depends on HUGETLB_PAGE && MIGRATION
>
> +config ARCH_ENABLE_THP_MIGRATION
> + def_bool y
> + depends on TRANSPARENT_HUGEPAGE
> +
> menu "Power management options"
>
> source "kernel/power/Kconfig"
> diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pgtable.h
> index 7aa69cace784..c54334bca4e2 100644
> --- a/arch/arm64/include/asm/pgtable.h
> +++ b/arch/arm64/include/asm/pgtable.h
> @@ -875,6 +875,11 @@ static inline pmd_t pmdp_establish(struct vm_area_struct *vma,
> #define __pte_to_swp_entry(pte) ((swp_entry_t) { pte_val(pte) })
> #define __swp_entry_to_pte(swp) ((pte_t) { (swp).val })
>
> +#ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION
> +#define __pmd_to_swp_entry(pmd) ((swp_entry_t) { pmd_val(pmd) })
> +#define __swp_entry_to_pmd(swp) __pmd((swp).val)
> +#endif /* CONFIG_ARCH_ENABLE_THP_MIGRATION */

Reviewed-by: Catalin Marinas <catalin.marinas@xxxxxxx>