Skip to content
This repository has been archived by the owner on Nov 21, 2022. It is now read-only.

Commit

Permalink
mm/page_alloc: tweak comments in has_unmovable_pages()
Browse files Browse the repository at this point in the history
Patch series "mm / virtio-mem: support ZONE_MOVABLE", v5.

When introducing virtio-mem, the semantics of ZONE_MOVABLE were rather
unclear, which is why we special-cased ZONE_MOVABLE such that partially
plugged blocks would never end up in ZONE_MOVABLE.

Now that the semantics are much clearer (and are documented in patch #6),
let's support partially plugged memory blocks in ZONE_MOVABLE, allowing
partially plugged memory blocks to be online to ZONE_MOVABLE and also
unplugging from such memory blocks.  This avoids surprises when onlining
of memory blocks suddenly fails, just because they are not completely
populated by virtio-mem (yet).

This is especially helpful for testing, but also paves the way for
virtio-mem optimizations, allowing more memory to get reliably unplugged.

Cleanup has_unmovable_pages() and set_migratetype_isolate(), providing
better documentation of how ZONE_MOVABLE interacts with different kind of
unmovable pages (memory offlining vs.  alloc_contig_range()).

This patch (of 6):

Let's move the split comment regarding bootmem allocations and memory
holes, especially in the context of ZONE_MOVABLE, to the PageReserved()
check.

Signed-off-by: David Hildenbrand <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Reviewed-by: Baoquan He <[email protected]>
Cc: Michal Hocko <[email protected]>
Cc: Michael S. Tsirkin <[email protected]>
Cc: Mike Kravetz <[email protected]>
Cc: Pankaj Gupta <[email protected]>
Cc: Jason Wang <[email protected]>
Cc: Mike Rapoport <[email protected]>
Cc: Qian Cai <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Linus Torvalds <[email protected]>
  • Loading branch information
davidhildenbrand authored and torvalds committed Oct 14, 2020
1 parent be4f1ae commit c9c510d
Showing 1 changed file with 6 additions and 16 deletions.
22 changes: 6 additions & 16 deletions mm/page_alloc.c
Original file line number Diff line number Diff line change
Expand Up @@ -8235,14 +8235,6 @@ struct page *has_unmovable_pages(struct zone *zone, struct page *page,
unsigned long iter = 0;
unsigned long pfn = page_to_pfn(page);

/*
* TODO we could make this much more efficient by not checking every
* page in the range if we know all of them are in MOVABLE_ZONE and
* that the movable zone guarantees that pages are migratable but
* the later is not the case right now unfortunatelly. E.g. movablecore
* can still lead to having bootmem allocations in zone_movable.
*/

if (is_migrate_cma_page(page)) {
/*
* CMA allocations (alloc_contig_range) really need to mark
Expand All @@ -8261,6 +8253,12 @@ struct page *has_unmovable_pages(struct zone *zone, struct page *page,

page = pfn_to_page(pfn + iter);

/*
* Both, bootmem allocations and memory holes are marked
* PG_reserved and are unmovable. We can even have unmovable
* allocations inside ZONE_MOVABLE, for example when
* specifying "movablecore".
*/
if (PageReserved(page))
return page;

Expand Down Expand Up @@ -8334,14 +8332,6 @@ struct page *has_unmovable_pages(struct zone *zone, struct page *page,
* it. But now, memory offline itself doesn't call
* shrink_node_slabs() and it still to be fixed.
*/
/*
* If the page is not RAM, page_count()should be 0.
* we don't need more check. This is an _used_ not-movable page.
*
* The problematic thing here is PG_reserved pages. PG_reserved
* is set to both of a memory hole page and a _used_ kernel
* page at boot.
*/
return page;
}
return NULL;
Expand Down

0 comments on commit c9c510d

Please sign in to comment.