All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jerome Glisse <j.glisse@gmail.com>
To: Shaohua Li <shli@fb.com>
Cc: linux-mm@kvack.org, kernel-team@fb.com,
	Andrew Morton <akpm@linux-foundation.org>,
	Andrea Arcangeli <aarcange@redhat.com>,
	Pavel Emelyanov <xemul@parallels.com>,
	Rik van Riel <riel@redhat.com>,
	"Kirill A. Shutemov" <kirill@shutemov.name>,
	Mel Gorman <mgorman@suse.de>, Hugh Dickins <hughd@google.com>,
	Johannes Weiner <hannes@cmpxchg.org>
Subject: Re: [RFC 6/8] userfaultfd: hook userfault handler to write protection fault
Date: Thu, 19 Nov 2015 21:54:13 -0500	[thread overview]
Message-ID: <20151120025403.GA3093@gmail.com> (raw)
In-Reply-To: <8b39e7027b26de92477a83d8145e22eb5f3b6989.1447964595.git.shli@fb.com>

On Thu, Nov 19, 2015 at 02:33:51PM -0800, Shaohua Li wrote:
> There are several cases write protection fault happens. It could be a write
> to zero page, swaped page or userfault write protected page. When the
> fault happens, there is no way to know if userfault write protect the
> page before. Here we just blindly issue a userfault notification for vma
> with VM_UFFD_WP regardless if app write protects it yet. Application
> should be ready to handle such wp fault.
> 
> Cc: Andrea Arcangeli <aarcange@redhat.com>
> Cc: Pavel Emelyanov <xemul@parallels.com>
> Cc: Rik van Riel <riel@redhat.com>
> Cc: Kirill A. Shutemov <kirill@shutemov.name>
> Cc: Mel Gorman <mgorman@suse.de>
> Cc: Hugh Dickins <hughd@google.com>
> Cc: Johannes Weiner <hannes@cmpxchg.org>
> Signed-off-by: Shaohua Li <shli@fb.com>
> ---
>  mm/memory.c | 66 +++++++++++++++++++++++++++++++++++++++++++++----------------
>  1 file changed, 49 insertions(+), 17 deletions(-)
> 
> diff --git a/mm/memory.c b/mm/memory.c
> index deb679c..5d16a31 100644
> --- a/mm/memory.c
> +++ b/mm/memory.c
> @@ -1994,10 +1994,11 @@ static inline int wp_page_reuse(struct mm_struct *mm,
>  			struct vm_area_struct *vma, unsigned long address,
>  			pte_t *page_table, spinlock_t *ptl, pte_t orig_pte,
>  			struct page *page, int page_mkwrite,
> -			int dirty_shared)
> +			int dirty_shared, unsigned int flags)
>  	__releases(ptl)
>  {
>  	pte_t entry;
> +	bool do_uffd = false;
>  	/*
>  	 * Clear the pages cpupid information as the existing
>  	 * information potentially belongs to a now completely
> @@ -2008,10 +2009,16 @@ static inline int wp_page_reuse(struct mm_struct *mm,
>  
>  	flush_cache_page(vma, address, pte_pfn(orig_pte));
>  	entry = pte_mkyoung(orig_pte);
> -	entry = maybe_mkwrite(pte_mkdirty(entry), vma);
> +	if (userfaultfd_wp(vma) && page) {
> +		entry = pte_mkdirty(entry);


Why do you pte_mkdirty() it makes no sense to me unless i am missing something.
In fact, IIRC, userfaultd is only concerning private anonymous vma so you should
only need to modify 3 places. do_anonymous_page(), do_swap_page() and do_wp_page()

You also want to hook in wp_huge_pmd() and __do_huge_pmd_anonymous_page() to
properly cover THP.

So i think you need to simplify this patch and make sure you handle THP properly.

Cheers,
Jerome

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

  reply	other threads:[~2015-11-20  2:54 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-19 22:33 [RFC 0/8] userfaultfd: add write protect support Shaohua Li
2015-11-19 22:33 ` [RFC 1/8] userfaultfd: add helper for writeprotect check Shaohua Li
2015-11-19 22:33 ` [RFC 2/8] userfaultfd: support write protection for userfault vma range Shaohua Li
2016-04-14 21:07   ` Andrea Arcangeli
2015-11-19 22:33 ` [RFC 3/8] userfaultfd: expose writeprotect API to ioctl Shaohua Li
2015-11-19 22:33 ` [RFC 4/8] userfaultfd: allow userfaultfd register success with writeprotection Shaohua Li
2015-11-19 22:33 ` [RFC 5/8] userfaultfd: undo write proctection in unregister Shaohua Li
2015-11-19 22:33 ` [RFC 6/8] userfaultfd: hook userfault handler to write protection fault Shaohua Li
2015-11-20  2:54   ` Jerome Glisse [this message]
2015-11-19 22:33 ` [RFC 7/8] userfaultfd: fault try one more time Shaohua Li
2015-11-20  3:04   ` Jerome Glisse
2015-11-19 22:33 ` [RFC 8/8] userfaultfd: enabled write protection in userfaultfd API Shaohua Li
2015-11-20  3:13 ` [RFC 0/8] userfaultfd: add write protect support Jerome Glisse

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=20151120025403.GA3093@gmail.com \
    --to=j.glisse@gmail.com \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=hannes@cmpxchg.org \
    --cc=hughd@google.com \
    --cc=kernel-team@fb.com \
    --cc=kirill@shutemov.name \
    --cc=linux-mm@kvack.org \
    --cc=mgorman@suse.de \
    --cc=riel@redhat.com \
    --cc=shli@fb.com \
    --cc=xemul@parallels.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.