From: Baolin Wang <baolin.wang@linux.alibaba.com>
To: akpm@linux-foundation.org
Cc: ying.huang@intel.com, mgorman@techsingularity.net,
vbabka@suse.cz, mhocko@suse.com, david@redhat.com,
baolin.wang@linux.alibaba.com, linux-mm@kvack.org,
linux-kernel@vger.kernel.org
Subject: [PATCH 2/2] mm/page_alloc: add some comments to explain the possible hole in __pageblock_pfn_to_page()
Date: Sat, 22 Apr 2023 18:15:18 +0800 [thread overview]
Message-ID: <02defcbe9d7a797a2257e5f6a28ff7ea78e394e5.1682158312.git.baolin.wang@linux.alibaba.com> (raw)
In-Reply-To: <c2eee65ecd15779721af85c9ff109a35345b52d4.1682158312.git.baolin.wang@linux.alibaba.com>
Now the __pageblock_pfn_to_page() is used by set_zone_contiguous(), which
checks whether the given zone contains holes, and uses pfn_to_online_page()
to validate if the start pfn is online and valid, as well as using pfn_valid()
to validate the end pfn.
However, though the start pfn of a pageblock is valid, it can not always
guarantee the end pfn of the pageblock is also valid (may be holes) in some
cases. For example, if the pageblock order is MAX_ORDER - 1, which will fall
into 2 sub-sections, and the end pfn of the pageblock may be hole even though
the start pfn is online and valid.
This did not break anything until now, but the zone continuous is fragile
in this possible scenario. So as previous discussion[1], it is better to
add some comments to explain this possible issue in case there are some
future pfn walkers that rely on this.
[1] https://lore.kernel.org/all/87r0sdsmr6.fsf@yhuang6-desk2.ccr.corp.intel.com/
Signed-off-by: Baolin Wang <baolin.wang@linux.alibaba.com>
---
mm/page_alloc.c | 8 ++++++++
1 file changed, 8 insertions(+)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c
index 6457b64fe562..dc4005b32ae0 100644
--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -1502,6 +1502,14 @@ void __free_pages_core(struct page *page, unsigned int order)
* interleaving within a single pageblock. It is therefore sufficient to check
* the first and last page of a pageblock and avoid checking each individual
* page in a pageblock.
+ *
+ * Note: if the start pfn of a pageblock is valid, but it can not always guarantee
+ * the end pfn of the pageblock is also valid (may be holes) in some cases. For
+ * example, if the pageblock order is MAX_ORDER - 1, which will fall into 2
+ * sub-sections, and the end pfn of the pageblock may be hole even though the
+ * start pfn is online and valid. This did not break anything until now, but be
+ * careful this possible issue when checking if the whole pfns are valid of a
+ * pageblock.
*/
struct page *__pageblock_pfn_to_page(unsigned long start_pfn,
unsigned long end_pfn, struct zone *zone)
--
2.27.0
next prev parent reply other threads:[~2023-04-22 10:15 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-04-22 10:15 [PATCH 1/2] mm/page_alloc: drop the unnecessary pfn_valid() for start pfn Baolin Wang
2023-04-22 10:15 ` Baolin Wang [this message]
2023-04-23 1:13 ` [PATCH 2/2] mm/page_alloc: add some comments to explain the possible hole in __pageblock_pfn_to_page() Huang, Ying
2023-04-23 1:27 ` Baolin Wang
2023-04-23 5:19 ` Mike Rapoport
2023-04-23 6:00 ` Baolin Wang
2023-04-22 20:37 ` [PATCH 1/2] mm/page_alloc: drop the unnecessary pfn_valid() for start pfn David Hildenbrand
2023-04-23 0:55 ` Huang, Ying
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=02defcbe9d7a797a2257e5f6a28ff7ea78e394e5.1682158312.git.baolin.wang@linux.alibaba.com \
--to=baolin.wang@linux.alibaba.com \
--cc=akpm@linux-foundation.org \
--cc=david@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=mgorman@techsingularity.net \
--cc=mhocko@suse.com \
--cc=vbabka@suse.cz \
--cc=ying.huang@intel.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox