mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Ge Yang <yangge1116@126.com>
To: David Hildenbrand <david@redhat.com>, akpm@linux-foundation.org
Cc: linux-mm@kvack.org, linux-kernel@vger.kernel.org,
	21cnbao@gmail.com, baolin.wang@linux.alibaba.com,
	liuzixing@hygon.cn
Subject: Re: [PATCH] mm/hugetlb: prevent reuse of isolated free hugepages
Date: Sat, 11 Jan 2025 16:00:42 +0800	[thread overview]
Message-ID: <0215484e-974a-4f4d-ba1e-595d1894c732@126.com> (raw)
In-Reply-To: <b0d9f82f-6e29-4613-a7ab-183e888a8eff@redhat.com>



在 2025/1/10 16:14, David Hildenbrand 写道:
> On 10.01.25 03:56, yangge1116@126.com wrote:
>> From: yangge <yangge1116@126.com>
>>
>> When there are free hugetlb folios in the hugetlb pool, during the
>> migration of in-use hugetlb folios, new folios is allocated from
>> the free hugetlb pool. After the migration is completed, the old
>> folios are released back to the free hugetlb pool. However, after
>> the old folios are released to the free hugetlb pool, they may be
>> reallocated. When replace_free_hugepage_folios() is executed later,
>> it cannot release these old folios back to the buddy system.
>>
>> As discussed with David in [1], when alloc_contig_range() is used
>> to migrate multiple in-use hugetlb pages, it can lead to the issue
>> described above. For example:
>>
>> [huge 0] [huge 1]
>>
>> To migrate huge 0, we obtain huge x from the pool. After the migration
>> is completed, we return the now-freed huge 0 back to the pool. When
>> it's time to migrate huge 1, we can simply reuse the now-freed huge 0
>> from the pool. As a result, when replace_free_hugepage_folios() is
>> executed, it cannot release huge 0 back to the buddy system.
>>
>> To slove the proble above, we should prevent reuse of isolated free
>> hugepages.
> 
> s/slove/solve/
> s/proble/problem/
> 
>>
>> Link: https://lore.kernel.org/lkml/1734503588-16254-1-git-send-email- 
>> yangge1116@126.com/
>> Fixes: 08d312ee4c0a ("mm: replace free hugepage folios after migration")
> 
> The commit id is not stable yet.
> 
> $ git tag --contains  08d312ee4c0a
> mm-everything-2025-01-09-06-44
> next-20250110
> 
> 
> We should squash this into the original fix. Can you resend the whole 
> thing and merge the patch descriptions?
> 

ok, thanks.

>> Signed-off-by: yangge <yangge1116@126.com>
>> ---
>>   mm/hugetlb.c | 4 ++++
>>   1 file changed, 4 insertions(+)
>>
>> diff --git a/mm/hugetlb.c b/mm/hugetlb.c
>> index 9a55960..e5f9999 100644
>> --- a/mm/hugetlb.c
>> +++ b/mm/hugetlb.c
>> @@ -48,6 +48,7 @@
>>   #include <linux/page_owner.h>
>>   #include "internal.h"
>>   #include "hugetlb_vmemmap.h"
>> +#include <linux/page-isolation.h>
>>   int hugetlb_max_hstate __read_mostly;
>>   unsigned int default_hstate_idx;
>> @@ -1273,6 +1274,9 @@ static struct folio 
>> *dequeue_hugetlb_folio_node_exact(struct hstate *h,
>>           if (folio_test_hwpoison(folio))
>>               continue;
>> +        if (is_migrate_isolate_page(&folio->page))
>> +            continue;
>> +
>>           list_move(&folio->lru, &h->hugepage_activelist);
>>           folio_ref_unfreeze(folio, 1);
>>           folio_clear_hugetlb_freed(folio);
> 
> Sorry for not getting back to your previous mail, this week was a bit 
> crazy.
> 
> This will work reliably if the huge page does not span more than a 
> single page block.
> 
> Assuming it would span multiple ones, we might have only isolated the 
> last etc. pageblock. For the common cases it might do, but not for all 
> cases unfortunately (especially not gigantic pages, but I recall we skip 
> them during alloc_contig_pages(); I recall some oddities on ppc even 
> without gigantic pages involved).
> 
> One option would be to stare at all involved pageblocks, although a bit 
> nasty ... let me think about this.
> 


      parent reply	other threads:[~2025-01-11  8:17 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-10  2:56 yangge1116
2025-01-10  8:14 ` David Hildenbrand
2025-01-11  1:45   ` Andrew Morton
2025-01-11  8:00     ` Ge Yang
2025-01-11  8:00   ` Ge Yang [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=0215484e-974a-4f4d-ba1e-595d1894c732@126.com \
    --to=yangge1116@126.com \
    --cc=21cnbao@gmail.com \
    --cc=akpm@linux-foundation.org \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=david@redhat.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=liuzixing@hygon.cn \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®