[PATCH] makedumpfile: Shrink the time for creating 1st-bitmap (Re: problems in kdump kernel if 'maxcpus=1' not specified?)
Ken'ichi Ohmichi
oomichi at mxs.nes.nec.co.jp
Thu Jul 17 02:35:34 EDT 2008
Hi Jay,
Ken'ichi Ohmichi wrote:
> I created the attached patch that makedumpfile does not scan
> memory gap when creating 1st-bitmap. Could you please try it ?
> This patch is for makedumpfile-1.2.6.
I found a bug in the patch I sent before, and I fixed it in the
attached patch. Could you please try this patch ?
Sorry for my mistake.
Thanks
Ken'ichi Ohmichi
diff -puN backup/v1.2.6/makedumpfile.c makedumpfile/makedumpfile.c
--- backup/v1.2.6/makedumpfile.c 2008-06-05 15:17:17.000000000 +0900
+++ makedumpfile/makedumpfile.c 2008-07-18 00:14:34.000000000 +0900
@@ -3987,8 +3987,10 @@ exclude_free_page()
int
create_1st_bitmap()
{
+ int i;
char *buf = NULL;
- unsigned long long pfn, paddr;
+ unsigned long long pfn, pfn_start, pfn_end, pfn_bitmap1;
+ struct pt_load_segment *pls;
off_t offset_page;
int ret = FALSE;
@@ -4021,13 +4023,19 @@ create_1st_bitmap()
/*
* If page is on memory hole, set bit on the 1st-bitmap.
*/
- for (pfn = 0, paddr = 0; pfn < info->max_mapnr;
- pfn++, paddr += info->page_size) {
- if (is_in_segs(paddr))
+ for (i = pfn_bitmap1 = 0; i < info->num_load_memory; i++) {
+ pls = &info->pt_load_segments[i];
+ pfn_start = pls->phys_start >> PAGESHIFT();
+ pfn_end = pls->phys_end >> PAGESHIFT();
+ if (!is_in_segs(pfn_start << PAGESHIFT()))
+ pfn_start++;
+ for (pfn = pfn_start; pfn < pfn_end; pfn++) {
set_bit_on_1st_bitmap(pfn);
- else
- pfn_memhole++;
+ pfn_bitmap1++;
+ }
}
+ pfn_memhole = info->max_mapnr - pfn_bitmap1;
+
if (!sync_1st_bitmap())
goto out;
More information about the kexec
mailing list