forked from mirrors/linux
		
	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
					
				
					 2 changed files with 25 additions and 0 deletions
				
			
		| 
						 | 
					@ -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 a new issue