All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Huang, Ying" <ying.huang@intel.com>
To: Li Xinhai <lixinhai.lxh@gmail.com>
Cc: linux-mm@kvack.org,  akpm@linux-foundation.org,
	 Zi Yan <ziy@nvidia.com>,
	 "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
Subject: Re: [PATCH V3] mm/gup.c: stricter check on THP migration entry during follow_pmd_mask
Date: Fri, 17 Dec 2021 11:01:27 +0800	[thread overview]
Message-ID: <87wnk4rl2w.fsf@yhuang6-desk2.ccr.corp.intel.com> (raw)
In-Reply-To: <20211217023418.731424-1-lixinhai.lxh@gmail.com> (Li Xinhai's message of "Fri, 17 Dec 2021 10:34:18 +0800")

Li Xinhai <lixinhai.lxh@gmail.com> writes:

> When BUG_ON check for THP migration entry, the exsiting code only check

s/exsiting/existing/

Found some misspelling in the comments too.  Please fix them with some
tool.

Best Regards,
Huang, Ying

> thp_migration_supported case, but not for !thp_migration_supported case.
> If !thp_migration_supported() and !pmd_present(), the original code may
> dead loop in theory. To make the BUG_ON check consistent, we need catch
> both cases.
>
> Move the BUG_ON check one step eariler, because if the bug happen we
> should know it instead of depend on FOLL_MIGRATION been used by caller.
>
> Because pmdval instead of *pmd is read by the is_pmd_migration_entry()
> check, the existing code don't help to avoid useless locking within
> pmd_migration_entry_wait(), so remove that check.
>
> Signed-off-by: Li Xinhai <lixinhai.lxh@gmail.com>
> Cc: Zi Yan <ziy@nvidia.com>
> Cc: "Huang, Ying" <ying.huang@intel.com>
> Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>
> ---
> V2->V3:
> mention about the dead loop in commit message.
>
> V1->V2:
> Move the BUG_ON() check before if(!(flags & FOLL_MIGRATION)); and add comments
> for it. 
>
>
>  mm/gup.c | 13 +++++++++----
>  1 file changed, 9 insertions(+), 4 deletions(-)
>
> diff --git a/mm/gup.c b/mm/gup.c
> index 2c51e9748a6a..94d0e586ca0b 100644
> --- a/mm/gup.c
> +++ b/mm/gup.c
> @@ -642,12 +642,17 @@ static struct page *follow_pmd_mask(struct vm_area_struct *vma,
>  	}
>  retry:
>  	if (!pmd_present(pmdval)) {
> +		/*
> +		 * Should never reach here, if thp migration is not supported;
> +		 * Otherwise, it must be a thp miration entry.
> +		 */
> +		VM_BUG_ON(!thp_migration_supported() ||
> +				  !is_pmd_migration_entry(pmdval));
> +
>  		if (likely(!(flags & FOLL_MIGRATION)))
>  			return no_page_table(vma, flags);
> -		VM_BUG_ON(thp_migration_supported() &&
> -				  !is_pmd_migration_entry(pmdval));
> -		if (is_pmd_migration_entry(pmdval))
> -			pmd_migration_entry_wait(mm, pmd);
> +
> +		pmd_migration_entry_wait(mm, pmd);
>  		pmdval = READ_ONCE(*pmd);
>  		/*
>  		 * MADV_DONTNEED may convert the pmd to null because


  reply	other threads:[~2021-12-17  3:01 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-17  2:34 [PATCH V3] mm/gup.c: stricter check on THP migration entry during follow_pmd_mask Li Xinhai
2021-12-17  3:01 ` Huang, Ying [this message]
2021-12-17  5:49   ` Li Xinhai

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=87wnk4rl2w.fsf@yhuang6-desk2.ccr.corp.intel.com \
    --to=ying.huang@intel.com \
    --cc=akpm@linux-foundation.org \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-mm@kvack.org \
    --cc=lixinhai.lxh@gmail.com \
    --cc=ziy@nvidia.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.