From decc10d4cf61fd291ad87f92b7119522b29b4431 Mon Sep 17 00:00:00 2001 From: Neil Horman Date: Wed, 22 Aug 2007 19:19:59 +0000 Subject: [PATCH] Resolves bz 250341 --- kexec-tools-1.101-makedumpfile-xen-syms.patch | 81 +++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 kexec-tools-1.101-makedumpfile-xen-syms.patch diff --git a/kexec-tools-1.101-makedumpfile-xen-syms.patch b/kexec-tools-1.101-makedumpfile-xen-syms.patch new file mode 100644 index 0000000..207a43f --- /dev/null +++ b/kexec-tools-1.101-makedumpfile-xen-syms.patch @@ -0,0 +1,81 @@ +--- kexec-tools-1.101/makedumpfile/makedumpfile.c.orig 2007-07-27 13:16:28.000000000 -0400 ++++ kexec-tools-1.101/makedumpfile/makedumpfile.c 2007-08-22 13:20:04.000000000 -0400 +@@ -5195,6 +5195,9 @@ + int i; + struct pt_load_segment *pls; + int ret = FALSE; ++ unsigned long long paddr; ++ off_t offset_page; ++ unsigned char *buf = NULL; + + /* + * NOTE: the first half of bitmap is not used for Xen extraction +@@ -5211,6 +5214,11 @@ + strerror(errno)); + goto out; + } ++ if ((buf = malloc(info->page_size)) == NULL) { ++ ERRMSG("Can't allocate memory for the page. %s\n", ++ strerror(errno)); ++ goto out; ++ } + + pfn = 0; + for (i = 0; i < info->num_load_memory; i++) { +@@ -5255,11 +5263,35 @@ + * - xen heap area, or + * - selected domain page + */ +- if (_domain == 0 || ++ if (!(_domain == 0 || + (info->xen_heap_start <= pfn && pfn < info->xen_heap_end) || +- ((count_info & 0xffff) && is_select_domain(info, _domain))) { +- set_bitmap(bm2.buf, pfn%PFN_BUFBITMAP, 1); ++ ((count_info & 0xffff) && is_select_domain(info, _domain)))) { ++ continue; ++ } ++ if (info->dump_level & DL_EXCLUDE_ZERO) { ++ paddr = (unsigned long long)pfn * info->page_size; ++ offset_page = paddr_to_offset(info, paddr); ++ if (!offset_page) { ++ ERRMSG("Can't convert physaddr(%llx) to a offset.\n", ++ paddr); ++ goto out; ++ } ++ if (lseek(info->fd_memory, offset_page, ++ SEEK_SET) == (off_t)-1) { ++ ERRMSG("Can't seek the dump memory(%s). %s\n", ++ info->name_memory, strerror(errno)); ++ goto out; ++ } ++ if (read(info->fd_memory, buf, info->page_size) ++ != info->page_size) { ++ ERRMSG("Can't read the dump memory(%s). %s\n", ++ info->name_memory, strerror(errno)); ++ goto out; ++ } ++ if (is_zero_page(buf, info->page_size)) ++ continue; + } ++ set_bitmap(bm2.buf, pfn%PFN_BUFBITMAP, 1); + } + } + +@@ -5275,6 +5307,8 @@ + out: + if (bm2.buf != NULL) + free(bm2.buf); ++ if (buf != NULL) ++ free(buf); + + return ret; + } +@@ -5546,7 +5580,7 @@ + MSG("-E must be specified with --xen-syms or --xen-vmcoreinfo.\n"); + goto out; + } +- info->dump_level = DL_EXCLUDE_XEN; ++ info->dump_level |= DL_EXCLUDE_XEN; + return handle_xen(info); + + } else if (info->flag_rearrange) {