Messages in this thread Patch in this message | | | Date | Thu, 2 Oct 2014 19:35:43 +0300 | From | "Kirill A. Shutemov" <> | Subject | Re: pipe/page fault oddness. |
| |
On Thu, Oct 02, 2014 at 09:01:38AM -0700, Linus Torvalds wrote: > On Thu, Oct 2, 2014 at 7:25 AM, Kirill A. Shutemov <kirill@shutemov.name> wrote: > > > > I don't see what prevents the code to make zero page writable here. > > We need at least pmd = pmd_wrprotect(pmd) before set_pmd_at(); > > Do we? If it's the zero page, it had better be an anonymous mapping, > and vm_page_prot had better not be writable. > > Anonymous pages don't _start_ out writable, we explicitly make them so > with code like > > if (vma->vm_flags & VM_WRITE) > entry = pte_mkwrite(pte_mkdirty(entry)); > > so it should be fine to just use "pmd_modify(pmd, vma->vm_page_prot);" directly. > > But hey, this is the kind of thing that maybe I'm missing something on..
You're right. It means we have redundant pmd_wrprotect() in set_huge_zero_page().
==========================================================================
Subject: [PATCH] thp: do not mark zero-page pmd write-protected explicitly
Zero pages can be used only in anonymous mappings, which never have writable vma->vm_page_prot: see protection_map in mm/mmap.c and __PX1X definitions.
Let's drop redundant pmd_wrprotect() in set_huge_zero_page().
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> --- mm/huge_memory.c | 1 - 1 file changed, 1 deletion(-)
diff --git a/mm/huge_memory.c b/mm/huge_memory.c index d9a21d06b862..2c17d184b56d 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -784,7 +784,6 @@ static bool set_huge_zero_page(pgtable_t pgtable, struct mm_struct *mm, if (!pmd_none(*pmd)) return false; entry = mk_pmd(zero_page, vma->vm_page_prot); - entry = pmd_wrprotect(entry); entry = pmd_mkhuge(entry); pgtable_trans_huge_deposit(mm, pmd, pgtable); set_pmd_at(mm, haddr, pmd, entry); -- Kirill A. Shutemov
| |