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>