aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mm/hugetlbpage.c5
-rw-r--r--arch/arm64/mm/hugetlbpage.c5
-rw-r--r--arch/ia64/mm/hugetlbpage.c5
-rw-r--r--arch/metag/mm/hugetlbpage.c5
-rw-r--r--arch/mips/mm/hugetlbpage.c5
-rw-r--r--arch/powerpc/mm/hugetlbpage.c10
-rw-r--r--arch/s390/mm/hugetlbpage.c5
-rw-r--r--arch/sh/mm/hugetlbpage.c5
-rw-r--r--arch/sparc/mm/hugetlbpage.c5
-rw-r--r--arch/tile/mm/hugetlbpage.c5
-rw-r--r--arch/x86/Kconfig4
-rw-r--r--arch/x86/mm/hugetlbpage.c10
-rw-r--r--include/linux/hugetlb.h13
-rw-r--r--include/linux/mempolicy.h6
-rw-r--r--mm/Kconfig3
15 files changed, 18 insertions, 73 deletions
diff --git a/arch/arm/mm/hugetlbpage.c b/arch/arm/mm/hugetlbpage.c
index 54ee6163c181..66781bf34077 100644
--- a/arch/arm/mm/hugetlbpage.c
+++ b/arch/arm/mm/hugetlbpage.c
@@ -56,8 +56,3 @@ int pmd_huge(pmd_t pmd)
56{ 56{
57 return pmd_val(pmd) && !(pmd_val(pmd) & PMD_TABLE_BIT); 57 return pmd_val(pmd) && !(pmd_val(pmd) & PMD_TABLE_BIT);
58} 58}
59
60int pmd_huge_support(void)
61{
62 return 1;
63}
diff --git a/arch/arm64/mm/hugetlbpage.c b/arch/arm64/mm/hugetlbpage.c
index 31eb959e9aa8..023747bf4dd7 100644
--- a/arch/arm64/mm/hugetlbpage.c
+++ b/arch/arm64/mm/hugetlbpage.c
@@ -58,11 +58,6 @@ int pud_huge(pud_t pud)
58#endif 58#endif
59} 59}
60 60
61int pmd_huge_support(void)
62{
63 return 1;
64}
65
66static __init int setup_hugepagesz(char *opt) 61static __init int setup_hugepagesz(char *opt)
67{ 62{
68 unsigned long ps = memparse(opt, &opt); 63 unsigned long ps = memparse(opt, &opt);
diff --git a/arch/ia64/mm/hugetlbpage.c b/arch/ia64/mm/hugetlbpage.c
index 68232db98baa..76069c18ee42 100644
--- a/arch/ia64/mm/hugetlbpage.c
+++ b/arch/ia64/mm/hugetlbpage.c
@@ -114,11 +114,6 @@ int pud_huge(pud_t pud)
114 return 0; 114 return 0;
115} 115}
116 116
117int pmd_huge_support(void)
118{
119 return 0;
120}
121
122struct page * 117struct page *
123follow_huge_pmd(struct mm_struct *mm, unsigned long address, pmd_t *pmd, int write) 118follow_huge_pmd(struct mm_struct *mm, unsigned long address, pmd_t *pmd, int write)
124{ 119{
diff --git a/arch/metag/mm/hugetlbpage.c b/arch/metag/mm/hugetlbpage.c
index 042431509b56..3c52fa6d0f8e 100644
--- a/arch/metag/mm/hugetlbpage.c
+++ b/arch/metag/mm/hugetlbpage.c
@@ -110,11 +110,6 @@ int pud_huge(pud_t pud)
110 return 0; 110 return 0;
111} 111}
112 112
113int pmd_huge_support(void)
114{
115 return 1;
116}
117
118struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, 113struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
119 pmd_t *pmd, int write) 114 pmd_t *pmd, int write)
120{ 115{
diff --git a/arch/mips/mm/hugetlbpage.c b/arch/mips/mm/hugetlbpage.c
index 77e0ae036e7c..4ec8ee10d371 100644
--- a/arch/mips/mm/hugetlbpage.c
+++ b/arch/mips/mm/hugetlbpage.c
@@ -84,11 +84,6 @@ int pud_huge(pud_t pud)
84 return (pud_val(pud) & _PAGE_HUGE) != 0; 84 return (pud_val(pud) & _PAGE_HUGE) != 0;
85} 85}
86 86
87int pmd_huge_support(void)
88{
89 return 1;
90}
91
92struct page * 87struct page *
93follow_huge_pmd(struct mm_struct *mm, unsigned long address, 88follow_huge_pmd(struct mm_struct *mm, unsigned long address,
94 pmd_t *pmd, int write) 89 pmd_t *pmd, int write)
diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
index eb923654ba80..7e70ae968e5f 100644
--- a/arch/powerpc/mm/hugetlbpage.c
+++ b/arch/powerpc/mm/hugetlbpage.c
@@ -86,11 +86,6 @@ int pgd_huge(pgd_t pgd)
86 */ 86 */
87 return ((pgd_val(pgd) & 0x3) != 0x0); 87 return ((pgd_val(pgd) & 0x3) != 0x0);
88} 88}
89
90int pmd_huge_support(void)
91{
92 return 1;
93}
94#else 89#else
95int pmd_huge(pmd_t pmd) 90int pmd_huge(pmd_t pmd)
96{ 91{
@@ -106,11 +101,6 @@ int pgd_huge(pgd_t pgd)
106{ 101{
107 return 0; 102 return 0;
108} 103}
109
110int pmd_huge_support(void)
111{
112 return 0;
113}
114#endif 104#endif
115 105
116pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr) 106pte_t *huge_pte_offset(struct mm_struct *mm, unsigned long addr)
diff --git a/arch/s390/mm/hugetlbpage.c b/arch/s390/mm/hugetlbpage.c
index 0727a55d87d9..0ff66a7e29bb 100644
--- a/arch/s390/mm/hugetlbpage.c
+++ b/arch/s390/mm/hugetlbpage.c
@@ -220,11 +220,6 @@ int pud_huge(pud_t pud)
220 return 0; 220 return 0;
221} 221}
222 222
223int pmd_huge_support(void)
224{
225 return 1;
226}
227
228struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, 223struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
229 pmd_t *pmdp, int write) 224 pmd_t *pmdp, int write)
230{ 225{
diff --git a/arch/sh/mm/hugetlbpage.c b/arch/sh/mm/hugetlbpage.c
index 0d676a41081e..d7762349ea48 100644
--- a/arch/sh/mm/hugetlbpage.c
+++ b/arch/sh/mm/hugetlbpage.c
@@ -83,11 +83,6 @@ int pud_huge(pud_t pud)
83 return 0; 83 return 0;
84} 84}
85 85
86int pmd_huge_support(void)
87{
88 return 0;
89}
90
91struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, 86struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
92 pmd_t *pmd, int write) 87 pmd_t *pmd, int write)
93{ 88{
diff --git a/arch/sparc/mm/hugetlbpage.c b/arch/sparc/mm/hugetlbpage.c
index 9bd9ce80bf77..d329537739c6 100644
--- a/arch/sparc/mm/hugetlbpage.c
+++ b/arch/sparc/mm/hugetlbpage.c
@@ -231,11 +231,6 @@ int pud_huge(pud_t pud)
231 return 0; 231 return 0;
232} 232}
233 233
234int pmd_huge_support(void)
235{
236 return 0;
237}
238
239struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, 234struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
240 pmd_t *pmd, int write) 235 pmd_t *pmd, int write)
241{ 236{
diff --git a/arch/tile/mm/hugetlbpage.c b/arch/tile/mm/hugetlbpage.c
index 0cb3bbaa580c..e514899e1100 100644
--- a/arch/tile/mm/hugetlbpage.c
+++ b/arch/tile/mm/hugetlbpage.c
@@ -166,11 +166,6 @@ int pud_huge(pud_t pud)
166 return !!(pud_val(pud) & _PAGE_HUGE_PAGE); 166 return !!(pud_val(pud) & _PAGE_HUGE_PAGE);
167} 167}
168 168
169int pmd_huge_support(void)
170{
171 return 1;
172}
173
174struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address, 169struct page *follow_huge_pmd(struct mm_struct *mm, unsigned long address,
175 pmd_t *pmd, int write) 170 pmd_t *pmd, int write)
176{ 171{
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 7d5feb5908dd..e41b258ad040 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -1873,6 +1873,10 @@ config ARCH_ENABLE_SPLIT_PMD_PTLOCK
1873 def_bool y 1873 def_bool y
1874 depends on X86_64 || X86_PAE 1874 depends on X86_64 || X86_PAE
1875 1875
1876config ARCH_ENABLE_HUGEPAGE_MIGRATION
1877 def_bool y
1878 depends on X86_64 && HUGETLB_PAGE && MIGRATION
1879
1876menu "Power management and ACPI options" 1880menu "Power management and ACPI options"
1877 1881
1878config ARCH_HIBERNATION_HEADER 1882config ARCH_HIBERNATION_HEADER
diff --git a/arch/x86/mm/hugetlbpage.c b/arch/x86/mm/hugetlbpage.c
index 8c9f647ff9e1..8b977ebf9388 100644
--- a/arch/x86/mm/hugetlbpage.c
+++ b/arch/x86/mm/hugetlbpage.c
@@ -58,11 +58,6 @@ follow_huge_pmd(struct mm_struct *mm, unsigned long address,
58{ 58{
59 return NULL; 59 return NULL;
60} 60}
61
62int pmd_huge_support(void)
63{
64 return 0;
65}
66#else 61#else
67 62
68struct page * 63struct page *
@@ -80,11 +75,6 @@ int pud_huge(pud_t pud)
80{ 75{
81 return !!(pud_val(pud) & _PAGE_PSE); 76 return !!(pud_val(pud) & _PAGE_PSE);
82} 77}
83
84int pmd_huge_support(void)
85{
86 return 1;
87}
88#endif 78#endif
89 79
90#ifdef CONFIG_HUGETLB_PAGE 80#ifdef CONFIG_HUGETLB_PAGE
diff --git a/include/linux/hugetlb.h b/include/linux/hugetlb.h
index b65166de1d9d..d0bad1a8b0bd 100644
--- a/include/linux/hugetlb.h
+++ b/include/linux/hugetlb.h
@@ -392,15 +392,13 @@ static inline pgoff_t basepage_index(struct page *page)
392 392
393extern void dissolve_free_huge_pages(unsigned long start_pfn, 393extern void dissolve_free_huge_pages(unsigned long start_pfn,
394 unsigned long end_pfn); 394 unsigned long end_pfn);
395int pmd_huge_support(void);
396/*
397 * Currently hugepage migration is enabled only for pmd-based hugepage.
398 * This function will be updated when hugepage migration is more widely
399 * supported.
400 */
401static inline int hugepage_migration_support(struct hstate *h) 395static inline int hugepage_migration_support(struct hstate *h)
402{ 396{
403 return pmd_huge_support() && (huge_page_shift(h) == PMD_SHIFT); 397#ifdef CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION
398 return huge_page_shift(h) == PMD_SHIFT;
399#else
400 return 0;
401#endif
404} 402}
405 403
406static inline spinlock_t *huge_pte_lockptr(struct hstate *h, 404static inline spinlock_t *huge_pte_lockptr(struct hstate *h,
@@ -450,7 +448,6 @@ static inline pgoff_t basepage_index(struct page *page)
450 return page->index; 448 return page->index;
451} 449}
452#define dissolve_free_huge_pages(s, e) do {} while (0) 450#define dissolve_free_huge_pages(s, e) do {} while (0)
453#define pmd_huge_support() 0
454#define hugepage_migration_support(h) 0 451#define hugepage_migration_support(h) 0
455 452
456static inline spinlock_t *huge_pte_lockptr(struct hstate *h, 453static inline spinlock_t *huge_pte_lockptr(struct hstate *h,
diff --git a/include/linux/mempolicy.h b/include/linux/mempolicy.h
index 3c1b968da0ca..f230a978e6ba 100644
--- a/include/linux/mempolicy.h
+++ b/include/linux/mempolicy.h
@@ -175,6 +175,12 @@ static inline int vma_migratable(struct vm_area_struct *vma)
175{ 175{
176 if (vma->vm_flags & (VM_IO | VM_PFNMAP)) 176 if (vma->vm_flags & (VM_IO | VM_PFNMAP))
177 return 0; 177 return 0;
178
179#ifndef CONFIG_ARCH_ENABLE_HUGEPAGE_MIGRATION
180 if (vma->vm_flags & VM_HUGETLB)
181 return 0;
182#endif
183
178 /* 184 /*
179 * Migration allocates pages in the highest zone. If we cannot 185 * Migration allocates pages in the highest zone. If we cannot
180 * do so then migration (at least from node to node) is not 186 * do so then migration (at least from node to node) is not
diff --git a/mm/Kconfig b/mm/Kconfig
index 28cec518f4d4..75ac479cbacd 100644
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -267,6 +267,9 @@ config MIGRATION
267 pages as migration can relocate pages to satisfy a huge page 267 pages as migration can relocate pages to satisfy a huge page
268 allocation instead of reclaiming. 268 allocation instead of reclaiming.
269 269
270config ARCH_ENABLE_HUGEPAGE_MIGRATION
271 boolean
272
270config PHYS_ADDR_T_64BIT 273config PHYS_ADDR_T_64BIT
271 def_bool 64BIT || ARCH_PHYS_ADDR_T_64BIT 274 def_bool 64BIT || ARCH_PHYS_ADDR_T_64BIT
272 275