Hello Kumagai-san, I have a question about memory hole. For example, create_1st_bitmap() calculates memory holes in the part below: int create_1st_bitmap(void) { ... /* * If page is on memory hole, set bit on the 1st-bitmap. */ pfn_bitmap1 = 0; for (i = 0; get_pt_load(i, &phys_start, &phys_end, NULL, NULL); i++) { print_progress(PROGRESS_HOLES, i, num_pt_loads); pfn_start = paddr_to_pfn(phys_start); pfn_end = paddr_to_pfn(phys_end); if (!is_in_segs(pfn_to_paddr(pfn_start))) pfn_start++; for (pfn = pfn_start; pfn < pfn_end; pfn++) { set_bit_on_1st_bitmap(pfn); pfn_bitmap1++; } } pfn_memhole = info->max_mapnr - pfn_bitmap1; What I don't understand well is that the part here: pfn_start = paddr_to_pfn(phys_start); pfn_end = paddr_to_pfn(phys_end); if (!is_in_segs(pfn_to_paddr(pfn_start))) pfn_start++; phys_start and pfn_to_paddr(pfn_start) should belong to the same page frame, so I suspect the pfn_start should be included in vmcore. Looking into kexec-tool side, I don't see additional modification made to phys_start after it's parsed from /proc/iomem or counterpart on EFI interface. Is there any assumption about memory holes behind kernel? Thanks. HATAYAMA, Daisuke