aboutsummaryrefslogtreecommitdiffstats
path: root/mm/huge_memory.c
diff options
context:
space:
mode:
authorJohannes Weiner <hannes@cmpxchg.org>2011-01-13 18:47:02 -0500
committerLinus Torvalds <torvalds@linux-foundation.org>2011-01-13 20:32:44 -0500
commit0ca1634d4143c3579273ca53b993df19f5c98e92 (patch)
treed566a582357a9e1528d1783566bfda4375c7e566 /mm/huge_memory.c
parentf2d6bfe9ff0acec30b713614260e78b03d20e909 (diff)
thp: mincore transparent hugepage support
Handle transparent huge page pmd entries natively instead of splitting them into subpages. Signed-off-by: Johannes Weiner <hannes@cmpxchg.org> Signed-off-by: Andrea Arcangeli <aarcange@redhat.com> Reviewed-by: Rik van Riel <riel@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'mm/huge_memory.c')
-rw-r--r--mm/huge_memory.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index ae2bf08b1099..37e89a32a0b1 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -923,6 +923,31 @@ int zap_huge_pmd(struct mmu_gather *tlb, struct vm_area_struct *vma,
923 return ret; 923 return ret;
924} 924}
925 925
926int mincore_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,
927 unsigned long addr, unsigned long end,
928 unsigned char *vec)
929{
930 int ret = 0;
931
932 spin_lock(&vma->vm_mm->page_table_lock);
933 if (likely(pmd_trans_huge(*pmd))) {
934 ret = !pmd_trans_splitting(*pmd);
935 spin_unlock(&vma->vm_mm->page_table_lock);
936 if (unlikely(!ret))
937 wait_split_huge_page(vma->anon_vma, pmd);
938 else {
939 /*
940 * All logical pages in the range are present
941 * if backed by a huge page.
942 */
943 memset(vec, 1, (end - addr) >> PAGE_SHIFT);
944 }
945 } else
946 spin_unlock(&vma->vm_mm->page_table_lock);
947
948 return ret;
949}
950
926pmd_t *page_check_address_pmd(struct page *page, 951pmd_t *page_check_address_pmd(struct page *page,
927 struct mm_struct *mm, 952 struct mm_struct *mm,
928 unsigned long address, 953 unsigned long address,