* [PATCH v2 2/7] powerpc: Add PVR & CPU name to dump stack arch description
2019-01-17 13:30 [PATCH v2 1/7] dump_stack: Support adding to the dump stack arch description Michael Ellerman
@ 2019-01-17 13:30 ` Michael Ellerman
2019-01-17 13:30 ` [PATCH v2 3/7] powerpc/64: Add logical PVR to the " Michael Ellerman
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Michael Ellerman @ 2019-01-17 13:30 UTC (permalink / raw)
To: linuxppc-dev; +Cc: tj, akpm, mikey
As soon as we've done some basic setup, add the PVR and CPU name to
the dump stack arch description, which is printed in case of an oops.
eg: Hardware name: ... POWER8E (raw) pvr:0x4b0201
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
arch/powerpc/kernel/cputable.c | 1 +
arch/powerpc/kernel/prom.c | 4 ++++
2 files changed, 5 insertions(+)
v2: Show the PVR as well.
diff --git a/arch/powerpc/kernel/cputable.c b/arch/powerpc/kernel/cputable.c
index 1eab54bc6ee9..8b4520a84612 100644
--- a/arch/powerpc/kernel/cputable.c
+++ b/arch/powerpc/kernel/cputable.c
@@ -16,6 +16,7 @@
#include <linux/init.h>
#include <linux/export.h>
#include <linux/jump_label.h>
+#include <linux/printk.h>
#include <asm/oprofile_impl.h>
#include <asm/cputable.h>
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index 4181ec715f88..ea2c3498067d 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -761,6 +761,10 @@ void __init early_init_devtree(void *params)
dt_cpu_ftrs_scan();
+ /* We can now set the CPU name & PVR for the oops output */
+ dump_stack_add_arch_desc("%s pvr:0x%04lx", cur_cpu_spec->cpu_name,
+ mfspr(SPRN_PVR));
+
/* Retrieve CPU related informations from the flat tree
* (altivec support, boot CPU ID, ...)
*/
--
2.20.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 3/7] powerpc/64: Add logical PVR to the dump stack arch description
2019-01-17 13:30 [PATCH v2 1/7] dump_stack: Support adding to the dump stack arch description Michael Ellerman
2019-01-17 13:30 ` [PATCH v2 2/7] powerpc: Add PVR & CPU name to " Michael Ellerman
@ 2019-01-17 13:30 ` Michael Ellerman
2019-01-17 13:30 ` [PATCH v2 4/7] powerpc: Add device-tree model to " Michael Ellerman
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Michael Ellerman @ 2019-01-17 13:30 UTC (permalink / raw)
To: linuxppc-dev; +Cc: tj, akpm, mikey
If we detect a logical PVR add that to the dump stack arch
description, which is printed in case of an oops.
eg: Hardware name: ... lpvr:0xf000004
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
arch/powerpc/kernel/prom.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
v2: new.
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index ea2c3498067d..38a90097469a 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -371,8 +371,10 @@ static int __init early_init_dt_scan_cpus(unsigned long node,
*/
if (!dt_cpu_ftrs_in_use()) {
prop = of_get_flat_dt_prop(node, "cpu-version", NULL);
- if (prop && (be32_to_cpup(prop) & 0xff000000) == 0x0f000000)
+ if (prop && (be32_to_cpup(prop) & 0xff000000) == 0x0f000000) {
identify_cpu(0, be32_to_cpup(prop));
+ dump_stack_add_arch_desc("lpvr:0x%04x", be32_to_cpup(prop));
+ }
check_cpu_feature_properties(node);
check_cpu_pa_features(node);
--
2.20.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 4/7] powerpc: Add device-tree model to dump stack arch description
2019-01-17 13:30 [PATCH v2 1/7] dump_stack: Support adding to the dump stack arch description Michael Ellerman
2019-01-17 13:30 ` [PATCH v2 2/7] powerpc: Add PVR & CPU name to " Michael Ellerman
2019-01-17 13:30 ` [PATCH v2 3/7] powerpc/64: Add logical PVR to the " Michael Ellerman
@ 2019-01-17 13:30 ` Michael Ellerman
2019-01-17 13:30 ` [PATCH v2 5/7] powerpc: Add ppc_md.name " Michael Ellerman
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Michael Ellerman @ 2019-01-17 13:30 UTC (permalink / raw)
To: linuxppc-dev; +Cc: tj, akpm, mikey
As soon as we know the model of the machine we're on, add it to the
dump stack arch description, which is printed in case of an oops.
eg: Hardware name: model:'IBM,8247-22L'
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
arch/powerpc/kernel/prom.c | 20 ++++++++++++++++++++
1 file changed, 20 insertions(+)
v2: Qualify the string with 'model'.
diff --git a/arch/powerpc/kernel/prom.c b/arch/powerpc/kernel/prom.c
index 38a90097469a..70af26a1eedd 100644
--- a/arch/powerpc/kernel/prom.c
+++ b/arch/powerpc/kernel/prom.c
@@ -34,6 +34,7 @@
#include <linux/of_fdt.h>
#include <linux/libfdt.h>
#include <linux/cpu.h>
+#include <linux/printk.h>
#include <asm/prom.h>
#include <asm/rtas.h>
@@ -687,6 +688,23 @@ static void __init tm_init(void)
static void tm_init(void) { }
#endif /* CONFIG_PPC_TRANSACTIONAL_MEM */
+static int __init
+early_init_dt_scan_model(unsigned long node, const char *uname,
+ int depth, void *data)
+{
+ const char *prop;
+
+ if (depth != 0)
+ return 0;
+
+ prop = of_get_flat_dt_prop(node, "model", NULL);
+ if (prop)
+ dump_stack_add_arch_desc("model:'%s'", prop);
+
+ /* break now */
+ return 1;
+}
+
void __init early_init_devtree(void *params)
{
phys_addr_t limit;
@@ -697,6 +715,8 @@ void __init early_init_devtree(void *params)
if (!early_init_dt_verify(params))
panic("BUG: Failed verifying flat device tree, bad version?");
+ of_scan_flat_dt(early_init_dt_scan_model, NULL);
+
#ifdef CONFIG_PPC_RTAS
/* Some machines might need RTAS info for debugging, grab it now. */
of_scan_flat_dt(early_init_dt_scan_rtas, NULL);
--
2.20.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 5/7] powerpc: Add ppc_md.name to dump stack arch description
2019-01-17 13:30 [PATCH v2 1/7] dump_stack: Support adding to the dump stack arch description Michael Ellerman
` (2 preceding siblings ...)
2019-01-17 13:30 ` [PATCH v2 4/7] powerpc: Add device-tree model to " Michael Ellerman
@ 2019-01-17 13:30 ` Michael Ellerman
2019-01-17 13:30 ` [PATCH v2 6/7] powerpc/powernv: Add opal details " Michael Ellerman
2019-01-17 13:30 ` [PATCH v2 7/7] powerpc/pseries: Add firmware " Michael Ellerman
5 siblings, 0 replies; 7+ messages in thread
From: Michael Ellerman @ 2019-01-17 13:30 UTC (permalink / raw)
To: linuxppc-dev; +Cc: tj, akpm, mikey
As soon as we know the name of the machine description we're using, add
it to the dump stack arch description, which is printed in case of an
oops.
eg: Hardware name: ... machine:pSeries
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
arch/powerpc/kernel/setup-common.c | 3 +++
1 file changed, 3 insertions(+)
v2: Qualify the string with 'machine'.
diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
index ca00fbb97cf8..00d900b1e584 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -21,6 +21,7 @@
#include <linux/delay.h>
#include <linux/initrd.h>
#include <linux/platform_device.h>
+#include <linux/printk.h>
#include <linux/seq_file.h>
#include <linux/ioport.h>
#include <linux/console.h>
@@ -638,6 +639,8 @@ void probe_machine(void)
for (;;);
}
+ dump_stack_add_arch_desc("machine:%s", ppc_md.name);
+
printk(KERN_INFO "Using %s machine description\n", ppc_md.name);
}
--
2.20.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 6/7] powerpc/powernv: Add opal details to dump stack arch description
2019-01-17 13:30 [PATCH v2 1/7] dump_stack: Support adding to the dump stack arch description Michael Ellerman
` (3 preceding siblings ...)
2019-01-17 13:30 ` [PATCH v2 5/7] powerpc: Add ppc_md.name " Michael Ellerman
@ 2019-01-17 13:30 ` Michael Ellerman
2019-01-17 13:30 ` [PATCH v2 7/7] powerpc/pseries: Add firmware " Michael Ellerman
5 siblings, 0 replies; 7+ messages in thread
From: Michael Ellerman @ 2019-01-17 13:30 UTC (permalink / raw)
To: linuxppc-dev; +Cc: tj, akpm, mikey
Once we have unflattened the device tree we can easily grab these opal
version details and add them to dump stack arch description, which is
printed in case of an oops.
eg: Hardware name: ... opal:v6.2
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
arch/powerpc/platforms/powernv/setup.c | 25 +++++++++++++++++++++++++
1 file changed, 25 insertions(+)
v2: Qualify the string with 'opal' and 'mi'. Only use git-id if version
is missing.
diff --git a/arch/powerpc/platforms/powernv/setup.c b/arch/powerpc/platforms/powernv/setup.c
index 14befee4b3f1..1bfb422436fb 100644
--- a/arch/powerpc/platforms/powernv/setup.c
+++ b/arch/powerpc/platforms/powernv/setup.c
@@ -156,8 +156,33 @@ static void __init pnv_setup_arch(void)
/* XXX PMCS */
}
+static void __init pnv_add_dump_stack_arch_desc(void)
+{
+ struct device_node *dn;
+ const char *version;
+
+ dn = of_find_node_by_path("/ibm,opal/firmware");
+ if (!dn)
+ return;
+
+ version = of_get_property(dn, "version", NULL);
+ if (!version)
+ version = of_get_property(dn, "git-id", NULL);
+
+ if (version)
+ dump_stack_add_arch_desc("opal:%s", version);
+
+ version = of_get_property(dn, "mi-version", NULL);
+ if (version)
+ dump_stack_add_arch_desc("mi:%s", version);
+
+ of_node_put(dn);
+}
+
static void __init pnv_init(void)
{
+ pnv_add_dump_stack_arch_desc();
+
/*
* Initialize the LPC bus now so that legacy serial
* ports can be found on it
--
2.20.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH v2 7/7] powerpc/pseries: Add firmware details to dump stack arch description
2019-01-17 13:30 [PATCH v2 1/7] dump_stack: Support adding to the dump stack arch description Michael Ellerman
` (4 preceding siblings ...)
2019-01-17 13:30 ` [PATCH v2 6/7] powerpc/powernv: Add opal details " Michael Ellerman
@ 2019-01-17 13:30 ` Michael Ellerman
5 siblings, 0 replies; 7+ messages in thread
From: Michael Ellerman @ 2019-01-17 13:30 UTC (permalink / raw)
To: linuxppc-dev; +Cc: tj, akpm, mikey
Once we have unflattened the device tree we can easily grab these
firmware version details and add them to dump stack arch description,
which is printed in case of an oops.
Currently /hypervisor only exists on KVM, so if we don't find that look
for something that suggests we're on phyp and if so that's probably a
good guess. The actual content of the ibm,fw-net-version seems to be
a full path so is too long to add to the description.
Hardware name: ... of:'IBM,FW860.42 (SV860_138)' hv:phyp
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
arch/powerpc/platforms/pseries/setup.c | 35 ++++++++++++++++++++++++++
1 file changed, 35 insertions(+)
v2: Use 'of' rather than 'prom' for the open firmware value.
diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index 41f62ca27c63..dfb084f5a573 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -923,6 +923,39 @@ static void pSeries_cmo_feature_init(void)
pr_debug(" <- fw_cmo_feature_init()\n");
}
+static void __init pseries_add_dump_stack_arch_desc(void)
+{
+ struct device_node *dn;
+ const char *prop;
+
+ dn = of_find_node_by_path("/openprom");
+ if (dn) {
+ prop = of_get_property(dn, "model", NULL);
+ if (prop)
+ dump_stack_add_arch_desc("of:'%s'", prop);
+
+ of_node_put(dn);
+ }
+
+ dn = of_find_node_by_path("/hypervisor");
+ if (dn) {
+ prop = of_get_property(dn, "compatible", NULL);
+ if (prop)
+ dump_stack_add_arch_desc("hv:%s", prop);
+
+ of_node_put(dn);
+ } else {
+ dn = of_find_node_by_path("/");
+ if (dn) {
+ prop = of_get_property(dn, "ibm,fw-net-version", NULL);
+ if (prop)
+ dump_stack_add_arch_desc("hv:phyp");
+
+ of_node_put(dn);
+ }
+ }
+}
+
/*
* Early initialization. Relocation is on but do not reference unbolted pages
*/
@@ -930,6 +963,8 @@ static void __init pseries_init(void)
{
pr_debug(" -> pseries_init()\n");
+ pseries_add_dump_stack_arch_desc();
+
#ifdef CONFIG_HVC_CONSOLE
if (firmware_has_feature(FW_FEATURE_LPAR))
hvc_vio_init_early();
--
2.20.1
^ permalink raw reply related [flat|nested] 7+ messages in thread