diff options
Diffstat (limited to 'mm/huge_memory.c')
| -rw-r--r-- | mm/huge_memory.c | 7 | 
1 files changed, 6 insertions, 1 deletions
diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 03a89a2f464..362c329b83f 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -2325,7 +2325,12 @@ static void collapse_huge_page(struct mm_struct *mm,  		pte_unmap(pte);  		spin_lock(&mm->page_table_lock);  		BUG_ON(!pmd_none(*pmd)); -		set_pmd_at(mm, address, pmd, _pmd); +		/* +		 * We can only use set_pmd_at when establishing +		 * hugepmds and never for establishing regular pmds that +		 * points to regular pagetables. Use pmd_populate for that +		 */ +		pmd_populate(mm, pmd, pmd_pgtable(_pmd));  		spin_unlock(&mm->page_table_lock);  		anon_vma_unlock_write(vma->anon_vma);  		goto out;  |