Messages in this thread | | | Date | Wed, 12 Apr 2023 20:24:07 +0800 | Subject | Re: [PATCH] mm/page_alloc: consider pfn holes after pfn_valid() in __pageblock_pfn_to_page() | From | Baolin Wang <> |
| |
On 4/12/2023 7:15 PM, Michal Hocko wrote: > On Wed 12-04-23 18:45:31, Baolin Wang wrote: >> Now the __pageblock_pfn_to_page() is used by set_zone_contiguous(), >> which checks whether the given zone contains holes, and uses pfn_valid() >> to check if the end pfn is valid. However pfn_valid() can not make sure >> the end pfn is not a hole if the size of a pageblock is larger than the >> size of a sub-mem_section, since the struct page getting by pfn_to_page() >> may represent a hole or an unusable page frame, which may cause incorrect >> zone contiguous is set. >> >> Though another user of pageblock_pfn_to_page() in compaction seems work >> well now, it is better to avoid scanning or touching these offline pfns. >> So like commit 2d070eab2e82 ("mm: consider zone which is not fully >> populated to have holes"), we should also use pfn_to_online_page() for >> the end pfn to make sure it is a valid pfn with usable page frame. >> Meanwhile the pfn_valid() for end pfn can be dropped now. >> >> Moreover we've already used pfn_to_online_page() for start pfn to make >> sure it is online and valid, so the pfn_valid() for the start pfn is >> unnecessary, drop it. > > Is this a theoretical problem or something you have encountered on a > real machine? Could you provide more details please?
As I replied to David, this is just from code inspection when trying to remove the unnecessary pfn_valid() in __pageblock_pfn_to_page().
| |