All of lore.kernel.org
 help / color / mirror / Atom feed
From: Peter Xu <peterx@redhat.com>
To: Axel Rasmussen <axelrasmussen@google.com>
Cc: Alexander Viro <viro@zeniv.linux.org.uk>,
	Andrew Morton <akpm@linux-foundation.org>,
	Christian Brauner <brauner@kernel.org>,
	David Hildenbrand <david@redhat.com>,
	Huang Ying <ying.huang@intel.com>,
	Hugh Dickins <hughd@google.com>,
	James Houghton <jthoughton@google.com>,
	Jiaqi Yan <jiaqiyan@google.com>, Jonathan Corbet <corbet@lwn.net>,
	"Liam R. Howlett" <Liam.Howlett@oracle.com>,
	Miaohe Lin <linmiaohe@huawei.com>,
	Mike Kravetz <mike.kravetz@oracle.com>,
	"Mike Rapoport (IBM)" <rppt@kernel.org>,
	Muchun Song <muchun.song@linux.dev>,
	Nadav Amit <namit@vmware.com>,
	Naoya Horiguchi <naoya.horiguchi@nec.com>,
	Shuah Khan <shuah@kernel.org>,
	ZhangPeng <zhangpeng362@huawei.com>,
	linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org,
	linux-fsdevel@vger.kernel.org, linux-mm@kvack.org,
	linux-kselftest@vger.kernel.org
Subject: Re: [PATCH v2 3/6] mm: userfaultfd: support UFFDIO_POISON for hugetlbfs
Date: Tue, 4 Jul 2023 16:59:51 -0400	[thread overview]
Message-ID: <ZKSIR4zga2A+fdcv@x1n> (raw)
In-Reply-To: <20230629205040.665834-3-axelrasmussen@google.com>

On Thu, Jun 29, 2023 at 01:50:37PM -0700, Axel Rasmussen wrote:
> The behavior here is the same as it is for anon/shmem. This is done
> separately because hugetlb pte marker handling is a bit different.
> 
> Signed-off-by: Axel Rasmussen <axelrasmussen@google.com>
> ---
>  mm/hugetlb.c     | 33 +++++++++++++++++++++++++++++++--
>  mm/userfaultfd.c |  6 +-----
>  2 files changed, 32 insertions(+), 7 deletions(-)
> 
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index 38711d49e4db..05abe88986b6 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -6090,14 +6090,24 @@ vm_fault_t hugetlb_fault(struct mm_struct *mm, struct vm_area_struct *vma,
>  	}
>  
>  	entry = huge_ptep_get(ptep);
> -	/* PTE markers should be handled the same way as none pte */
> -	if (huge_pte_none_mostly(entry))
> +	if (huge_pte_none_mostly(entry)) {
> +		if (is_pte_marker(entry)) {
> +			unsigned long marker = pte_marker_get(pte_to_swp_entry(entry));
> +
> +			if (marker & PTE_MARKER_UFFD_POISON) {
> +				ret = VM_FAULT_HWPOISON_LARGE;
> +				goto out_mutex;
> +			}
> +		}
>  		/*
> +		 * Other PTE markers should be handled the same way as none PTE.
> +		 *
>  		 * hugetlb_no_page will drop vma lock and hugetlb fault
>  		 * mutex internally, which make us return immediately.
>  		 */
>  		return hugetlb_no_page(mm, vma, mapping, idx, address, ptep,
>  				      entry, flags);
> +	}
>  
>  	ret = 0;
>  
> @@ -6253,6 +6263,25 @@ int hugetlb_mfill_atomic_pte(pte_t *dst_pte,
>  	int writable;
>  	bool folio_in_pagecache = false;
>  
> +	if (uffd_flags_mode_is(flags, MFILL_ATOMIC_POISON)) {
> +		ptl = huge_pte_lock(h, dst_mm, dst_pte);
> +
> +		/* Don't overwrite any existing PTEs (even markers) */
> +		if (!huge_pte_none(huge_ptep_get(dst_pte))) {
> +			spin_unlock(ptl);
> +			return -EEXIST;
> +		}
> +
> +		_dst_pte = make_pte_marker(PTE_MARKER_UFFD_POISON);
> +		set_huge_pte_at(dst_mm, dst_addr, dst_pte, _dst_pte);
> +
> +		/* No need to invalidate - it was non-present before */
> +		update_mmu_cache(dst_vma, dst_addr, dst_pte);
> +
> +		spin_unlock(ptl);
> +		return 0;
> +	}
> +
>  	if (is_continue) {
>  		ret = -EFAULT;
>  		folio = filemap_lock_folio(mapping, idx);
> diff --git a/mm/userfaultfd.c b/mm/userfaultfd.c
> index 87b62ca1e09e..4436cae1c7a8 100644
> --- a/mm/userfaultfd.c
> +++ b/mm/userfaultfd.c
> @@ -381,12 +381,8 @@ static __always_inline ssize_t mfill_atomic_hugetlb(
>  	 * supported by hugetlb.  A PMD_SIZE huge pages may exist as used
>  	 * by THP.  Since we can not reliably insert a zero page, this
>  	 * feature is not supported.
> -	 *
> -	 * PTE marker handling for hugetlb is a bit special, so for now
> -	 * UFFDIO_POISON is not supported.
>  	 */
> -	if (uffd_flags_mode_is(flags, MFILL_ATOMIC_ZEROPAGE) ||
> -	    uffd_flags_mode_is(flags, MFILL_ATOMIC_POISON)) {
> +	if (uffd_flags_mode_is(flags, MFILL_ATOMIC_ZEROPAGE)) {
>  		mmap_read_unlock(dst_mm);
>  		return -EINVAL;

If we have the last patch declaring the feature bits and so on, IIUC we
don'tt need this change back and forth.  Other than that looks good.

Thanks,

>  	}
> -- 
> 2.41.0.255.g8b1d071c50-goog
> 

-- 
Peter Xu


  reply	other threads:[~2023-07-04 21:00 UTC|newest]

Thread overview: 23+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-29 20:50 [PATCH v2 1/6] mm: userfaultfd: add new UFFDIO_POISON ioctl Axel Rasmussen
2023-06-29 20:50 ` [PATCH v2 2/6] mm: userfaultfd: refactor hugetlb folio allocation / lookup code Axel Rasmussen
2023-07-04 20:57   ` Peter Xu
2023-06-29 20:50 ` [PATCH v2 3/6] mm: userfaultfd: support UFFDIO_POISON for hugetlbfs Axel Rasmussen
2023-07-04 20:59   ` Peter Xu [this message]
2023-06-29 20:50 ` [PATCH v2 4/6] selftests/mm: refactor uffd_poll_thread to allow custom fault handlers Axel Rasmussen
2023-07-04 21:03   ` Peter Xu
2023-07-05 17:50     ` Axel Rasmussen
2023-07-05 18:17       ` Peter Xu
2023-06-29 20:50 ` [PATCH v2 5/6] selftests/mm: add uffd unit test for UFFDIO_POISON Axel Rasmussen
2023-07-04 21:15   ` Peter Xu
2023-06-29 20:50 ` [PATCH v2 6/6] mm: userfaultfd: add basic documentation " Axel Rasmussen
2023-06-29 21:04   ` Randy Dunlap
2023-07-04 21:16   ` Peter Xu
2023-07-04 20:38 ` [PATCH v2 1/6] mm: userfaultfd: add new UFFDIO_POISON ioctl Peter Xu
2023-07-05 16:09   ` James Houghton
2023-07-05 16:15     ` Peter Xu
2023-07-05 16:27       ` James Houghton
2023-07-05 16:38         ` Peter Xu
2023-07-05 17:56           ` Axel Rasmussen
2023-07-05 15:58 ` James Houghton
2023-07-05 18:17 ` Jiaqi Yan
2023-07-05 18:23   ` Axel Rasmussen

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=ZKSIR4zga2A+fdcv@x1n \
    --to=peterx@redhat.com \
    --cc=Liam.Howlett@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=axelrasmussen@google.com \
    --cc=brauner@kernel.org \
    --cc=corbet@lwn.net \
    --cc=david@redhat.com \
    --cc=hughd@google.com \
    --cc=jiaqiyan@google.com \
    --cc=jthoughton@google.com \
    --cc=linmiaohe@huawei.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mike.kravetz@oracle.com \
    --cc=muchun.song@linux.dev \
    --cc=namit@vmware.com \
    --cc=naoya.horiguchi@nec.com \
    --cc=rppt@kernel.org \
    --cc=shuah@kernel.org \
    --cc=viro@zeniv.linux.org.uk \
    --cc=ying.huang@intel.com \
    --cc=zhangpeng362@huawei.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.