All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Kravetz <mike.kravetz@oracle.com>
To: Peter Xu <peterx@redhat.com>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	Andrew Morton <akpm@linux-foundation.org>,
	David Hildenbrand <david@redhat.com>,
	Nadav Amit <nadav.amit@gmail.com>,
	Andrea Arcangeli <aarcange@redhat.com>,
	Axel Rasmussen <axelrasmussen@google.com>,
	Mike Rapoport <rppt@linux.vnet.ibm.com>
Subject: Re: [PATCH v2 3/3] mm/selftest: uffd: Explain the write missing fault check
Date: Mon, 3 Oct 2022 19:37:42 -0700	[thread overview]
Message-ID: <YzucdvxRdLEvfj7b@monkey> (raw)
In-Reply-To: <20221004003705.497782-4-peterx@redhat.com>

On 10/03/22 20:37, Peter Xu wrote:
> It's not obvious why we had a write check for each of the missing messages,
> especially when it should be a locking op.  Add a rich comment for that,
> and also try to explain its good side and limitations, so that if someone
> hit it again for either a bug or a different glibc impl there'll be some
> clue to start with.

Thanks!  It did take a while to understand all this, so the comment is
appropriate.

> 
> Signed-off-by: Peter Xu <peterx@redhat.com>
> ---
>  tools/testing/selftests/vm/userfaultfd.c | 22 +++++++++++++++++++++-
>  1 file changed, 21 insertions(+), 1 deletion(-)

Reviewed-by: Mike Kravetz <mike.kravetz@oracle.com>
-- 
Mike Kravetz

> 
> diff --git a/tools/testing/selftests/vm/userfaultfd.c b/tools/testing/selftests/vm/userfaultfd.c
> index 74babdbc02e5..297f250c1d95 100644
> --- a/tools/testing/selftests/vm/userfaultfd.c
> +++ b/tools/testing/selftests/vm/userfaultfd.c
> @@ -774,7 +774,27 @@ static void uffd_handle_page_fault(struct uffd_msg *msg,
>  		continue_range(uffd, msg->arg.pagefault.address, page_size);
>  		stats->minor_faults++;
>  	} else {
> -		/* Missing page faults */
> +		/*
> +		 * Missing page faults.
> +		 *
> +		 * Here we force a write check for each of the missing mode
> +		 * faults.  It's guaranteed because the only threads that
> +		 * will trigger uffd faults are the locking threads, and
> +		 * their first instruction to touch the missing page will
> +		 * always be pthread_mutex_lock().
> +		 *
> +		 * Note that here we relied on an NPTL glibc impl detail to
> +		 * always read the lock type at the entry of the lock op
> +		 * (pthread_mutex_t.__data.__type, offset 0x10) before
> +		 * doing any locking operations to guarantee that.  It's
> +		 * actually not good to rely on this impl detail because
> +		 * logically a pthread-compatible lib can implement the
> +		 * locks without types and we can fail when linking with
> +		 * them.  However since we used to find bugs with this
> +		 * strict check we still keep it around.  Hopefully this
> +		 * could be a good hint when it fails again.  If one day
> +		 * it'll break on some other impl of glibc we'll revisit.
> +		 */
>  		if (msg->arg.pagefault.flags & UFFD_PAGEFAULT_FLAG_WRITE)
>  			err("unexpected write fault");
>  
> -- 
> 2.37.3
> 


  reply	other threads:[~2022-10-04  2:37 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-10-04  0:37 [PATCH v2 0/3] mm/hugetlb: Fix selftest failures with write check Peter Xu
2022-10-04  0:37 ` [PATCH v2 1/3] mm/hugetlb: Fix race condition of uffd missing/minor handling Peter Xu
2022-10-04  2:32   ` Mike Kravetz
2022-10-04 13:53     ` Peter Xu
2022-10-04 12:19   ` David Hildenbrand
2022-10-04 13:49     ` Peter Xu
2022-10-04  0:37 ` [PATCH v2 2/3] mm/hugetlb: Use hugetlb_pte_stable in migration race check Peter Xu
2022-10-04  2:35   ` Mike Kravetz
2022-10-04 12:20   ` David Hildenbrand
2022-10-04  0:37 ` [PATCH v2 3/3] mm/selftest: uffd: Explain the write missing fault check Peter Xu
2022-10-04  2:37   ` Mike Kravetz [this message]
2022-10-04 12:20   ` David Hildenbrand

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=YzucdvxRdLEvfj7b@monkey \
    --to=mike.kravetz@oracle.com \
    --cc=aarcange@redhat.com \
    --cc=akpm@linux-foundation.org \
    --cc=axelrasmussen@google.com \
    --cc=david@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=nadav.amit@gmail.com \
    --cc=peterx@redhat.com \
    --cc=rppt@linux.vnet.ibm.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.