mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-24 04:34:08 +08:00
mm/page_alloc: tweak comments in has_unmovable_pages()
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 <david@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Reviewed-by: Baoquan He <bhe@redhat.com> Cc: Michal Hocko <mhocko@suse.com> Cc: Michael S. Tsirkin <mst@redhat.com> Cc: Mike Kravetz <mike.kravetz@oracle.com> Cc: Pankaj Gupta <pankaj.gupta.linux@gmail.com> Cc: Jason Wang <jasowang@redhat.com> Cc: Mike Rapoport <rppt@kernel.org> Cc: Qian Cai <cai@lca.pw> Link: http://lkml.kernel.org/r/20200816125333.7434-1-david@redhat.com Link: http://lkml.kernel.org/r/20200816125333.7434-2-david@redhat.com Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
be4f1ae978
commit
c9c510dc29
@ -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
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user