the exiting makedumpfile is almost there... :)

Ken'ichi Ohmichi oomichi at mxs.nes.nec.co.jp
Mon Sep 22 07:14:13 EDT 2008


Hi Jay,

My IA64 linux-2.6.27-rc7 kernel could boot by your patches and its kdump
succeeded, thanks. But I cannot reproduce this problem unfortunately.
Could you send me your kernel .config file to reproduce it ?

And could you please research the reason why the page of virtual address
0xe0000060031417a8 is excluded ?  This patch is for researching it.
Please apply it against makedumpfile-1.2.9, and create a dump file
by makedumpfile with "-e 0xe0000060031417a8" option. The reason why
excluding the page is printed like the following:

  # makedumpfile -cd31 -e 0xe000000062744000 -x vmlinux /proc/vmcore dump.cd31
  The kernel version is not supported.
  The created dumpfile may be incomplete.
  Excluding unnecessary pages        : [100 %]
  PAGE(vaddr:e000000062744000, pfn:189d1) is excluded as FREE PAGE.

  Copying data                       : [100 %]

  The dumpfile is saved to dump.cd31.

  makedumpfile Completed.
  # 


Thanks
Ken'ichi Ohmichi

---
diff -puN backup/makedumpfile-1.2.9/makedumpfile.c makedumpfile/makedumpfile.c
--- backup/makedumpfile-1.2.9/makedumpfile.c	2008-09-04 16:31:58.000000000 +0900
+++ makedumpfile/makedumpfile.c	2008-09-22 20:15:37.000000000 +0900
@@ -3360,6 +3360,9 @@ out:
 	if (!get_mem_map())
 		return FALSE;
 
+	if (info->vaddr_why_excluded)
+		info->pfn_why_excluded = (vaddr_to_paddr(info->vaddr_why_excluded) / info->page_size);
+
 	return TRUE;
 }
 
@@ -3470,8 +3473,14 @@ clear_bit_on_1st_bitmap(unsigned long lo
 }
 
 int
-clear_bit_on_2nd_bitmap(unsigned long long pfn)
+clear_bit_on_2nd_bitmap(unsigned long long pfn, char *page_type)
 {
+	if (info->pfn_why_excluded == pfn) {
+		MSG("\n");
+		MSG("PAGE(vaddr:%lx, pfn:%llx) is excluded as %s.\n",
+		    info->vaddr_why_excluded, info->pfn_why_excluded, page_type);
+		MSG("\n");
+	}
 	return set_bitmap(info->bitmap2, pfn, 0);
 }
 
@@ -3872,7 +3881,7 @@ reset_bitmap_of_free_pages(unsigned long
 				}
 				for (i = 0; i < (1<<order); i++) {
 					pfn = start_pfn + i;
-					clear_bit_on_2nd_bitmap(pfn);
+					clear_bit_on_2nd_bitmap(pfn, "FREE PAGE");
 				}
 				found_free_pages += i;
 
@@ -4114,7 +4123,7 @@ exclude_zero_pages(void)
 			return FALSE;
 
 		if (is_zero_page(buf, info->page_size)) {
-			clear_bit_on_2nd_bitmap(pfn);
+			clear_bit_on_2nd_bitmap(pfn, "ZERO PAGE");
 			pfn_zero++;
 		}
 	}
@@ -4186,7 +4195,7 @@ exclude_unnecessary_pages(void)
 			if ((info->dump_level & DL_EXCLUDE_CACHE)
 			    && (isLRU(flags) || isSwapCache(flags))
 			    && !isPrivate(flags) && !isAnon(mapping)) {
-				clear_bit_on_2nd_bitmap(pfn);
+				clear_bit_on_2nd_bitmap(pfn, "CACHE PAGE");
 				pfn_cache++;
 			}
 			/*
@@ -4195,7 +4204,7 @@ exclude_unnecessary_pages(void)
 			else if ((info->dump_level & DL_EXCLUDE_CACHE_PRI)
 			    && (isLRU(flags) || isSwapCache(flags))
 			    && !isAnon(mapping)) {
-				clear_bit_on_2nd_bitmap(pfn);
+				clear_bit_on_2nd_bitmap(pfn, "CACHE PRIVATE PAGE");
 				pfn_cache_private++;
 			}
 			/*
@@ -4203,7 +4212,7 @@ exclude_unnecessary_pages(void)
 			 */
 			else if ((info->dump_level & DL_EXCLUDE_USER_DATA)
 			    && isAnon(mapping)) {
-				clear_bit_on_2nd_bitmap(pfn);
+				clear_bit_on_2nd_bitmap(pfn, "USER DATA PAGE");
 				pfn_user++;
 			}
 		}
@@ -5794,7 +5803,7 @@ exclude_xen_user_domain(void)
 					size * info->num_load_memory);
 
 			if (!allocated_in_map(pfn)) {
-				clear_bit_on_2nd_bitmap(pfn);
+				clear_bit_on_2nd_bitmap(pfn, "USER DOMAIN PAGE");
 				continue;
 			}
 
@@ -5802,7 +5811,7 @@ exclude_xen_user_domain(void)
 			if (!readmem(VADDR_XEN,
 			      page_info_addr + OFFSET(page_info.count_info),
 		 	      &count_info, sizeof(count_info))) {
-				clear_bit_on_2nd_bitmap(pfn);
+				clear_bit_on_2nd_bitmap(pfn, "USER DOMAIN PAGE");
 				continue;	/* page_info may not exist */
 			}
 			if (!readmem(VADDR_XEN,
@@ -5823,7 +5832,7 @@ exclude_xen_user_domain(void)
 				continue;
 			if ((count_info & 0xffff) && is_select_domain(_domain))
 				continue;
-			clear_bit_on_2nd_bitmap(pfn);
+			clear_bit_on_2nd_bitmap(pfn, "USER DOMAIN PAGE");
 		}
 	}
 
@@ -6162,7 +6171,7 @@ main(int argc, char *argv[])
 
 	info->block_order = DEFAULT_ORDER;
 	message_level = DEFAULT_MSG_LEVEL;
-	while ((opt = getopt_long(argc, argv, "b:cDd:EFfg:hi:RVvXx:", longopts,
+	while ((opt = getopt_long(argc, argv, "b:cDd:Ee:Ffg:hi:RVvXx:", longopts,
 	    NULL)) != -1) {
 		switch (opt) {
 		case 'b':
@@ -6180,6 +6189,9 @@ main(int argc, char *argv[])
 		case 'E':
 			info->flag_elf_dumpfile = 1;
 			break;
+		case 'e':
+			info->vaddr_why_excluded = strtoul(optarg, NULL, 0);
+			break;
 		case 'F':
 			info->flag_flatten = 1;
 			break;
diff -puN backup/makedumpfile-1.2.9/makedumpfile.h makedumpfile/makedumpfile.h
--- backup/makedumpfile-1.2.9/makedumpfile.h	2008-09-04 16:31:58.000000000 +0900
+++ makedumpfile/makedumpfile.h	2008-09-22 18:41:16.000000000 +0900
@@ -725,6 +725,8 @@ struct DumpInfo {
 	int		flag_force;	     /* overwrite existing stuff */
 	int		flag_exclude_xen_dom;/* exclude Domain-U from xen-kdump */
 	unsigned long	vaddr_for_vtop;      /* virtual address for debugging */
+	unsigned long	vaddr_why_excluded;
+	unsigned long long	pfn_why_excluded;
 	long		page_size;           /* size of page */
 	long		page_shift;
 	unsigned long long	max_mapnr;   /* number of page descriptor */




More information about the kexec mailing list