All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Kravetz <mike.kravetz@oracle.com>
To: Miaohe Lin <linmiaohe@huawei.com>
Cc: akpm@linux-foundation.org, songmuchun@bytedance.com,
	linux-mm@kvack.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 6/6] mm/hugetlb: make detecting shared pte more reliable
Date: Wed, 17 Aug 2022 16:56:59 -0700	[thread overview]
Message-ID: <Yv2ASz3jGnoHh3ok@monkey> (raw)
In-Reply-To: <20220816130553.31406-7-linmiaohe@huawei.com>

On 08/16/22 21:05, Miaohe Lin wrote:
> If the pagetables are shared, we shouldn't copy or take references. Since
> src could have unshared and dst shares with another vma, huge_pte_none()
> is thus used to determine whether dst_pte is shared. But this check isn't
> reliable. A shared pte could have pte none in pagetable in fact. The page
> count of ptep page should be checked here in order to reliably determine
> whether pte is shared.
> 
> Signed-off-by: Miaohe Lin <linmiaohe@huawei.com>
> ---
>  mm/hugetlb.c | 16 ++++++----------
>  1 file changed, 6 insertions(+), 10 deletions(-)

You are correct, this is a better/more reliable way to check for pmd sharing.
It is accurate since we hold i_mmap_rwsem.  I like it.

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

Note to self, this will not work if we move to vma based locking for pmd
sharing and do not hold i_mmap_rwsem here.

> 
> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
> index e1356ad57087..25db6d07479e 100644
> --- a/mm/hugetlb.c
> +++ b/mm/hugetlb.c
> @@ -4795,15 +4795,13 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src,
>  
>  		/*
>  		 * If the pagetables are shared don't copy or take references.
> -		 * dst_pte == src_pte is the common case of src/dest sharing.
>  		 *
> +		 * dst_pte == src_pte is the common case of src/dest sharing.
>  		 * However, src could have 'unshared' and dst shares with
> -		 * another vma.  If dst_pte !none, this implies sharing.
> -		 * Check here before taking page table lock, and once again
> -		 * after taking the lock below.
> +		 * another vma. So page_count of ptep page is checked instead
> +		 * to reliably determine whether pte is shared.
>  		 */
> -		dst_entry = huge_ptep_get(dst_pte);
> -		if ((dst_pte == src_pte) || !huge_pte_none(dst_entry)) {
> +		if (page_count(virt_to_page(dst_pte)) > 1) {
>  			addr |= last_addr_mask;
>  			continue;
>  		}
> @@ -4814,11 +4812,9 @@ int copy_hugetlb_page_range(struct mm_struct *dst, struct mm_struct *src,
>  		entry = huge_ptep_get(src_pte);
>  		dst_entry = huge_ptep_get(dst_pte);
>  again:
> -		if (huge_pte_none(entry) || !huge_pte_none(dst_entry)) {
> +		if (huge_pte_none(entry)) {
>  			/*
> -			 * Skip if src entry none.  Also, skip in the
> -			 * unlikely case dst entry !none as this implies
> -			 * sharing with another vma.
> +			 * Skip if src entry none.
>  			 */
>  			;
>  		} else if (unlikely(is_hugetlb_entry_hwpoisoned(entry))) {
> -- 
> 2.23.0
> 

      reply	other threads:[~2022-08-17 23:57 UTC|newest]

Thread overview: 44+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-08-16 13:05 [PATCH 0/6] A few fixup patches for hugetlb Miaohe Lin
2022-08-16 13:05 ` [PATCH 1/6] mm/hugetlb: fix incorrect update of max_huge_pages Miaohe Lin
2022-08-16 22:52   ` Mike Kravetz
2022-08-16 23:20     ` Andrew Morton
2022-08-16 23:34       ` Mike Kravetz
2022-08-17  1:53         ` Miaohe Lin
2022-08-17  2:28   ` Muchun Song
2022-08-16 13:05 ` [PATCH 2/6] mm/hugetlb: fix WARN_ON(!kobj) in sysfs_create_group() Miaohe Lin
2022-08-16 22:55   ` Mike Kravetz
2022-08-17  2:31   ` Muchun Song
2022-08-17  2:39     ` Miaohe Lin
2022-08-16 13:05 ` [PATCH 3/6] mm/hugetlb: fix missing call to restore_reserve_on_error() Miaohe Lin
2022-08-16 23:31   ` Mike Kravetz
2022-08-17  1:59     ` Miaohe Lin
2022-08-16 13:05 ` [PATCH 4/6] mm: hugetlb_vmemmap: add missing smp_wmb() before set_pte_at() Miaohe Lin
2022-08-17  2:53   ` Muchun Song
2022-08-17  8:41     ` Miaohe Lin
2022-08-17  9:13       ` Yin, Fengwei
2022-08-17 11:21       ` Muchun Song
2022-08-18  1:14         ` Yin, Fengwei
2022-08-18  1:55           ` Miaohe Lin
2022-08-18  2:00             ` Yin, Fengwei
2022-08-18  2:47               ` Muchun Song
2022-08-18  7:52                 ` Miaohe Lin
2022-08-18  7:59                   ` Muchun Song
2022-08-18  8:32                     ` Yin, Fengwei
2022-08-18  8:40                       ` Muchun Song
2022-08-18  8:54                         ` Yin, Fengwei
2022-08-18  9:18                           ` Muchun Song
2022-08-18 12:58                             ` Miaohe Lin
2022-08-18 23:53                               ` Yin, Fengwei
2022-08-19  3:19                               ` Muchun Song
2022-08-19  7:26                                 ` Miaohe Lin
2022-08-18  1:15   ` Yin, Fengwei
2022-08-20  8:12   ` Muchun Song
2022-08-22  8:45     ` Miaohe Lin
2022-08-22 10:23       ` Muchun Song
2022-08-23  1:42         ` Miaohe Lin
2022-08-16 13:05 ` [PATCH 5/6] mm/hugetlb: fix sysfs group leak in hugetlb_unregister_node() Miaohe Lin
2022-08-17  9:41   ` Yin, Fengwei
2022-08-18  1:00     ` Yin, Fengwei
2022-08-18  1:12   ` Yin, Fengwei
2022-08-16 13:05 ` [PATCH 6/6] mm/hugetlb: make detecting shared pte more reliable Miaohe Lin
2022-08-17 23:56   ` Mike Kravetz [this message]

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=Yv2ASz3jGnoHh3ok@monkey \
    --to=mike.kravetz@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=linmiaohe@huawei.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=songmuchun@bytedance.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.