Hello Pingfan, >In kernel, ppc64 does not export the mem layout by ioresource. So we >need to get the mem info for crashkernel from device tree. > >Signed-off-by: Pingfan Liu <piliu at redhat.com> >--- > arch/ppc64.c | 36 ++++++++++++++++++++++++++++++++++++ > makedumpfile.c | 10 ++++++++++ > makedumpfile.h | 4 ++++ > 3 files changed, 50 insertions(+) > >diff --git a/arch/ppc64.c b/arch/ppc64.c >index 3fd6002..360590e 100644 >--- a/arch/ppc64.c >+++ b/arch/ppc64.c >@@ -617,4 +617,40 @@ vaddr_to_paddr_ppc64(unsigned long vaddr) > return ppc64_vtop_level4(vaddr); > } > >+int arch_crashkernel_mem_size() >+{ >+ const char f_crashsize[] = "/proc/device-tree/chosen/linux,crashkernel-size"; >+ const char f_crashbase[] = "/proc/device-tree/chosen/linux,crashkernel-base"; >+ unsigned long crashk_sz_be, crashk_sz; >+ unsigned long crashk_base_be, crashk_base; >+ uint swap; >+ FILE *fp, *fpb; >+ >+ fp = fopen(f_crashsize, "r"); >+ if (!fp) { >+ ERRMSG("Cannot open %s\n", f_crashsize); >+ return FALSE; >+ } >+ fpb = fopen(f_crashbase, "r"); >+ if (!fp) { >+ ERRMSG("Cannot open %s\n", f_crashbase); >+ fclose(fp); >+ return FALSE; >+ } >+ >+ fread(&crashk_sz_be, sizeof(crashk_sz_be), 1, fp); >+ fread(&crashk_base_be, sizeof(crashk_base_be), 1, fpb); >+ fclose(fp); >+ fclose(fpb); >+ /* dev tree is always big endian */ >+ swap = !is_bigendian(); >+ crashk_sz = swap64(crashk_sz_be, swap); >+ crashk_base = swap64(crashk_base_be, swap); >+ crash_reserved_mem_nr = 1; >+ crash_reserved_mem[0].start = crashk_base; >+ crash_reserved_mem[0].end = crashk_base + crashk_sz - 1; >+ >+ return TRUE; >+} >+ > #endif /* powerpc64 */ >diff --git a/makedumpfile.c b/makedumpfile.c >index f85003a..c599b91 100644 >--- a/makedumpfile.c >+++ b/makedumpfile.c >@@ -10921,10 +10921,20 @@ static int crashkernel_mem_callback(void *data, int nr, > return 0; > } > >+#if !defined(HAVE_ARCH_CRASHKERNEL_MEM_SIZE) >+int arch_crashkernel_mem_size() >+{ >+ return FALSE; >+} >+#endif >+ I hope you follow the scheme for arch dependent code like get_phys_base() to get rid of such ifdef. Please see makedumpfile.h for details, my idea is like below: #ifdef __powerpc64__ #define arch_crashkernel_mem_size() arch_crashkernel_mem_size_ppc64() #ifdef <others> #define arch_crashkernel_mem_size() stub_false() Thanks, Atsushi Kumagai > int is_crashkernel_mem_reserved(void) > { > int ret; > >+ if (arch_crashkernel_mem_size()) >+ return TRUE; >+ > ret = iomem_for_each_line("Crash kernel\n", > crashkernel_mem_callback, NULL); > crash_reserved_mem_nr = ret; >diff --git a/makedumpfile.h b/makedumpfile.h >index 8a05794..48c1423 100644 >--- a/makedumpfile.h >+++ b/makedumpfile.h >@@ -987,6 +987,8 @@ unsigned long long vaddr_to_paddr_ppc64(unsigned long vaddr); > #define get_kaslr_offset(X) stub_false() > #define vaddr_to_paddr(X) vaddr_to_paddr_ppc64(X) > #define is_phys_addr(X) stub_true_ul(X) >+ >+#define HAVE_ARCH_CRASHKERNEL_MEM_SIZE > #endif /* powerpc64 */ > > #ifdef __powerpc32__ /* powerpc32 */ >@@ -1939,6 +1941,8 @@ int iomem_for_each_line(char *match, int (*callback)(void *data, int nr, > unsigned long base, > unsigned long length), > void *data); >+int is_bigendian(void); >+int arch_crashkernel_mem_size(void); > > > /* >-- >2.7.4 >