Add "--mem-usage" support for s390x

Michael Holzheu holzheu at linux.vnet.ibm.com
Fri Sep 26 04:34:41 PDT 2014


On Fri, 26 Sep 2014 16:55:46 +0800
Baoquan He <bhe at redhat.com> wrote:

> On 09/26/14 at 10:10am, Michael Holzheu wrote:
> > On Thu, 25 Sep 2014 17:44:12 +0800
> > Baoquan He <bhe at redhat.com> wrote:
> > 
> > > On 09/24/14 at 05:19pm, Michael Holzheu wrote:
> > > > On Tue, 23 Sep 2014 10:40:58 +0800
> > > > Baoquan He <bhe at redhat.com> wrote:
> > 
> > [snip]
> > 
> 
> > > > For s390x this is not so easy because vmalloc_start is dependent
> > > > on the memory size of the system (see setup_memory_end()
> > > > in arch/s390/kernel/setup.c). Unfortunately "info->max_mapnr"
> > > > is not set at that time.
> > > 
> > > I am not aware of s390 arch and memory layout. But I can explain what
> > > those versiondep_info are used for, hope they can help. In fact in
> > > x86_64, page_offset is got for set_kcore_vmcoreinfo(), there the
> > > vmcoreinfo_addr need be converted to kvaddr. Since vmcoreinfo_addr is a
> > > physical addr, we can't use it directly. And
> > > VMALLOC_START/VMEMMAP_START/MODULES_VADDR are all used to filter this
> > > virtual addr space region since our vmcore only care about the physical
> > > ram addr region.
> > > 
> > > If you need get these before they are used for s390 arch. If necessary
> > > you can build a different code flow if you can achive the goal. All
> > > these are all used to get dumpable load segments from kcore.
> > 
> > Isn't this a chicken-and-egg problem? In order to determine vmalloc start
> > I have to be able to read memory. But in order to read memory I have
> > to call get_kcore_dump_loads() first.
> > 
> > What about using /proc/iomem to find out if an address is a real address?
> 
> Well, that's good it works for s390. Anyway in get_kcore_dump_loads() it
> just gets the physical ram region, and filter out the unwanted region,
> so your method is good. In x86_64, the is_vmalloc_addr_x86_64 is not
> only filtering the vmalloc, but vmmemmap and modules_vaadr region. For
> simplicity it's only named as is_vmalloc_addr.

Not sure if I understood, why ths is_real_addr() function does not
work for x86_64.

Also for x86 all three areas, vmalloc, vmemmap, and modules_vaddr, are
virtual memory regions with addresses outside of the the memory ranges
where /proc/iommem reports physical memory, right?

So the new is_real_addr() function should return false for that areas.

Michael




More information about the kexec mailing list