----- Original Message -----
> From: "Atsushi Kumagai" <ats-kuma...@wm.jp.nec.com>
> To: "Pingfan Liu" <pi...@redhat.com>, kexec@lists.infradead.org
> Cc: "Hari Bathini" <hbath...@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 <pi...@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

_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec

Reply via email to