On 10/28/14 at 04:34am, Atsushi Kumagai wrote: > >On 10/23/14 at 06:56am, Atsushi Kumagai wrote: > >> I noticed that is_vmalloc_addr_x86_64() can't be used as is_phys_addr() > >> due to the "kaslr issue". I fixed it in the common path as below, but > >> --mem-usage still has the same issue since initial() will be invoked > >> after get_kcore_dump_loads(). > >> > >> http://lists.infradead.org/pipermail/kexec/2014-October/012743.html > >> > >> I know it's so late, but I began to think the current implementation > >> that invokes vaddr_to_paddr_XXX() before initial() is bad: > >> > >> show_mem_usage() > >> + get_kcore_dump_loads() > >> + process_dump_load() > >> + vaddr_to_paddr_XXX() > >> + initial() > > > >This is a bug. Seems that get_kcore_dump_loads() has to be called in > >initial(). Since dumped vmcore need contains kernel text segment. > >Without setting correct value for MODULES_VADDR, it will be equal to > >__START_KERNEL_map, then calling is_vmalloc_addr() will filter kernel > >text mapping segment too. > > > >Now it seems only one way to solve this, that is moving > >get_kcore_dump_loads() into initial() just after > >get_value_for_old_linux() is called. > > I agree, I'll do it, thanks. Actually hpa haven't merged my patchset. Seems he doesn't like current kaslr design. I am not sure if we have gone too far to adjust makedumpfile code to support kaslr. I'll ask him for comments or plans. Thanks Baoquan > > > Atsushi Kumagai > > >> ... > >> > >> vaddr_to_paddr_XXX() does VtoP translation *properly*, so it needs > >> several symbols. This design is OK since it's a general method. > >> OTOH, we need a kludge which can be used under any situations and > >> should use it for --mem-usage: > >> > >> VtoP_kludge_s390x(unsigned long vaddr) > >> { > >> /* s390 has 1:1 VtoP mapping that starts with zero. */ > >> return vaddr; > >> } > >> > >> also x86_64's can be implemented like below: > >> > >> VtoP_kludge_x86_64(unsigned long vaddr) > >> { > >> /* if the address is direct mapped, it's easy to translate. */ > >> unsigned long paddr = vaddr - PAGE_OFFSET; > >> return paddr; > >> } > >>