All of lore.kernel.org
 help / color / mirror / Atom feed
From: Kefeng Wang <wangkefeng.wang@huawei.com>
To: Zi Yan <ziy@nvidia.com>, Matthew Wilcox <willy@infradead.org>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	Miaohe Lin <linmiaohe@huawei.com>,
	Naoya Horiguchi <naoya.horiguchi@nec.com>,
	David Hildenbrand <david@redhat.com>,
	Oscar Salvador <osalvador@suse.de>,
	Hugh Dickins <hughd@google.com>, Jonathan Corbet <corbet@lwn.net>,
	<linux-mm@kvack.org>, <linux-doc@vger.kernel.org>,
	Baolin Wang <baolin.wang@linux.alibaba.com>
Subject: Re: [PATCH 2/6] mm: memory_hotplug: use more folio in do_migrate_range()
Date: Thu, 28 Mar 2024 13:06:21 +0800	[thread overview]
Message-ID: <3b29afcd-7c40-44be-8886-72df7336a85f@huawei.com> (raw)
In-Reply-To: <1AF9E259-6189-4558-8929-598679808C06@nvidia.com>



On 2024/3/27 23:10, Zi Yan wrote:
> On 27 Mar 2024, at 10:54, Matthew Wilcox wrote:
> 
>> On Wed, Mar 27, 2024 at 10:45:42AM -0400, Zi Yan wrote:
>>>>   	for (pfn = start_pfn; pfn < end_pfn; pfn++) {
>>>> -		struct folio *folio;
>>>> +		struct page *page, *head;
>>>
>>> You could get rid of head too. It is only used to calculate next pfn,
>>> so pfn = folio_to_pfn(folio) + folio_nr_pages(folio) - 1 would work.
>>>
>>> And the PageHuge(page) and PageTransHuge(page) can be simplified, since
>>> their pfn calculations are the same. Something like:
>>>
>>> if (folio_test_large(folio)) {
>>> 	pfn = folio_to_pfn(folio) + folio_nr_pages(folio) - 1;
>>> 	if (folio_test_hugetlb(folio)) {
>>> 		isolate_hugetlb(folio, &source);
>>> 		continue;
>>> 	}
>>> }
>>
>> How much of this is safe without a refcount on the folio?
> 
> folio_to_pfn() should be fine, isolate_hugetlb() checks the folio
> under hugetlb_lock, but folio_nr_pages() might return a bogus number
> that makes pfn go beyond end_pfn and ends for loop early. The code
> below increases the refcount, so it might be better to move this
> part of the code after refcount is increased.

The PageHWPoison() is per-page check, for hugetlb, it will directly
try to isolate and ignore the PageHWPoison check, I'm not sure about
moveing PageHWPoison ahead, we need to take the i_mmap_lock_write and
add TTU_RMAP_LOCKED for for hugetlb pages in shared mappings when
try_to_unmap(), but now hugetlb pages won't unmap if there is posion
page, if the get_page_unless_zero() is moved ahead, the logical need be
changed a lot, this minimize changes aim to remove isolate_lru/movable_page,
so could we keep it simple, but as your suggested, we could do more
optimization about do_migrate_range() in the next.

Thanks.


> 
> --
> Best Regards,
> Yan, Zi

  parent reply	other threads:[~2024-03-28  5:06 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-03-27 14:10 [PATCH 0/6] mm: remove isolate_lru_page() and isolate_movable_page() Kefeng Wang
2024-03-27 14:10 ` [PATCH 1/6] mm: migrate: add isolate_movable_folio() Kefeng Wang
2024-03-27 14:29   ` Zi Yan
2024-03-27 14:36     ` Kefeng Wang
2024-03-27 18:59   ` Vishal Moola
2024-03-28  5:08     ` Kefeng Wang
2024-03-27 14:10 ` [PATCH 2/6] mm: memory_hotplug: use more folio in do_migrate_range() Kefeng Wang
2024-03-27 14:45   ` Zi Yan
2024-03-27 14:54     ` Matthew Wilcox
2024-03-27 15:10       ` Zi Yan
2024-03-27 15:58         ` Matthew Wilcox
2024-03-28  5:30           ` Kefeng Wang
2024-03-28  5:06         ` Kefeng Wang [this message]
2024-03-27 14:10 ` [PATCH 3/6] mm: remove isolate_lru_page() Kefeng Wang
2024-03-28 12:22   ` kernel test robot
2024-03-28 12:56     ` Kefeng Wang
2024-03-28 15:33   ` kernel test robot
2024-03-27 14:10 ` [PATCH 4/6] mm: compaction: use isolate_movable_folio() in isolate_migratepages_block() Kefeng Wang
2024-03-27 18:49   ` Vishal Moola
2024-03-28 12:49     ` Kefeng Wang
2024-03-27 14:10 ` [PATCH 5/6] mm: memory-failure: use isolate_movable_folio() in mf_isolate_folio() Kefeng Wang
2024-03-27 15:12   ` Zi Yan
2024-03-28 16:57   ` kernel test robot
2024-03-27 14:10 ` [PATCH 6/6] mm: migrate: remove isolate_movable_page() Kefeng Wang

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=3b29afcd-7c40-44be-8886-72df7336a85f@huawei.com \
    --to=wangkefeng.wang@huawei.com \
    --cc=akpm@linux-foundation.org \
    --cc=baolin.wang@linux.alibaba.com \
    --cc=corbet@lwn.net \
    --cc=david@redhat.com \
    --cc=hughd@google.com \
    --cc=linmiaohe@huawei.com \
    --cc=linux-doc@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=naoya.horiguchi@nec.com \
    --cc=osalvador@suse.de \
    --cc=willy@infradead.org \
    --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.