To support deferred initialization of page structs for preserved pages, separate memblocks containing preserved pages by setting a new flag when adding them to the memblock reserved list. Signed-off-by: Anthony Yznaga <anthony.yznaga@xxxxxxxxxx> --- include/linux/memblock.h | 6 ++++++ mm/pkram.c | 2 ++ 2 files changed, 8 insertions(+) diff --git a/include/linux/memblock.h b/include/linux/memblock.h index d13e3cd938b4..39c53d08d9f7 100644 --- a/include/linux/memblock.h +++ b/include/linux/memblock.h @@ -37,6 +37,7 @@ enum memblock_flags { MEMBLOCK_HOTPLUG = 0x1, /* hotpluggable region */ MEMBLOCK_MIRROR = 0x2, /* mirrored region */ MEMBLOCK_NOMAP = 0x4, /* don't add to kernel direct mapping */ + MEMBLOCK_PRESERVED = 0x8, /* preserved pages region */ }; /** @@ -248,6 +249,11 @@ static inline bool memblock_is_nomap(struct memblock_region *m) return m->flags & MEMBLOCK_NOMAP; } +static inline bool memblock_is_preserved(struct memblock_region *m) +{ + return m->flags & MEMBLOCK_PRESERVED; +} + int memblock_search_pfn_nid(unsigned long pfn, unsigned long *start_pfn, unsigned long *end_pfn); void __next_mem_pfn_range(int *idx, int nid, unsigned long *out_start_pfn, diff --git a/mm/pkram.c b/mm/pkram.c index b8d6b549fa6c..08144c18d425 100644 --- a/mm/pkram.c +++ b/mm/pkram.c @@ -1607,6 +1607,7 @@ int __init pkram_create_merged_reserved(struct memblock_type *new) } else if (pkr->base + pkr->size <= r->base) { rgn->base = pkr->base; rgn->size = pkr->size; + rgn->flags = MEMBLOCK_PRESERVED; memblock_set_region_node(rgn, MAX_NUMNODES); nr_preserved += (rgn->size >> PAGE_SHIFT); @@ -1636,6 +1637,7 @@ int __init pkram_create_merged_reserved(struct memblock_type *new) rgn = &new->regions[k]; rgn->base = pkr->base; rgn->size = pkr->size; + rgn->flags = MEMBLOCK_PRESERVED; memblock_set_region_node(rgn, MAX_NUMNODES); nr_preserved += (rgn->size >> PAGE_SHIFT); -- 1.8.3.1 _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec