[PATCH 2/2] makedumpfile: Use max_pfn from mem_map array

Petr Tesarik ptesarik at suse.cz
Tue Apr 1 04:11:26 EDT 2014

On Tue, 1 Apr 2014 05:06:33 +0000
Atsushi Kumagai <kumagai-atsushi at mxc.nes.nec.co.jp> wrote:

> [...]
> >>
> >> In the first place, we shouldn't truncate max_mapnr
> >> based on dom0's mem_section since there are some domU's
> >> memories on Xen dumps. Now, I think a better way for Xen
> >> is just leaving max_mapnr as it is.
> >>
> >> Do you agree with my view ?
> >
> >Definitely! For Xen, info->max_mapnr gives the maximum machine PFN
> >(ie. it corresponds to total memory installed in the machine).
> >
> >The data in mem_section describes Dom0 kernel memory map (and gets
> >initialized from info->dom0_mapnr). It may be substantially smaller
> >than info->max_mapnr...
> Thanks for your confirming.
> >A "clean" solution would be to change info->max_mapnr so that it always
> >gives the maximum physical PFN, but that doesn't fly very well in
> >practice, because memory bitmaps and other stuff must still be sized
> >according to the number of machine PFNs, so I would have to add special
> >cases all around the place...
> I don't know how to capture a dump on Xen well, so do you have any idea
> how to produce the difference between actual memory regions and the ELF
> header like the s390 case ?

I don't quite see what would be the Xen equivalent. Like I said in a
previous mail, memory regions under Xen are sized by Dom0's max_pfn, so
it makes no sense to set this value back from the memory regions.

> If it isn't possible, we don't need to change info->max_mapnr since the
> value calculated from the ELF header must be correct.

Ah, if we're talking about the ELF headers, then the extents are
determined by kexec-tools using information passed on by the Xen
hypervisor on boot. If the available memory is reduced using Xen's mem=
or availmem= command line parameter, then these headers are correct.
AFAIK there is no mechanism to change the amount of RAM used by the
hypervisor at run-time.

In short, I agree that the adjustment should be simply skipped for Xen,
exactly as you proposed in your patch:

+	if (!is_xen_memory()) {
+	       for (i = 0; i < info->num_mem_map; i++) {
+   	            if (info->mem_map_data[i].mem_map == NOT_MEMMAP_ADDR)
+       	                continue;
+           	    max_pfn = MAX(max_pfn, info->mem_map_data[i].pfn_end);
+       	}
+       	info->max_mapnr = MIN(info->max_mapnr, max_pfn);
+	}

Petr T

More information about the kexec mailing list