From: Hugh Dickins Date: Thu, 13 Jan 2011 23:46:52 +0000 (-0800) Subject: thp: transparent hugepage core fixlet X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=8a07651ee8cdaa9e27cb4ae372aed347533770f5;p=GitHub%2FLineageOS%2Fandroid_kernel_motorola_exynos9610.git thp: transparent hugepage core fixlet If you configure THP in addition to HUGETLB_PAGE on x86_32 without PAE, the p?d-folding works out that munlock_vma_pages_range() can crash to follow_page()'s pud_huge() BUG_ON(flags & FOLL_GET): it needs the same VM_HUGETLB check already there on the pmd_huge() line. Conveniently, openSUSE provides a "blogd" which tests this out at startup! Signed-off-by: Hugh Dickins Cc: Rik van Riel Cc: Johannes Weiner Cc: Andrea Arcangeli Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/mm/memory.c b/mm/memory.c index c50a195041ec..840ce9d98f8b 100644 --- a/mm/memory.c +++ b/mm/memory.c @@ -1288,7 +1288,7 @@ struct page *follow_page(struct vm_area_struct *vma, unsigned long address, pud = pud_offset(pgd, address); if (pud_none(*pud)) goto no_page_table; - if (pud_huge(*pud)) { + if (pud_huge(*pud) && vma->vm_flags & VM_HUGETLB) { BUG_ON(flags & FOLL_GET); page = follow_huge_pud(mm, address, pud, flags & FOLL_WRITE); goto out;