[Skiboot] [PATCH v7 22/22] fadump: Save crashing cpu data
Michael Neuling
mikey at neuling.org
Thu May 9 16:33:54 AEST 2019
On Sat, 2019-04-13 at 14:45 +0530, Vasant Hegde wrote:
> Crashing CPU detail is required to get proper backtrace from core file.
> Save crashing CPU data before triggering MPIPL. During MPIPL boot
> pass this detail to Host Linux via device tree.
This seems to be just saving *which* CPU crashing (via the PIR).
This could made clearer in the commit message and subject.
> Signed-off-by: Vasant Hegde <hegdevasant at linux.vnet.ibm.com>
> ---
> core/opal-dump.c | 9 +++++++++
> hdata/spira.c | 8 ++++++++
> hw/sbe-p9.c | 4 ++++
> include/mem-map.h | 9 ++++++++-
> include/opal-dump.h | 8 ++++++++
> 5 files changed, 37 insertions(+), 1 deletion(-)
>
> diff --git a/core/opal-dump.c b/core/opal-dump.c
> index f06739937..9d3e56b7e 100644
> --- a/core/opal-dump.c
> +++ b/core/opal-dump.c
> @@ -16,6 +16,7 @@
>
> #define pr_fmt(fmt) "DUMP: " fmt
>
> +#include <cpu.h>
> #include <device.h>
> #include <mem-map.h>
> #include <mem_region.h>
> @@ -349,6 +350,14 @@ static void adjust_opal_dump_size(struct dt_node
> *dump_node)
> add_dump_reserve_node(dump_node);
> }
>
> +void opal_dump_save_metadata(void)
> +{
> + struct dump_metadata *m = (struct dump_metadata
> *)(DUMP_METADATA_AREA_BASE);
> +
> + m->crashing_cpu = this_cpu()->pir;
> + prlog(PR_NOTICE, "Crashing CPU = 0x%x\n", m->crashing_cpu);
> +}
> +
> void opal_dump_init(void)
> {
> struct dt_node *dump_node;
> diff --git a/hdata/spira.c b/hdata/spira.c
> index 84a0094f1..e1b544da0 100644
> --- a/hdata/spira.c
> +++ b/hdata/spira.c
> @@ -1118,6 +1118,10 @@ static void opal_dump_add_result_table(const struct
> iplparams_iplparams *p)
> struct fadump_section *fadump_section;
> struct fadump *result_table;
> struct dt_node *dump_node;
> + struct dump_metadata *m;
> +
> + m = (struct dump_metadata *)(DUMP_METADATA_AREA_BASE -
> + SKIBOOT_BASE + DUMP_DEST_SKIBOOT_BASE);
>
> dump_node = dt_find_by_path(opal_node, "dump");
> if (!dump_node)
> @@ -1192,6 +1196,10 @@ static void opal_dump_add_result_table(const struct
> iplparams_iplparams *p)
> /* Add architected register data to result-table */
> opal_dump_add_arch_regs(dump_node, result_table, &j);
>
> + /* Fill crashing CPU details */
> + result_table->crashing_cpu = cpu_to_be32(m->crashing_cpu);
> + prlog(PR_NOTICE, "DUMP: Crashed cpu = 0x%x\n", m->crashing_cpu);
> +
> result_table->section_count = cpu_to_be16(j);
> /* Actual property size */
> prop_size = sizeof(struct fadump) + (j * sizeof(struct fadump_section));
> diff --git a/hw/sbe-p9.c b/hw/sbe-p9.c
> index bf3ca9e68..ac890a2d9 100644
> --- a/hw/sbe-p9.c
> +++ b/hw/sbe-p9.c
> @@ -50,6 +50,7 @@
> #include <errorlog.h>
> #include <lock.h>
> #include <opal.h>
> +#include <opal-dump.h>
> #include <sbe-p9.h>
> #include <skiboot.h>
> #include <timebase.h>
> @@ -971,6 +972,9 @@ void p9_sbe_terminate(void)
> return;
> }
>
> + /* Save crashing CPU details */
> + opal_dump_save_metadata();
> +
> dt_for_each_compatible(dt_root, xn, "ibm,xscom") {
> chip_id = dt_get_chip_id(xn);
>
> diff --git a/include/mem-map.h b/include/mem-map.h
> index 0cb4d5da4..a4b74f9d9 100644
> --- a/include/mem-map.h
> +++ b/include/mem-map.h
> @@ -119,7 +119,14 @@
> * memory after moving memory content from source to destination memory.
> */
> #define MDRT_TABLE_BASE (SKIBOOT_BASE + 0x01c00000)
> -#define MDRT_TABLE_SIZE 0x00010000
> +#define MDRT_TABLE_SIZE 0x0000f000
> +
> +/*
> + * This is our dump meta data area. We will use this memory to save
> + * crashing CPU details before triggering MPIPL.
> + */
> +#define DUMP_METADATA_AREA_BASE (SKIBOOT_BASE + 0x01c0f000)
> +#define DUMP_METADATA_AREA_SIZE 0x1000
>
> /* Total size of the above area
> *
> diff --git a/include/opal-dump.h b/include/opal-dump.h
> index d71691e13..a12b4c5c2 100644
> --- a/include/opal-dump.h
> +++ b/include/opal-dump.h
> @@ -124,7 +124,15 @@ struct proc_reg_data {
> } __packed;
>
>
> +/* Meta data to capture before triggering MPIPL */
> +struct dump_metadata {
> + uint32_t crashing_cpu;
> +};
> +
> /* init opal dump */
> extern void opal_dump_init(void);
>
> +/* Save metadata before triggering MPIPL */
> +extern void opal_dump_save_metadata(void);
> +
> #endif /* __OPAL_DUMP_H */
More information about the Skiboot
mailing list