Re: [PATCH v2 1/6] powerpc: Add hardware description string

2022-09-29 Thread Michael Ellerman
Nathan Lynch  writes:
> Michael Ellerman  writes:
>> Create a hardware description string, which we will use to record
>> various details of the hardware platform we are running on.
>>
>> Print the accumulated description at boot, and use it to set the generic
>> description which is printed in oopses.
>>
>> To begin with add ppc_md.name, aka the "machine description".
>>
>> Example output at boot with the full series applied:
>>
>>   Linux version 6.0.0-rc2-gcc-11.1.0-00199-g893f9007a5ce-dirty 
>> (michael@alpine1-p1) (powerpc64-linux-gcc (GCC) 11.1.0, GNU ld (GNU 
>> Binutils) 2.36.1) #844 SMP Thu Sep 29 22:29:53 AEST 2022
>>   Hardware name: model:'IBM pSeries (emulated by qemu)' cpu:'POWER8 (raw)' 
>> pvr:0x4d0200 lpvr:0xf04 of:'SLOF,HEAD' machine:pSeries
>>   printk: bootconsole [udbg0] enabled
>>
>> Signed-off-by: Michael Ellerman 
>> ---
>>  arch/powerpc/include/asm/setup.h   |  2 ++
>>  arch/powerpc/kernel/setup-common.c | 19 ++-
>>  2 files changed, 20 insertions(+), 1 deletion(-)
>>
>> v2: Print the string at boot as suggested by Nathan.
>
> Thanks!
>
> I've booted the series on P8 and P9 LPARs:
>
> Hardware name: model:'IBM,8408-E8E' cpu:'POWER8E (raw)' pvr:0x4b0201 
> lpvr:0xf04 of:'IBM,FW860.50 (SV860_146)' hv:'phyp' machine:pSeries
>
> Hardware name: model:'IBM,9040-MR9' cpu:'POWER9 (raw)' pvr:0x4e2102 
> lpvr:0xf05 of:'IBM,FW950.01 (VM950_047)' hv:'phyp' machine:pSeries
>
> Not on objection but just an FYI: we're already very close to exceeding
> the arch description buffer's size on PowerVM. Both of the above are
> over 120 bytes.

Hmm yeah that's a good point.

I was tossing up whether the tags (model:, cpu: etc) are worth the space
they consume.

I erred on the side of keeping them because although I know what the raw
values mean, I figured other folks might not.

But given we are getting tight for space I might change my mind on that
and just use the values with no tags. It will make the value harder to
parse programmatically, but we will probably never do that anyway.

> It also occurs to me that we'll want to rebuild the arch description
> string after partition migration. Probably immediately after processing
> the device tree updates.

OK I hadn't thought of that.

It won't be entirely straight forward because the existing code wants to
build the value up incrementally, so we have as much info as possible at
any point during the boot.

But we can probably just have a pseries specific routine that
reconstructs the value in a similar format to the existing one after
migration.

cheers


Re: [PATCH v2 1/6] powerpc: Add hardware description string

2022-09-29 Thread Nathan Lynch
Michael Ellerman  writes:
> Create a hardware description string, which we will use to record
> various details of the hardware platform we are running on.
>
> Print the accumulated description at boot, and use it to set the generic
> description which is printed in oopses.
>
> To begin with add ppc_md.name, aka the "machine description".
>
> Example output at boot with the full series applied:
>
>   Linux version 6.0.0-rc2-gcc-11.1.0-00199-g893f9007a5ce-dirty 
> (michael@alpine1-p1) (powerpc64-linux-gcc (GCC) 11.1.0, GNU ld (GNU Binutils) 
> 2.36.1) #844 SMP Thu Sep 29 22:29:53 AEST 2022
>   Hardware name: model:'IBM pSeries (emulated by qemu)' cpu:'POWER8 (raw)' 
> pvr:0x4d0200 lpvr:0xf04 of:'SLOF,HEAD' machine:pSeries
>   printk: bootconsole [udbg0] enabled
>
> Signed-off-by: Michael Ellerman 
> ---
>  arch/powerpc/include/asm/setup.h   |  2 ++
>  arch/powerpc/kernel/setup-common.c | 19 ++-
>  2 files changed, 20 insertions(+), 1 deletion(-)
>
> v2: Print the string at boot as suggested by Nathan.

Thanks!

I've booted the series on P8 and P9 LPARs:

Hardware name: model:'IBM,8408-E8E' cpu:'POWER8E (raw)' pvr:0x4b0201 
lpvr:0xf04 of:'IBM,FW860.50 (SV860_146)' hv:'phyp' machine:pSeries

Hardware name: model:'IBM,9040-MR9' cpu:'POWER9 (raw)' pvr:0x4e2102 
lpvr:0xf05 of:'IBM,FW950.01 (VM950_047)' hv:'phyp' machine:pSeries

Not on objection but just an FYI: we're already very close to exceeding
the arch description buffer's size on PowerVM. Both of the above are
over 120 bytes.

It also occurs to me that we'll want to rebuild the arch description
string after partition migration. Probably immediately after processing
the device tree updates.

Regardless, LGTM.


[PATCH v2 1/6] powerpc: Add hardware description string

2022-09-29 Thread Michael Ellerman
Create a hardware description string, which we will use to record
various details of the hardware platform we are running on.

Print the accumulated description at boot, and use it to set the generic
description which is printed in oopses.

To begin with add ppc_md.name, aka the "machine description".

Example output at boot with the full series applied:

  Linux version 6.0.0-rc2-gcc-11.1.0-00199-g893f9007a5ce-dirty 
(michael@alpine1-p1) (powerpc64-linux-gcc (GCC) 11.1.0, GNU ld (GNU Binutils) 
2.36.1) #844 SMP Thu Sep 29 22:29:53 AEST 2022
  Hardware name: model:'IBM pSeries (emulated by qemu)' cpu:'POWER8 (raw)' 
pvr:0x4d0200 lpvr:0xf04 of:'SLOF,HEAD' machine:pSeries
  printk: bootconsole [udbg0] enabled

Signed-off-by: Michael Ellerman 
---
 arch/powerpc/include/asm/setup.h   |  2 ++
 arch/powerpc/kernel/setup-common.c | 19 ++-
 2 files changed, 20 insertions(+), 1 deletion(-)

v2: Print the string at boot as suggested by Nathan.
Add some comments, update change log.

diff --git a/arch/powerpc/include/asm/setup.h b/arch/powerpc/include/asm/setup.h
index 85143849a586..e29e83f8a89c 100644
--- a/arch/powerpc/include/asm/setup.h
+++ b/arch/powerpc/include/asm/setup.h
@@ -88,6 +88,8 @@ unsigned long __init prom_init(unsigned long r3, unsigned 
long r4,
   unsigned long pp, unsigned long r6,
   unsigned long r7, unsigned long kbase);
 
+extern struct seq_buf ppc_hw_desc;
+
 #endif /* !__ASSEMBLY__ */
 
 #endif /* _ASM_POWERPC_SETUP_H */
diff --git a/arch/powerpc/kernel/setup-common.c 
b/arch/powerpc/kernel/setup-common.c
index dd98f43bd685..99f1c52a3ca4 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -18,6 +18,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -25,6 +26,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -588,6 +590,15 @@ static __init int add_pcspkr(void)
 device_initcall(add_pcspkr);
 #endif /* CONFIG_PCSPKR_PLATFORM */
 
+static char ppc_hw_desc_buf[128] __initdata;
+
+struct seq_buf ppc_hw_desc __initdata = {
+   .buffer = ppc_hw_desc_buf,
+   .size = sizeof(ppc_hw_desc_buf),
+   .len = 0,
+   .readpos = 0,
+};
+
 static __init void probe_machine(void)
 {
extern struct machdep_calls __machine_desc_start;
@@ -628,7 +639,13 @@ static __init void probe_machine(void)
for (;;);
}
 
-   printk(KERN_INFO "Using %s machine description\n", ppc_md.name);
+   // Append the machine name to other info we've gathered
+   seq_buf_printf(_hw_desc, "machine:%s", ppc_md.name);
+
+   // Set the generic hardware description shown in oopses
+   dump_stack_set_arch_desc(ppc_hw_desc.buffer);
+
+   pr_info("Hardware name: %s\n", ppc_hw_desc.buffer);
 }
 
 /* Match a class of boards, not a specific device configuration. */
-- 
2.37.3



Re: [PATCH v2 1/6] powerpc: Add hardware description string

2022-09-29 Thread Michael Ellerman
Michael Ellerman  writes:
> Create a hardware description string, which we will use to record
> various details of the hardware platform we are running on.
>
> Print the accumulated description at boot, and use it to set the generic
> description which is printed in oopses.
>
> To begin with add ppc_md.name, aka the "machine description".
>
> Example output at boot with the full series applied:
>
>   Linux version 6.0.0-rc2-gcc-11.1.0-00199-g893f9007a5ce-dirty 
> (michael@alpine1-p1) (powerpc64-linux-gcc (GCC) 11.1.0, GNU ld (GNU Binutils) 
> 2.36.1) #844 SMP Thu Sep 29 22:29:53 AEST 2022
>   Hardware name: model:'IBM pSeries (emulated by qemu)' cpu:'POWER8 (raw)' 
> pvr:0x4d0200 lpvr:0xf04 of:'SLOF,HEAD' machine:pSeries
>   printk: bootconsole [udbg0] enabled
>
> Signed-off-by: Michael Ellerman 
> ---
>  arch/powerpc/include/asm/setup.h   |  2 ++
>  arch/powerpc/kernel/setup-common.c | 19 ++-
>  2 files changed, 20 insertions(+), 1 deletion(-)
>
> v2: Print the string at boot as suggested by Nathan.
> Add some comments, update change log.

Ugh, I managed to bork the patches when sending. Don't send patches at
midnight.

New version coming.

cheers


[PATCH v2 1/6] powerpc: Add hardware description string

2022-09-29 Thread Michael Ellerman
Create a hardware description string, which we will use to record
various details of the hardware platform we are running on.

Print the accumulated description at boot, and use it to set the generic
description which is printed in oopses.

To begin with add ppc_md.name, aka the "machine description".

Example output at boot with the full series applied:

  Linux version 6.0.0-rc2-gcc-11.1.0-00199-g893f9007a5ce-dirty 
(michael@alpine1-p1) (powerpc64-linux-gcc (GCC) 11.1.0, GNU ld (GNU Binutils) 
2.36.1) #844 SMP Thu Sep 29 22:29:53 AEST 2022
  Hardware name: model:'IBM pSeries (emulated by qemu)' cpu:'POWER8 (raw)' 
pvr:0x4d0200 lpvr:0xf04 of:'SLOF,HEAD' machine:pSeries
  printk: bootconsole [udbg0] enabled

Signed-off-by: Michael Ellerman 
---
 arch/powerpc/include/asm/setup.h   |  2 ++
 arch/powerpc/kernel/setup-common.c | 19 ++-
 2 files changed, 20 insertions(+), 1 deletion(-)

v2: Print the string at boot as suggested by Nathan.
Add some comments, update change log.

diff --git a/arch/powerpc/kernel/setup-common.c 
b/arch/powerpc/kernel/setup-common.c
index dd98f43bd685..99f1c52a3ca4 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -588,6 +590,15 @@ static __init int add_pcspkr(void)
 device_initcall(add_pcspkr);
 #endif /* CONFIG_PCSPKR_PLATFORM */
 
+static char ppc_hw_desc_buf[128] __initdata;
+
+struct seq_buf ppc_hw_desc __initdata = {
+   .buffer = ppc_hw_desc_buf,
+   .size = sizeof(ppc_hw_desc_buf),
+   .len = 0,
+   .readpos = 0,
+};
+
 static __init void probe_machine(void)
 {
extern struct machdep_calls __machine_desc_start;
@@ -628,7 +639,13 @@ static __init void probe_machine(void)
for (;;);
}
 
-   printk(KERN_INFO "Using %s machine description\n", ppc_md.name);
+   // Append the machine name to other info we've gathered
+   seq_buf_printf(_hw_desc, "machine:%s", ppc_md.name);
+
+   // Set the generic hardware description shown in oopses
+   dump_stack_set_arch_desc(ppc_hw_desc.buffer);
+
+   pr_info("Hardware name: %s\n", ppc_hw_desc.buffer);
 }
 
 /* Match a class of boards, not a specific device configuration. */
-- 
2.37.3