All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
To: David Rientjes <rientjes@google.com>,
	Andrew Morton <akpm@linux-foundation.org>
Cc: Andrea Arcangeli <aarcange@redhat.com>,
	linux-mm@kvack.org, Andi Kleen <ak@linux.intel.com>,
	"H. Peter Anvin" <hpa@linux.intel.com>,
	linux-kernel@vger.kernel.org,
	"Kirill A. Shutemov" <kirill@shutemov.name>
Subject: Re: [PATCH v5 05/11] thp: change_huge_pmd(): keep huge zero page write-protected
Date: Mon, 3 Dec 2012 11:53:16 +0200	[thread overview]
Message-ID: <20121203095316.GA16630@otc-wbsnb-06> (raw)
In-Reply-To: <20121120160040.GA15401@otc-wbsnb-06>

[-- Attachment #1: Type: text/plain, Size: 3111 bytes --]

On Tue, Nov 20, 2012 at 06:00:40PM +0200, Kirill A. Shutemov wrote:
> On Fri, Nov 16, 2012 at 12:10:39PM -0800, David Rientjes wrote:
> > On Fri, 16 Nov 2012, Kirill A. Shutemov wrote:
> > 
> > > > > > > diff --git a/mm/huge_memory.c b/mm/huge_memory.c
> > > > > > > index d767a7c..05490b3 100644
> > > > > > > --- a/mm/huge_memory.c
> > > > > > > +++ b/mm/huge_memory.c
> > > > > > > @@ -1259,6 +1259,8 @@ int change_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,
> > > > > > >  		pmd_t entry;
> > > > > > >  		entry = pmdp_get_and_clear(mm, addr, pmd);
> > > > > > >  		entry = pmd_modify(entry, newprot);
> > > > > > > +		if (is_huge_zero_pmd(entry))
> > > > > > > +			entry = pmd_wrprotect(entry);
> > > > > > >  		set_pmd_at(mm, addr, pmd, entry);
> > > > > > >  		spin_unlock(&vma->vm_mm->page_table_lock);
> > > > > > >  		ret = 1;
> > > > > > 
> > > > > > Nack, this should be handled in pmd_modify().
> > > > > 
> > > > > I disagree. It means we will have to enable hzp per arch. Bad idea.
> > > > > 
> > > > 
> > > > pmd_modify() only exists for those architectures with thp support already, 
> > > > so you've already implicitly enabled for all the necessary architectures 
> > > > with your patchset.
> > > 
> > > Now we have huge zero page fully implemented inside mm/huge_memory.c. Push
> > > this logic to pmd_modify() means we expose hzp implementation details to
> > > arch code. Looks ugly for me.
> > > 
> > 
> > So you are suggesting that anybody who ever does pmd_modify() in the 
> > future is responsible for knowing about the zero page and to protect 
> > against giving it write permission in the calling code??
> 
> Looks like we don't need the patch at all.
> 
> IIUC, if you ask for PROT_WRITE vm_get_page_prot() will translate it to
> _PAGE_COPY or similar and you'll only get the page writable on pagefault.
> 
> Could anybody confirm that it's correct?
> 
> -- 
>  Kirill A. Shutemov

Andrew, please drop the patch or replace it with the patch below, if you
wish.

From 048e3d4c97202cfecab55ead2a816421dce4b382 Mon Sep 17 00:00:00 2001
From: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Date: Tue, 7 Aug 2012 06:09:56 -0700
Subject: [PATCH] thp: change_huge_pmd(): make sure we don't try to make a
 page writable

mprotect core never tries to make page writable using change_huge_pmd().
Let's add an assert that the assumption is true. It's important to be
sure we will not make huge zero page writable.

Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com>
---
 mm/huge_memory.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/mm/huge_memory.c b/mm/huge_memory.c
index f5589c0..5fba83b 100644
--- a/mm/huge_memory.c
+++ b/mm/huge_memory.c
@@ -1245,6 +1245,7 @@ int change_huge_pmd(struct vm_area_struct *vma, pmd_t *pmd,
 		pmd_t entry;
 		entry = pmdp_get_and_clear(mm, addr, pmd);
 		entry = pmd_modify(entry, newprot);
+		BUG_ON(pmd_write(entry));
 		set_pmd_at(mm, addr, pmd, entry);
 		spin_unlock(&vma->vm_mm->page_table_lock);
 		ret = 1;
-- 
 Kirill A. Shutemov

[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 836 bytes --]

  reply	other threads:[~2012-12-03  9:52 UTC|newest]

Thread overview: 84+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2012-11-07 15:00 [PATCH v5 00/11] Introduce huge zero page Kirill A. Shutemov
2012-11-07 15:00 ` Kirill A. Shutemov
2012-11-07 15:00 ` [PATCH v5 01/11] thp: huge zero page: basic preparation Kirill A. Shutemov
2012-11-07 15:00   ` Kirill A. Shutemov
2012-11-14 22:09   ` David Rientjes
2012-11-14 22:09     ` David Rientjes
2012-11-07 15:00 ` [PATCH v5 02/11] thp: zap_huge_pmd(): zap huge zero pmd Kirill A. Shutemov
2012-11-07 15:00   ` Kirill A. Shutemov
2012-11-14 22:18   ` David Rientjes
2012-11-14 22:18     ` David Rientjes
2012-11-07 15:00 ` [PATCH v5 03/11] thp: copy_huge_pmd(): copy huge zero page Kirill A. Shutemov
2012-11-07 15:00   ` Kirill A. Shutemov
2012-11-14 22:33   ` David Rientjes
2012-11-14 22:33     ` David Rientjes
2012-11-15  8:01     ` Kirill A. Shutemov
2012-11-15  8:14       ` David Rientjes
2012-11-15  8:14         ` David Rientjes
2012-11-07 15:00 ` [PATCH v5 04/11] thp: do_huge_pmd_wp_page(): handle " Kirill A. Shutemov
2012-11-07 15:00   ` Kirill A. Shutemov
2012-11-14 23:08   ` David Rientjes
2012-11-14 23:08     ` David Rientjes
2012-11-15  8:29     ` Kirill A. Shutemov
2012-11-07 15:00 ` [PATCH v5 05/11] thp: change_huge_pmd(): keep huge zero page write-protected Kirill A. Shutemov
2012-11-07 15:00   ` Kirill A. Shutemov
2012-11-14 23:12   ` David Rientjes
2012-11-14 23:12     ` David Rientjes
2012-11-15  8:46     ` Kirill A. Shutemov
2012-11-15 21:47       ` David Rientjes
2012-11-15 21:47         ` David Rientjes
2012-11-16 18:13         ` Kirill A. Shutemov
2012-11-16 20:10           ` David Rientjes
2012-11-16 20:10             ` David Rientjes
2012-11-20 16:00             ` Kirill A. Shutemov
2012-12-03  9:53               ` Kirill A. Shutemov [this message]
2012-11-07 15:00 ` [PATCH v5 06/11] thp: change split_huge_page_pmd() interface Kirill A. Shutemov
2012-11-07 15:00   ` Kirill A. Shutemov
2012-11-14 23:22   ` David Rientjes
2012-11-14 23:22     ` David Rientjes
2012-11-15  8:52     ` Kirill A. Shutemov
2012-11-07 15:00 ` [PATCH v5 07/11] thp: implement splitting pmd for huge zero page Kirill A. Shutemov
2012-11-07 15:00   ` Kirill A. Shutemov
2012-11-14 23:28   ` David Rientjes
2012-11-14 23:28     ` David Rientjes
2012-11-15  9:24     ` Kirill A. Shutemov
2012-11-07 15:01 ` [PATCH v5 08/11] thp: setup huge zero page on non-write page fault Kirill A. Shutemov
2012-11-07 15:01   ` Kirill A. Shutemov
2012-11-14 23:33   ` David Rientjes
2012-11-14 23:33     ` David Rientjes
2012-11-15  9:32     ` Kirill A. Shutemov
2012-11-15 21:52       ` David Rientjes
2012-11-15 21:52         ` David Rientjes
2012-11-16 18:20         ` Kirill A. Shutemov
2012-11-07 15:01 ` [PATCH v5 09/11] thp: lazy huge zero page allocation Kirill A. Shutemov
2012-11-07 15:01   ` Kirill A. Shutemov
2012-11-14 23:37   ` David Rientjes
2012-11-14 23:37     ` David Rientjes
2012-11-15  9:41     ` Kirill A. Shutemov
2012-12-12 21:30       ` Andrew Morton
2012-12-12 21:30         ` Andrew Morton
2012-12-12 21:48         ` H. Peter Anvin
2012-12-12 21:48           ` H. Peter Anvin
2012-12-12 22:05           ` Kirill A. Shutemov
2012-11-07 15:01 ` [PATCH v5 10/11] thp: implement refcounting for huge zero page Kirill A. Shutemov
2012-11-07 15:01   ` Kirill A. Shutemov
2012-11-14 23:40   ` David Rientjes
2012-11-14 23:40     ` David Rientjes
2012-11-15  9:50     ` Kirill A. Shutemov
2012-11-07 15:01 ` [PATCH v5 11/11] thp, vmstat: implement HZP_ALLOC and HZP_ALLOC_FAILED events Kirill A. Shutemov
2012-11-07 15:01   ` Kirill A. Shutemov
2012-11-14 23:41   ` David Rientjes
2012-11-14 23:41     ` David Rientjes
2012-11-16 21:29     ` H. Peter Anvin
2012-11-16 21:29       ` H. Peter Anvin
2012-11-14 21:33 ` [PATCH v5 00/11] Introduce huge zero page Andrew Morton
2012-11-14 21:33   ` Andrew Morton
2012-11-14 23:20   ` Alan Cox
2012-11-14 23:20     ` Alan Cox
2012-11-14 23:32     ` Andrew Morton
2012-11-14 23:32       ` Andrew Morton
2012-11-14 23:51       ` H. Peter Anvin
2012-11-14 23:51         ` H. Peter Anvin
2012-11-15  0:29   ` David Rientjes
2012-11-15  0:29     ` David Rientjes
2012-11-15  7:29   ` Kirill A. Shutemov

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20121203095316.GA16630@otc-wbsnb-06 \
    --to=kirill.shutemov@linux.intel.com \
    --cc=aarcange@redhat.com \
    --cc=ak@linux.intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=hpa@linux.intel.com \
    --cc=kirill@shutemov.name \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=rientjes@google.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.