[PATCH 2/2] makedumpfile/ppc64: get the info of mem reserved for crashkernel
Pingfan Liu
piliu at redhat.com
Sun Aug 20 20:16:57 PDT 2017
----- Original Message -----
> From: "Atsushi Kumagai" <ats-kumagai at wm.jp.nec.com>
> To: "Pingfan Liu" <piliu at redhat.com>, kexec at lists.infradead.org
> Cc: "Hari Bathini" <hbathini at linux.vnet.ibm.com>
> Sent: Thursday, August 17, 2017 4:22:35 PM
> Subject: RE: [PATCH 2/2] makedumpfile/ppc64: get the info of mem reserved for crashkernel
>
> 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 for review., I will send out V2 to obey the schemem.
Regards,
Pingfan
More information about the kexec
mailing list