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