Message ID | 20131115173132.1121.61175.stgit@localhost.localdomain (mailing list archive) |
---|---|
State | Accepted, archived |
Delegated to: | Benjamin Herrenschmidt |
Headers | show |
On Fri, 2013-11-15 at 23:01 +0530, Hari Bathini wrote: > When CONFIG_SPARSEMEM_VMEMMAP option is used in kernel, makedumpfile fails > to filter vmcore dump as it fails to do vmemmap translations. So far > dump filtering on ppc64 never had to deal with vmemmap addresses seperately > as vmemmap regions where mapped in zone normal. But with the inclusion of > CONFIG_SPARSEMEM_VMEMMAP config option in kernel, this vmemmap address > translation support becomes necessary for dump filtering. For vmemmap adress > translation, few kernel symbols are needed by dump filtering tool. This patch > adds those symbols to vmcoreinfo, which a dump filtering tool can use for > filtering the kernel dump. Tested this changes successfully with makedumpfile > tool that supports vmemmap to physical address translation outside zone normal. > > Signed-off-by: Hari Bathini <hbathini@linux.vnet.ibm.com> > --- > arch/powerpc/include/asm/pgalloc-64.h | 4 ++++ > arch/powerpc/kernel/machine_kexec.c | 12 ++++++++++++ > 2 files changed, 16 insertions(+) > > diff --git a/arch/powerpc/include/asm/pgalloc-64.h b/arch/powerpc/include/asm/pgalloc-64.h > index f65e27b..33e507a 100644 > --- a/arch/powerpc/include/asm/pgalloc-64.h > +++ b/arch/powerpc/include/asm/pgalloc-64.h > @@ -17,6 +17,10 @@ struct vmemmap_backing { > unsigned long virt_addr; > }; > > +#ifdef CONFIG_SPARSEMEM_VMEMMAP > +extern struct vmemmap_backing *vmemmap_list; > +#endif /* CONFIG_SPARSEMEM_VMEMMAP */ In general you don't need #ifdefs around externs, they just add noise. The exception is when the type you're using isn't defined, but that isn't the case here AFAICS. cheers
diff --git a/arch/powerpc/include/asm/pgalloc-64.h b/arch/powerpc/include/asm/pgalloc-64.h index f65e27b..33e507a 100644 --- a/arch/powerpc/include/asm/pgalloc-64.h +++ b/arch/powerpc/include/asm/pgalloc-64.h @@ -17,6 +17,10 @@ struct vmemmap_backing { unsigned long virt_addr; }; +#ifdef CONFIG_SPARSEMEM_VMEMMAP +extern struct vmemmap_backing *vmemmap_list; +#endif /* CONFIG_SPARSEMEM_VMEMMAP */ + /* * Functions that deal with pagetables that could be at any level of * the table need to be passed an "index_size" so they know how to diff --git a/arch/powerpc/kernel/machine_kexec.c b/arch/powerpc/kernel/machine_kexec.c index e1ec57e..88a7fb4 100644 --- a/arch/powerpc/kernel/machine_kexec.c +++ b/arch/powerpc/kernel/machine_kexec.c @@ -18,6 +18,7 @@ #include <linux/ftrace.h> #include <asm/machdep.h> +#include <asm/pgalloc.h> #include <asm/prom.h> #include <asm/sections.h> @@ -75,6 +76,17 @@ void arch_crash_save_vmcoreinfo(void) #ifndef CONFIG_NEED_MULTIPLE_NODES VMCOREINFO_SYMBOL(contig_page_data); #endif +#if defined(CONFIG_PPC64) && defined(CONFIG_SPARSEMEM_VMEMMAP) + VMCOREINFO_SYMBOL(vmemmap_list); + VMCOREINFO_SYMBOL(mmu_vmemmap_psize); + VMCOREINFO_SYMBOL(mmu_psize_defs); + VMCOREINFO_STRUCT_SIZE(vmemmap_backing); + VMCOREINFO_OFFSET(vmemmap_backing, list); + VMCOREINFO_OFFSET(vmemmap_backing, phys); + VMCOREINFO_OFFSET(vmemmap_backing, virt_addr); + VMCOREINFO_STRUCT_SIZE(mmu_psize_def); + VMCOREINFO_OFFSET(mmu_psize_def, shift); +#endif } /*
When CONFIG_SPARSEMEM_VMEMMAP option is used in kernel, makedumpfile fails to filter vmcore dump as it fails to do vmemmap translations. So far dump filtering on ppc64 never had to deal with vmemmap addresses seperately as vmemmap regions where mapped in zone normal. But with the inclusion of CONFIG_SPARSEMEM_VMEMMAP config option in kernel, this vmemmap address translation support becomes necessary for dump filtering. For vmemmap adress translation, few kernel symbols are needed by dump filtering tool. This patch adds those symbols to vmcoreinfo, which a dump filtering tool can use for filtering the kernel dump. Tested this changes successfully with makedumpfile tool that supports vmemmap to physical address translation outside zone normal. Signed-off-by: Hari Bathini <hbathini@linux.vnet.ibm.com> --- arch/powerpc/include/asm/pgalloc-64.h | 4 ++++ arch/powerpc/kernel/machine_kexec.c | 12 ++++++++++++ 2 files changed, 16 insertions(+)