]> Git Repo - linux.git/commitdiff
mm/hugetlb: use pmd_page() in follow_huge_pmd()
authorGerald Schaefer <[email protected]>
Tue, 14 Apr 2015 22:42:30 +0000 (15:42 -0700)
committerLinus Torvalds <[email protected]>
Tue, 14 Apr 2015 23:48:56 +0000 (16:48 -0700)
Commit 61f77eda9bbf ("mm/hugetlb: reduce arch dependent code around
follow_huge_*") broke follow_huge_pmd() on s390, where pmd and pte
layout differ and using pte_page() on a huge pmd will return wrong
results.  Using pmd_page() instead fixes this.

All architectures that were touched by that commit have pmd_page()
defined, so this should not break anything on other architectures.

Fixes: 61f77eda "mm/hugetlb: reduce arch dependent code around follow_huge_*"
Signed-off-by: Gerald Schaefer <[email protected]>
Acked-by: Naoya Horiguchi <[email protected]>
Cc: Hugh Dickins <[email protected]>
Cc: Michal Hocko <[email protected]>, Andrea Arcangeli <[email protected]>
Cc: Martin Schwidefsky <[email protected]>
Acked-by: David Rientjes <[email protected]>
Cc: <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
mm/hugetlb.c

index c41b2a0ee2736e4f7df74c440ceb90bd5fcceecb..caad3c5a926fe434bccaea33b6bc781938757e50 100644 (file)
@@ -3735,8 +3735,7 @@ retry:
        if (!pmd_huge(*pmd))
                goto out;
        if (pmd_present(*pmd)) {
-               page = pte_page(*(pte_t *)pmd) +
-                       ((address & ~PMD_MASK) >> PAGE_SHIFT);
+               page = pmd_page(*pmd) + ((address & ~PMD_MASK) >> PAGE_SHIFT);
                if (flags & FOLL_GET)
                        get_page(page);
        } else {
This page took 0.066511 seconds and 4 git commands to generate.