diff mbox series

[6/6] powerpc/pseries: Add firmware details to dump stack arch description

Message ID 20220928134025.1739909-6-mpe@ellerman.id.au (mailing list archive)
State Changes Requested
Headers show
Series [1/6] powerpc: Add ppc_md.name to dump stack arch description | expand

Commit Message

Michael Ellerman Sept. 28, 2022, 1:40 p.m. UTC
Add firmware version details to the 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.

eg: 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 | 36 ++++++++++++++++++++++++++
 1 file changed, 36 insertions(+)

Comments

Nathan Lynch Sept. 28, 2022, 8:14 p.m. UTC | #1
Michael Ellerman <mpe@ellerman.id.au> writes:

> Add firmware version details to the 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.

My only reservation is that ibm,fw-net-version seems to be unspecified
and could disappear in future firmware versions.

/ibm,powervm-partition would be the best PAPR-specified property for
this purpose, but I don't see it on a P8/860 partition I checked,
unfortunately. I do see it on a P9. Presumably it's present in device
trees on PowerVM P9 systems and later, but it's probably too new to use
for this.

/ibm,lpar-capable "indicates that the platform is capable of supporting
logical partitioning and is only present on such systems." This one is
present on the P8.

So consider this a weak suggestion to replace the ibm,fw-net-version
check with ibm,lpar-capable. But I don't want to bikeshed it, overall
the series looks good.

>
> eg: Hardware name: ... of:'IBM,FW860.42 (SV860_138)' hv:phyp

Will this info get printed during boot as well? There are many times it
would have been useful to me when looking at logs from non-oopsed
kernels.
Michael Ellerman Sept. 30, 2022, 4:28 a.m. UTC | #2
Nathan Lynch <nathanl@linux.ibm.com> writes:
> Michael Ellerman <mpe@ellerman.id.au> writes:
>
>> Add firmware version details to the 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.
>
> My only reservation is that ibm,fw-net-version seems to be unspecified
> and could disappear in future firmware versions.

Yeah good point.

> /ibm,powervm-partition would be the best PAPR-specified property for
> this purpose, but I don't see it on a P8/860 partition I checked,
> unfortunately. I do see it on a P9. Presumably it's present in device
> trees on PowerVM P9 systems and later, but it's probably too new to use
> for this.

I'll look for both, it's easy enough.

> /ibm,lpar-capable "indicates that the platform is capable of supporting
> logical partitioning and is only present on such systems." This one is
> present on the P8.

But conceivably qemu/KVM could provide that property, which would defeat
the purpose here which is to differentiate which actual hypervisor we're
under.

>> eg: Hardware name: ... of:'IBM,FW860.42 (SV860_138)' hv:phyp
>
> Will this info get printed during boot as well? There are many times it
> would have been useful to me when looking at logs from non-oopsed
> kernels.

No it's not. But you're right that would often be useful.

I think we can print it at the end of probe_machine().

I'll send a v2.

cheers
diff mbox series

Patch

diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
index 5e44c65a032c..f0ce8256ebb8 100644
--- a/arch/powerpc/platforms/pseries/setup.c
+++ b/arch/powerpc/platforms/pseries/setup.c
@@ -41,6 +41,7 @@ 
 #include <linux/of_pci.h>
 #include <linux/memblock.h>
 #include <linux/swiotlb.h>
+#include <linux/seq_buf.h>
 
 #include <asm/mmu.h>
 #include <asm/processor.h>
@@ -1011,6 +1012,39 @@  static void __init 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)
+			seq_buf_printf(&ppc_hw_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)
+			seq_buf_printf(&ppc_hw_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)
+				seq_buf_printf(&ppc_hw_desc, "hv:phyp ");
+
+			of_node_put(dn);
+		}
+	}
+}
+
 /*
  * Early initialization.  Relocation is on but do not reference unbolted pages
  */
@@ -1018,6 +1052,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();