diff options
| author | Mel Gorman <mgorman@suse.de> | 2012-11-02 07:33:45 -0400 |
|---|---|---|
| committer | Mel Gorman <mgorman@suse.de> | 2012-12-11 09:42:42 -0500 |
| commit | 4daae3b4b9e49b7e0935499a352f1c59d90287d2 (patch) | |
| tree | 2ac600b955c89e3b1b2070110a9b7293a4511b19 /include | |
| parent | 149c33e1c98f83050870514f380902dc6d617bd5 (diff) | |
mm: mempolicy: Use _PAGE_NUMA to migrate pages
Note: Based on "mm/mpol: Use special PROT_NONE to migrate pages" but
sufficiently different that the signed-off-bys were dropped
Combine our previous _PAGE_NUMA, mpol_misplaced and migrate_misplaced_page()
pieces into an effective migrate on fault scheme.
Note that (on x86) we rely on PROT_NONE pages being !present and avoid
the TLB flush from try_to_unmap(TTU_MIGRATION). This greatly improves the
page-migration performance.
Based-on-work-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Mel Gorman <mgorman@suse.de>
Diffstat (limited to 'include')
| -rw-r--r-- | include/linux/huge_mm.h | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/include/linux/huge_mm.h b/include/linux/huge_mm.h index a1d26a98c655..dabb5108d6c0 100644 --- a/include/linux/huge_mm.h +++ b/include/linux/huge_mm.h | |||
| @@ -160,8 +160,8 @@ static inline struct page *compound_trans_head(struct page *page) | |||
| 160 | return page; | 160 | return page; |
| 161 | } | 161 | } |
| 162 | 162 | ||
| 163 | extern int do_huge_pmd_numa_page(struct mm_struct *mm, unsigned long addr, | 163 | extern int do_huge_pmd_numa_page(struct mm_struct *mm, struct vm_area_struct *vma, |
| 164 | pmd_t pmd, pmd_t *pmdp); | 164 | unsigned long addr, pmd_t pmd, pmd_t *pmdp); |
| 165 | 165 | ||
| 166 | #else /* CONFIG_TRANSPARENT_HUGEPAGE */ | 166 | #else /* CONFIG_TRANSPARENT_HUGEPAGE */ |
| 167 | #define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; }) | 167 | #define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; }) |
| @@ -200,9 +200,10 @@ static inline int pmd_trans_huge_lock(pmd_t *pmd, | |||
| 200 | return 0; | 200 | return 0; |
| 201 | } | 201 | } |
| 202 | 202 | ||
| 203 | static inline int do_huge_pmd_numa_page(struct mm_struct *mm, unsigned long addr, | 203 | static inline int do_huge_pmd_numa_page(struct mm_struct *mm, struct vm_area_struct *vma, |
| 204 | pmd_t pmd, pmd_t *pmdp) | 204 | unsigned long addr, pmd_t pmd, pmd_t *pmdp) |
| 205 | { | 205 | { |
| 206 | return 0; | ||
| 206 | } | 207 | } |
| 207 | 208 | ||
| 208 | #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ | 209 | #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ |
