LinuxPPC-Dev Archive on lore.kernel.org
 help / color / Atom feed
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


  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 publically 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