From: Hari Bathini <hbathini@linux.ibm.com> To: Michael Ellerman <mpe@ellerman.id.au>, linuxppc-dev <linuxppc-dev@ozlabs.org> Cc: Ananth N Mavinakayanahalli <ananth@linux.ibm.com>, Mahesh J Salgaonkar <mahesh@linux.ibm.com>, Vasant Hegde <hegdevasant@linux.ibm.com>, Oliver <oohall@gmail.com>, Nicholas Piggin <npiggin@gmail.com>, Daniel Axtens <dja@axtens.net> Subject: Re: [PATCH v5 16/31] powernv/fadump: process the crashdump by exporting it as /proc/vmcore Date: Thu, 5 Sep 2019 02:31:46 +0530 Message-ID: <ed116b02-faf5-d267-3d58-cc7c1fa2399d@linux.ibm.com> (raw) In-Reply-To: <874l1sqoce.fsf@mpe.ellerman.id.au> On 04/09/19 5:12 PM, Michael Ellerman wrote: > Hari Bathini <hbathini@linux.ibm.com> writes: >> diff --git a/arch/powerpc/platforms/powernv/opal-fadump.c b/arch/powerpc/platforms/powernv/opal-fadump.c >> index a755705..10f6086 100644 >> --- a/arch/powerpc/platforms/powernv/opal-fadump.c >> +++ b/arch/powerpc/platforms/powernv/opal-fadump.c >> @@ -41,6 +43,37 @@ static void opal_fadump_update_config(struct fw_dump *fadump_conf, >> fadump_conf->fadumphdr_addr = fdm->fadumphdr_addr; >> } >> >> +/* >> + * This function is called in the capture kernel to get configuration details >> + * from metadata setup by the first kernel. >> + */ >> +static void opal_fadump_get_config(struct fw_dump *fadump_conf, >> + const struct opal_fadump_mem_struct *fdm) >> +{ >> + int i; >> + >> + if (!fadump_conf->dump_active) >> + return; >> + >> + fadump_conf->boot_memory_size = 0; >> + >> + pr_debug("Boot memory regions:\n"); >> + for (i = 0; i < fdm->region_cnt; i++) { >> + pr_debug("\t%d. base: 0x%llx, size: 0x%llx\n", >> + (i + 1), fdm->rgn[i].src, fdm->rgn[i].size); > > Printing the zero-based array off by one (i + 1) seems confusing. Hmmm... Indexing the regions from `0` sounded inappropriate.. > >> + >> + fadump_conf->boot_memory_size += fdm->rgn[i].size; >> + } >> + >> + /* >> + * Start address of reserve dump area (permanent reservation) for >> + * re-registering FADump after dump capture. >> + */ >> + fadump_conf->reserve_dump_area_start = fdm->rgn[0].dest; >> + >> + opal_fadump_update_config(fadump_conf, fdm); >> +} >> + >> /* Initialize kernel metadata */ >> static void opal_fadump_init_metadata(struct opal_fadump_mem_struct *fdm) >> { >> @@ -215,24 +248,114 @@ static void opal_fadump_cleanup(struct fw_dump *fadump_conf) >> pr_warn("Could not reset (%llu) kernel metadata tag!\n", ret); >> } >> >> +/* >> + * Convert CPU state data saved at the time of crash into ELF notes. >> + */ >> +static int __init opal_fadump_build_cpu_notes(struct fw_dump *fadump_conf) >> +{ >> + u32 num_cpus, *note_buf; >> + struct fadump_crash_info_header *fdh = NULL; >> + >> + num_cpus = 1; >> + /* Allocate buffer to hold cpu crash notes. */ >> + fadump_conf->cpu_notes_buf_size = num_cpus * sizeof(note_buf_t); >> + fadump_conf->cpu_notes_buf_size = >> + PAGE_ALIGN(fadump_conf->cpu_notes_buf_size); >> + note_buf = fadump_cpu_notes_buf_alloc(fadump_conf->cpu_notes_buf_size); >> + if (!note_buf) { >> + pr_err("Failed to allocate 0x%lx bytes for cpu notes buffer\n", >> + fadump_conf->cpu_notes_buf_size); >> + return -ENOMEM; >> + } >> + fadump_conf->cpu_notes_buf = __pa(note_buf); >> + >> + pr_debug("Allocated buffer for cpu notes of size %ld at %p\n", >> + (num_cpus * sizeof(note_buf_t)), note_buf); >> + >> + if (fadump_conf->fadumphdr_addr) >> + fdh = __va(fadump_conf->fadumphdr_addr); >> + >> + if (fdh && (fdh->crashing_cpu != FADUMP_CPU_UNKNOWN)) { >> + note_buf = fadump_regs_to_elf_notes(note_buf, &(fdh->regs)); >> + final_note(note_buf); >> + >> + pr_debug("Updating elfcore header (%llx) with cpu notes\n", >> + fdh->elfcorehdr_addr); >> + fadump_update_elfcore_header(fadump_conf, >> + __va(fdh->elfcorehdr_addr)); >> + } >> + >> + return 0; >> +} >> + >> static int __init opal_fadump_process(struct fw_dump *fadump_conf) >> { >> - return -EINVAL; >> + struct fadump_crash_info_header *fdh; >> + int rc = 0; > > No need to initialise rc there. > rc = -EINVAL; and >> + if (!opal_fdm_active || !fadump_conf->fadumphdr_addr) >> + return -EINVAL; >> + >> + /* Validate the fadump crash info header */ >> + fdh = __va(fadump_conf->fadumphdr_addr); >> + if (fdh->magic_number != FADUMP_CRASH_INFO_MAGIC) { >> + pr_err("Crash info header is not valid.\n"); >> + return -EINVAL; return rc; ?? >> + } >> + >> + /* >> + * TODO: To build cpu notes, find a way to map PIR to logical id. >> + * Also, we may need different method for pseries and powernv. >> + * The currently booted kernel could have a different PIR to >> + * logical id mapping. So, try saving info of previous kernel's >> + * paca to get the right PIR to logical id mapping. >> + */ > > That TODO is removed by the end of the series, so please just omit it entirely. > >> + rc = opal_fadump_build_cpu_notes(fadump_conf); >> + if (rc) >> + return rc; > > I think this all runs early in boot, so we don't need to worry about > another CPU seeing the partially initialised core due to there being no > barrier here before we set elfcorehdr_addr? > This is processed in fs/proc/vmcore.c during fs_initcall() and the data within the core is processed much later (initrd). So, I think we are good here... >> + /* >> + * We are done validating dump info and elfcore header is now ready >> + * to be exported. set elfcorehdr_addr so that vmcore module will >> + * export the elfcore header through '/proc/vmcore'. >> + */ >> + elfcorehdr_addr = fdh->elfcorehdr_addr; > >> @@ -283,5 +407,42 @@ int __init opal_fadump_dt_scan(struct fw_dump *fadump_conf, ulong node) >> fadump_conf->ops = &opal_fadump_ops; >> fadump_conf->fadump_supported = 1; >> >> + /* >> + * Check if dump has been initiated on last reboot. >> + */ >> + prop = of_get_flat_dt_prop(dn, "mpipl-boot", NULL); >> + if (prop) { > > if (!prop) > return 1; > > And then everything below can be unindented. > >> + u64 addr = 0; >> + s64 ret; >> + const struct opal_fadump_mem_struct *r_opal_fdm_active; > > * > / \ > /_\ > | > :) Will take care of such instances... I think this should be added to checkpatch.pl >> + >> + ret = opal_mpipl_query_tag(OPAL_MPIPL_TAG_KERNEL, &addr); >> + if ((ret != OPAL_SUCCESS) || !addr) { >> + pr_err("Failed to get Kernel metadata (%lld)\n", ret); >> + return 1; >> + } >> + >> + addr = be64_to_cpu(addr); >> + pr_debug("Kernel metadata addr: %llx\n", addr); >> + >> + opal_fdm_active = __va(addr); >> + r_opal_fdm_active = (void *)addr; > > Why do we need the r_ version? > > We're called early in boot, so we are still in real mode, but that's > fine the CPU will ignore the top bits of the virtual address for us. I don't know if I am missing a trick here or if there is a bug somewhere but trying to access `opal_fdm_active->version` is not working for me.. - Hari
next prev parent reply index Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-08-20 12:04 [PATCH v5 00/31] Add FADump support on PowerNV platform Hari Bathini 2019-08-20 12:04 ` [PATCH v5 01/31] powerpc/fadump: move internal macros/definitions to a new header Hari Bathini 2019-09-03 11:09 ` Michael Ellerman 2019-09-03 16:05 ` Hari Bathini 2019-08-20 12:04 ` [PATCH v5 02/31] powerpc/fadump: move internal code to a new file Hari Bathini 2019-09-03 11:09 ` Michael Ellerman 2019-09-03 16:05 ` Hari Bathini 2019-09-04 9:02 ` Mahesh Jagannath Salgaonkar 2019-09-04 18:26 ` Hari Bathini 2019-08-20 12:04 ` [PATCH v5 03/31] powerpc/fadump: Improve fadump documentation Hari Bathini 2019-08-20 12:04 ` [PATCH v5 04/31] pseries/fadump: move rtas specific definitions to platform code Hari Bathini 2019-08-20 12:04 ` [PATCH v5 05/31] pseries/fadump: introduce callbacks for platform specific operations Hari Bathini 2019-09-03 11:10 ` Michael Ellerman 2019-09-03 16:06 ` Hari Bathini 2019-09-06 6:39 ` Hari Bathini 2019-08-20 12:04 ` [PATCH v5 06/31] pseries/fadump: define register/un-register callback functions Hari Bathini 2019-09-03 11:10 ` Michael Ellerman 2019-09-03 17:15 ` Hari Bathini 2019-08-20 12:04 ` [PATCH v5 07/31] powerpc/fadump: release all the memory above boot memory size Hari Bathini 2019-09-03 11:10 ` Michael Ellerman 2019-09-03 16:27 ` Hari Bathini 2019-08-20 12:05 ` [PATCH v5 08/31] pseries/fadump: move out platform specific support from generic code Hari Bathini 2019-08-20 12:05 ` [PATCH v5 09/31] powerpc/fadump: use FADump instead of fadump for how it is pronounced Hari Bathini 2019-08-20 12:05 ` [PATCH v5 10/31] opal: add MPIPL interface definitions Hari Bathini 2019-09-03 11:10 ` Michael Ellerman 2019-09-03 16:28 ` Hari Bathini 2019-09-04 11:03 ` Michael Ellerman 2019-09-04 11:05 ` Michael Ellerman 2019-08-20 12:05 ` [PATCH v5 11/31] powernv/fadump: add fadump support on powernv Hari Bathini 2019-09-03 11:10 ` Michael Ellerman 2019-09-03 16:31 ` Hari Bathini 2019-09-04 14:33 ` Hari Bathini 2019-09-05 3:11 ` Michael Ellerman 2019-08-20 12:05 ` [PATCH v5 12/31] powernv/fadump: register kernel metadata address with opal Hari Bathini 2019-09-04 11:25 ` Michael Ellerman 2019-08-20 12:05 ` [PATCH v5 13/31] powernv/fadump: reset metadata address during clean up Hari Bathini 2019-08-27 12:00 ` Hari Bathini 2019-08-20 12:05 ` [PATCH v5 14/31] powernv/fadump: define register/un-register callback functions Hari Bathini 2019-09-05 4:15 ` Michael Ellerman 2019-09-05 7:23 ` Michael Ellerman 2019-09-05 9:54 ` Hari Bathini 2019-08-20 12:05 ` [PATCH v5 15/31] powernv/fadump: support copying multiple kernel boot memory regions Hari Bathini 2019-09-04 11:30 ` Michael Ellerman 2019-09-04 20:20 ` Hari Bathini 2019-09-05 3:13 ` Michael Ellerman 2019-08-20 12:06 ` [PATCH v5 16/31] powernv/fadump: process the crashdump by exporting it as /proc/vmcore Hari Bathini 2019-09-04 11:42 ` Michael Ellerman 2019-09-04 21:01 ` Hari Bathini [this message] 2019-08-20 12:06 ` [PATCH v5 17/31] powernv/fadump: Warn before processing partial crashdump Hari Bathini 2019-09-04 11:48 ` Michael Ellerman 2019-08-20 12:06 ` [PATCH v5 18/31] powernv/fadump: handle invalidation of crashdump and re-registraion Hari Bathini 2019-08-20 12:06 ` [PATCH v5 19/31] powerpc/fadump: Update documentation about OPAL platform support Hari Bathini 2019-09-04 11:51 ` Michael Ellerman 2019-09-04 12:08 ` Oliver O'Halloran 2019-09-05 3:15 ` Michael Ellerman 2019-08-20 12:06 ` [PATCH v5 20/31] powerpc/fadump: use smaller offset while finding memory for reservation Hari Bathini 2019-09-04 11:54 ` Michael Ellerman 2019-08-20 12:06 ` [PATCH v5 21/31] powernv/fadump: process architected register state data provided by firmware Hari Bathini 2019-09-04 12:20 ` Michael Ellerman 2019-09-09 13:23 ` Hari Bathini 2019-09-09 15:33 ` Oliver O'Halloran 2019-09-10 8:48 ` Hari Bathini 2019-09-10 14:05 ` Michael Ellerman 2019-09-10 16:10 ` Hari Bathini 2019-08-20 12:06 ` [PATCH v5 22/31] powerpc/fadump: make crash memory ranges array allocation generic Hari Bathini 2019-08-20 12:06 ` [PATCH v5 23/31] powerpc/fadump: consider reserved ranges while releasing memory Hari Bathini 2019-08-20 12:07 ` [PATCH v5 24/31] powerpc/fadump: improve how crashed kernel's memory is reserved Hari Bathini 2019-08-20 12:07 ` [PATCH v5 25/31] powernv/fadump: add support to preserve crash data on FADUMP disabled kernel Hari Bathini 2019-08-20 12:07 ` [PATCH v5 26/31] powerpc/fadump: update documentation about CONFIG_PRESERVE_FA_DUMP Hari Bathini 2019-08-20 12:07 ` [PATCH v5 27/31] powernv/opalcore: export /sys/firmware/opal/core for analysing opal crashes Hari Bathini 2019-08-20 12:07 ` [PATCH v5 28/31] powernv/opalcore: provide an option to invalidate /sys/firmware/opal/core file Hari Bathini 2019-08-20 12:07 ` [PATCH v5 29/31] powerpc/fadump: consider f/w load area Hari Bathini 2019-08-20 12:07 ` [PATCH v5 30/31] powernv/fadump: update documentation about option to release opalcore Hari Bathini 2019-08-20 12:07 ` [PATCH v5 31/31] powernv/fadump: support holes in kernel boot memory area Hari Bathini
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=ed116b02-faf5-d267-3d58-cc7c1fa2399d@linux.ibm.com \ --to=hbathini@linux.ibm.com \ --cc=ananth@linux.ibm.com \ --cc=dja@axtens.net \ --cc=hegdevasant@linux.ibm.com \ --cc=linuxppc-dev@ozlabs.org \ --cc=mahesh@linux.ibm.com \ --cc=mpe@ellerman.id.au \ --cc=npiggin@gmail.com \ --cc=oohall@gmail.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
LinuxPPC-Dev Archive on lore.kernel.org Archives are clonable: git clone --mirror https://lore.kernel.org/linuxppc-dev/0 linuxppc-dev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 linuxppc-dev linuxppc-dev/ https://lore.kernel.org/linuxppc-dev \ linuxppc-dev@lists.ozlabs.org linuxppc-dev@ozlabs.org public-inbox-index linuxppc-dev Example config snippet for mirrors Newsgroup available over NNTP: nntp://nntp.lore.kernel.org/org.ozlabs.lists.linuxppc-dev AGPL code for this site: git clone https://public-inbox.org/public-inbox.git