diff options
author | Mark Brown <broonie@kernel.org> | 2014-10-10 12:55:50 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2014-10-10 12:55:50 +0100 |
commit | f8ba86b7fbe99740c82a7442a0c94e7584dd02bf (patch) | |
tree | bfe82e7b0c48e50b34a0d3cfdd0c02dd8b7737f4 /mm | |
parent | 0ee8bb9c4864ee826e6c669f230562cd0fed8722 (diff) | |
parent | f41c15f2c9a00489735036846ec7e474e52b14a6 (diff) |
Merge tag 'v3.10.57' into linux-linaro-lsk
This is the 3.10.57 stable release
Diffstat (limited to 'mm')
-rw-r--r-- | mm/huge_memory.c | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/mm/huge_memory.c b/mm/huge_memory.c index eb00e81601a5..d21c9ef0943c 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -1733,21 +1733,24 @@ static int __split_huge_page_map(struct page *page, if (pmd) { pgtable = pgtable_trans_huge_withdraw(mm); pmd_populate(mm, &_pmd, pgtable); + if (pmd_write(*pmd)) + BUG_ON(page_mapcount(page) != 1); haddr = address; for (i = 0; i < HPAGE_PMD_NR; i++, haddr += PAGE_SIZE) { pte_t *pte, entry; BUG_ON(PageCompound(page+i)); + /* + * Note that pmd_numa is not transferred deliberately + * to avoid any possibility that pte_numa leaks to + * a PROT_NONE VMA by accident. + */ entry = mk_pte(page + i, vma->vm_page_prot); entry = maybe_mkwrite(pte_mkdirty(entry), vma); if (!pmd_write(*pmd)) entry = pte_wrprotect(entry); - else - BUG_ON(page_mapcount(page) != 1); if (!pmd_young(*pmd)) entry = pte_mkold(entry); - if (pmd_numa(*pmd)) - entry = pte_mknuma(entry); pte = pte_offset_map(&_pmd, haddr); BUG_ON(!pte_none(*pte)); set_pte_at(mm, haddr, pte, entry); |