All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mike Kravetz <mike.kravetz@oracle.com>
To: Oscar Salvador <osalvador@suse.de>
Cc: linux-kernel@vger.kernel.org, linux-mm@kvack.org,
	Michal Hocko <mhocko@kernel.org>,
	Naoya Horiguchi <n-horiguchi@ah.jp.nec.com>,
	Muchun Song <songmuchun@bytedance.com>,
	David Hildenbrand <david@redhat.com>,
	Matthew Wilcox <willy@infradead.org>,
	Andrew Morton <akpm@linux-foundation.org>
Subject: Re: [PATCH v2 2/5] hugetlb: convert page_huge_active() HPageMigratable flag
Date: Wed, 20 Jan 2021 13:48:05 -0800	[thread overview]
Message-ID: <0ef72fcf-7fd6-02f6-6fb5-69a2c5bcf7a4@oracle.com> (raw)
In-Reply-To: <20210120100023.GB4752@localhost.localdomain>

On 1/20/21 2:00 AM, Oscar Salvador wrote:
> On Wed, Jan 20, 2021 at 10:59:05AM +0100, Oscar Salvador wrote:
>> On Tue, Jan 19, 2021 at 05:30:46PM -0800, Mike Kravetz wrote:
>>> Use the new hugetlb page specific flag HPageMigratable to replace the
>>> page_huge_active interfaces.  By it's name, page_huge_active implied
>>> that a huge page was on the active list.  However, that is not really
>>> what code checking the flag wanted to know.  It really wanted to determine
>>> if the huge page could be migrated.  This happens when the page is actually
>>> added the page cache and/or task page table.  This is the reasoning behind
>>> the name change.
>>>
>>> The VM_BUG_ON_PAGE() calls in the *_huge_active() interfaces are not
>>> really necessary as we KNOW the page is a hugetlb page.  Therefore, they
>>> are removed.
>>>
>>> The routine page_huge_active checked for PageHeadHuge before testing the
>>> active bit.  This is unnecessary in the case where we hold a reference or
>>> lock and know it is a hugetlb head page.  page_huge_active is also called
>>> without holding a reference or lock (scan_movable_pages), and can race with
>>> code freeing the page.  The extra check in page_huge_active shortened the
>>> race window, but did not prevent the race.  Offline code calling
>>> scan_movable_pages already deals with these races, so removing the check
>>> is acceptable.  Add comment to racy code.
>>>
>>> Signed-off-by: Mike Kravetz <mike.kravetz@oracle.com>
>>
>> Hi Mike,
>>
>> This comment addresses both this patch and the next one.
>>
>> Instead of putting the SetHPageMigratable flag spread over the
>> allocation paths, would it make more sense to place it in
>> alloc_huge_page before returning the page?
>> Then we could opencode SetHPageMigratableIfSupported right there.
> 
> and in putback_active_hugepage.


Hi Oscar,

In Muchun's series of hugetlb bug fixes, Michal asked the same question.

https://lore.kernel.org/linux-mm/7e69a55c-d501-6b42-8225-a677f09fb829@oracle.com/

The 'short answer' is that the this would allow a page to be migrated
after allocation but before the page fault code adds it to the page
cache or page tables.  This actually caused bugs in the past.
-- 
Mike Kravetz

  reply	other threads:[~2021-01-21  0:48 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-20  1:30 [PATCH v2 0/5] create hugetlb flags to consolidate state Mike Kravetz
2021-01-20  1:30 ` [PATCH v2 1/5] hugetlb: use page.private for hugetlb specific page flags Mike Kravetz
2021-01-20  8:10   ` Miaohe Lin
2021-01-20  8:43   ` kernel test robot
2021-01-20  8:43     ` kernel test robot
2021-01-20  9:30   ` Oscar Salvador
2021-01-20 18:12     ` Mike Kravetz
2021-01-20  1:30 ` [PATCH v2 2/5] hugetlb: convert page_huge_active() HPageMigratable flag Mike Kravetz
2021-01-20  9:59   ` Oscar Salvador
2021-01-20 10:00     ` Oscar Salvador
2021-01-20 21:48       ` Mike Kravetz [this message]
2021-01-21  8:18         ` Oscar Salvador
2021-01-21  8:27   ` Oscar Salvador
2021-01-21 12:01   ` [External] " Muchun Song
2021-01-21 12:01     ` Muchun Song
2021-01-22  6:53   ` Miaohe Lin
2021-01-22 23:12     ` Mike Kravetz
2021-02-03  7:42   ` [External] " Muchun Song
2021-02-03  7:42     ` Muchun Song
2021-02-04  0:44     ` Mike Kravetz
2021-01-20  1:30 ` [PATCH v2 3/5] hugetlb: only set HPageMigratable for migratable hstates Mike Kravetz
2021-01-20  1:30 ` [PATCH v2 4/5] hugetlb: convert PageHugeTemporary() to HPageTemporary flag Mike Kravetz
2021-01-20 10:09   ` Oscar Salvador
2021-01-20 18:14     ` Mike Kravetz
2021-01-20  1:30 ` [PATCH v2 5/5] hugetlb: convert PageHugeFreed to HPageFreed flag Mike Kravetz
2021-01-20 10:10   ` Oscar Salvador
2021-01-20 10:44   ` [External] " Muchun Song
2021-01-20 10:44     ` Muchun Song

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=0ef72fcf-7fd6-02f6-6fb5-69a2c5bcf7a4@oracle.com \
    --to=mike.kravetz@oracle.com \
    --cc=akpm@linux-foundation.org \
    --cc=david@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=mhocko@kernel.org \
    --cc=n-horiguchi@ah.jp.nec.com \
    --cc=osalvador@suse.de \
    --cc=songmuchun@bytedance.com \
    --cc=willy@infradead.org \
    /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.