All of lore.kernel.org
 help / color / mirror / Atom feed
From: Li Xinhai <lixinhai.lxh@gmail.com>
To: "Huang, Ying" <ying.huang@intel.com>
Cc: Zi Yan <ziy@nvidia.com>,
	linux-mm@kvack.org,
	"Kirill A. Shutemov" <kirill.shutemov@linux.intel.com>,
	akpm@linux-foundation.org
Subject: Re: [PATCH V2] mm/gup.c: stricter check on THP migration entry during follow_pmd_mask
Date: Thu, 16 Dec 2021 21:16:55 +0800	[thread overview]
Message-ID: <59d77170-6845-2765-bebd-7bb08fd428ee@gmail.com> (raw)
In-Reply-To: <875yrpszca.fsf@yhuang6-desk2.ccr.corp.intel.com>



On 12/16/21 4:55 PM, Huang, Ying wrote:
> Li Xinhai <lixinhai.lxh@gmail.com> writes:
> 
>> On 12/15/21 10:46 PM, Zi Yan wrote:
>>> On 15 Dec 2021, at 7:47, Li Xinhai wrote:
>>>
>>>> On 12/11/21 11:16 PM, Li Xinhai wrote:
>>>>>
>>>>>
>>>>> On 12/11/21 11:10 PM, Li Xinhai wrote:
>>>>>> When BUG_ON check for THP migration entry, the exsiting code only check
>>>>>> thp_migration_supported case, but not for !thp_migration_supported case.
>>>>>> 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>
>>>>>> ---
>>>>> V1->V2:
>>>>> Move the BUG_ON() check before if(!(flags & FOLL_MIGRATION)); and add comments
>>>>> for it.
>>>>>
>>>> Yan, Ying and Kirill have been worked on this part of code, may help to review.
>>>>
>>>> This change was based on my code review, no real bug has been observed.
>>>>
>>>>
>>>>>>    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));
>>>>>> +
>>> This means VM_BUG_ON will be triggered when pmdval is not present
>>> and THP migration
>>> is not enabled. This can happen when it is pmd_none(). That is not a bug and should
>>> just return no_page_table(vma, flags).
>>>
>>
>> Thanks for review!
>> The pmd_none() has been checked at the beginning of follow_pmd_mask() and before
>> the 'retry' loop start again, so that possibility is excluded.
>>
>> We will have VM_BUG_ON(1) if thp_migration_supported() is false, or
>> VM_BUG_ON(!is_pmd_migration_entry(pmdval)) if thp_migration_supported() is true, by
>> compiler.
>>
>> If we left !thp_migration_supported() case for the VM_BUG_ON(), it will cause
>> misunderstanding that that case is not a bug at the code context.
> 
> I think your code works.  The patch description may be improved.  If
> !thp_migration_supported() and !pmd_present(), the original code may
> dead loop in theory.
> 
Thanks for review.
I will mention this potential dead loop in the commit message.

> Best Regards,
> Huang, Ying
> 
>>>>>>        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
>>>>>>
>>> --
>>> Best Regards,
>>> Yan, Zi
>>>


      reply	other threads:[~2021-12-16 13:17 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-12-11 15:10 [PATCH V2] mm/gup.c: stricter check on THP migration entry during follow_pmd_mask Li Xinhai
2021-12-11 15:16 ` Li Xinhai
2021-12-15 12:47   ` Li Xinhai
2021-12-15 14:46     ` Zi Yan
2021-12-16  2:00       ` Li Xinhai
2021-12-16  8:55         ` Huang, Ying
2021-12-16 13:16           ` Li Xinhai [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=59d77170-6845-2765-bebd-7bb08fd428ee@gmail.com \
    --to=lixinhai.lxh@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=kirill.shutemov@linux.intel.com \
    --cc=linux-mm@kvack.org \
    --cc=ying.huang@intel.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.