After kernel commit ba72b4c8cf60 ("mm/sparsemem: support sub-section hotplug"), when hot-removed, section_mem_map is still encoded with section start pfn, not NULL. This break the current makedumpfile. Whatever section_mem_map coding info after hot-removed, it is reliable just to work on SECTION_MARKED_PRESENT bit. Fixing makedumpfile by this way. Signed-off-by: Pingfan Liu <piliu@xxxxxxxxxx> To: kexec@xxxxxxxxxxxxxxxxxxx Cc: Kazuhito Hagio <k-hagio@xxxxxxxxxxxxx> Cc: Baoquan He <bhe@xxxxxxxxxx> Cc: David Hildenbrand <david@xxxxxxxxxx> Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> Cc: Dan Williams <dan.j.williams@xxxxxxxxx> Cc: Oscar Salvador <osalvador@xxxxxxx> Cc: Michal Hocko <mhocko@xxxxxxxxxx> Cc: Qian Cai <cai@xxxxxx> --- makedumpfile.c | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/makedumpfile.c b/makedumpfile.c index e290fbd..ab40a58 100644 --- a/makedumpfile.c +++ b/makedumpfile.c @@ -3406,8 +3406,6 @@ section_mem_map_addr(unsigned long addr, unsigned long *map_mask) map = ULONG(mem_section + OFFSET(mem_section.section_mem_map)); mask = SECTION_MAP_MASK; *map_mask = map & ~mask; - if (map == 0x0) - *map_mask |= SECTION_MARKED_PRESENT; map &= mask; free(mem_section); @@ -3453,10 +3451,8 @@ validate_mem_section(unsigned long *mem_sec, mem_map = NOT_MEMMAP_ADDR; } else { mem_map = section_mem_map_addr(section, &map_mask); + /* for either no mem_map or hot-removed */ if (!(map_mask & SECTION_MARKED_PRESENT)) { - return FALSE; - } - if (mem_map == 0) { mem_map = NOT_MEMMAP_ADDR; } else { mem_map = sparse_decode_mem_map(mem_map, -- 2.7.5 _______________________________________________ kexec mailing list kexec@xxxxxxxxxxxxxxxxxxx http://lists.infradead.org/mailman/listinfo/kexec