|
@@ -235,6 +235,14 @@ void assert_pte_locked(struct mm_struct *mm, unsigned long addr)
|
|
|
pud = pud_offset(pgd, addr);
|
|
|
BUG_ON(pud_none(*pud));
|
|
|
pmd = pmd_offset(pud, addr);
|
|
|
+ /*
|
|
|
+ * khugepaged to collapse normal pages to hugepage, first set
|
|
|
+ * pmd to none to force page fault/gup to take mmap_sem. After
|
|
|
+ * pmd is set to none, we do a pte_clear which does this assertion
|
|
|
+ * so if we find pmd none, return.
|
|
|
+ */
|
|
|
+ if (pmd_none(*pmd))
|
|
|
+ return;
|
|
|
BUG_ON(!pmd_present(*pmd));
|
|
|
assert_spin_locked(pte_lockptr(mm, pmd));
|
|
|
}
|