mirror of https://gitee.com/openkylin/linux.git
arm64/mm: enable HugeTLB migration for contiguous bit HugeTLB pages
Let arm64 subscribe to the previously added framework in which architecture can inform whether a given huge page size is supported for migration. This just overrides the default function arch_hugetlb_migration_supported() and enables migration for all possible HugeTLB page sizes on arm64. With this, HugeTLB migration support on arm64 now covers all possible HugeTLB options. CONT PTE PMD CONT PMD PUD -------- --- -------- --- 4K: 64K 2M 32M 1G 16K: 2M 32M 1G 64K: 2M 512M 16G Link: http://lkml.kernel.org/r/1545121450-1663-6-git-send-email-anshuman.khandual@arm.com Signed-off-by: Anshuman Khandual <anshuman.khandual@arm.com> Reviewed-by: Naoya Horiguchi <n-horiguchi@ah.jp.nec.com> Reviewed-by: Steve Capper <steve.capper@arm.com> Acked-by: Catalin Marinas <catalin.marinas@arm.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: Michal Hocko <mhocko@suse.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
4a03a058d1
commit
5480280d3f
|
@ -20,6 +20,11 @@
|
||||||
|
|
||||||
#include <asm/page.h>
|
#include <asm/page.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION
|
||||||
|
#define arch_hugetlb_migration_supported arch_hugetlb_migration_supported
|
||||||
|
extern bool arch_hugetlb_migration_supported(struct hstate *h);
|
||||||
|
#endif
|
||||||
|
|
||||||
#define __HAVE_ARCH_HUGE_PTEP_GET
|
#define __HAVE_ARCH_HUGE_PTEP_GET
|
||||||
static inline pte_t huge_ptep_get(pte_t *ptep)
|
static inline pte_t huge_ptep_get(pte_t *ptep)
|
||||||
{
|
{
|
||||||
|
|
|
@ -27,6 +27,26 @@
|
||||||
#include <asm/tlbflush.h>
|
#include <asm/tlbflush.h>
|
||||||
#include <asm/pgalloc.h>
|
#include <asm/pgalloc.h>
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION
|
||||||
|
bool arch_hugetlb_migration_supported(struct hstate *h)
|
||||||
|
{
|
||||||
|
size_t pagesize = huge_page_size(h);
|
||||||
|
|
||||||
|
switch (pagesize) {
|
||||||
|
#ifdef CONFIG_ARM64_4K_PAGES
|
||||||
|
case PUD_SIZE:
|
||||||
|
#endif
|
||||||
|
case PMD_SIZE:
|
||||||
|
case CONT_PMD_SIZE:
|
||||||
|
case CONT_PTE_SIZE:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
pr_warn("%s: unrecognized huge page size 0x%lx\n",
|
||||||
|
__func__, pagesize);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
int pmd_huge(pmd_t pmd)
|
int pmd_huge(pmd_t pmd)
|
||||||
{
|
{
|
||||||
return pmd_val(pmd) && !(pmd_val(pmd) & PMD_TABLE_BIT);
|
return pmd_val(pmd) && !(pmd_val(pmd) & PMD_TABLE_BIT);
|
||||||
|
|
Loading…
Reference in New Issue