[PATCH] makedumpfile: Enable compressed dump formats for Xen

Atsushi Kumagai ats-kumagai at wm.jp.nec.com
Tue Jul 28 00:45:04 PDT 2015

Hello Petr,

>Hello all,
>this patch enables compressed file formats for Xen. I was suprized
>that nobody noticed earlier, given how trivial the change is. ;-)

Good catch.
Since there is no Xen dump in the kdump-compressed format, is it also
necessary to fix the crash ?

BTW, I think we should fix the manuals as well. There are some wrong
statements "-E option must be specified with this option" and
some examples implicate that -E option is necessary to Xen dump.

Atsushi Kumagai

>Originally, the compressed KDUMP format was not sufficient for Xen
>Dom0 dumps, because it did not contain required Xen-specific
>information. However, all this info is stored in ELF notes, which
>have been present in the compressed file since version 4, so there
>is no longer any reason to restrict Xen dumps to ELF only.
>One minor fix is necessary. In a Xen dump, PFN refers to physical
>pages _inside_ Dom0, but when compressing the whole file, the machine
>pages are used in fact (although the variable is still called pfn).
>Consequently, readmem() must interpret the address as a machine
>address rather than Dom0 physical address when saving Xen files.
>Signed-off-by: Petr Tesarik <ptesarik at suse.com>
>diff --git a/makedumpfile.c b/makedumpfile.c
>index de40932..2636036 100644
>--- a/makedumpfile.c
>+++ b/makedumpfile.c
>@@ -6015,9 +6015,11 @@ int
> read_pfn(mdf_pfn_t pfn, unsigned char *buf)
> {
> 	unsigned long long paddr;
>+	int type_addr;
> 	paddr = pfn_to_paddr(pfn);
>-	if (!readmem(PADDR, paddr, buf, info->page_size)) {
>+	type_addr = is_xen_memory() ? MADDR_XEN : PADDR;
>+	if (!readmem(type_addr, paddr, buf, info->page_size)) {
> 		ERRMSG("Can't get the page data.\n");
> 		return FALSE;
> 	}
>@@ -7654,12 +7656,6 @@ initial_xen(void)
> 	MSG("Xen is not supported on powerpc.\n");
> 	return FALSE;
> #else
>-	if(!info->flag_elf_dumpfile && !info->flag_dmesg) {
>-		MSG("Specify '-E' option for Xen.\n");
>-		MSG("Commandline parameter is invalid.\n");
>-		MSG("Try `makedumpfile --help' for more information.\n");
>-		return FALSE;
>-	}
> #ifndef __x86_64__
> 	if (DL_EXCLUDE_ZERO < info->max_dump_level) {
> 		MSG("Dump_level is invalid. It should be 0 or 1.\n");

More information about the kexec mailing list