linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/6] powerpc: Add ppc_md.name to dump stack arch description
@ 2022-09-28 13:40 Michael Ellerman
  2022-09-28 13:40 ` [PATCH 2/6] powerpc: Add PVR & CPU name " Michael Ellerman
                   ` (5 more replies)
  0 siblings, 6 replies; 10+ messages in thread
From: Michael Ellerman @ 2022-09-28 13:40 UTC (permalink / raw)
  To: linuxppc-dev

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/include/asm/setup.h   |  2 ++
 arch/powerpc/kernel/setup-common.c | 14 ++++++++++++++
 2 files changed, 16 insertions(+)

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..42279c3f1d31 100644
--- a/arch/powerpc/kernel/setup-common.c
+++ b/arch/powerpc/kernel/setup-common.c
@@ -18,6 +18,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>
@@ -25,6 +26,7 @@
 #include <linux/root_dev.h>
 #include <linux/cpu.h>
 #include <linux/unistd.h>
+#include <linux/seq_buf.h>
 #include <linux/serial.h>
 #include <linux/serial_8250.h>
 #include <linux/percpu.h>
@@ -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,6 +639,9 @@ static __init void probe_machine(void)
 		for (;;);
 	}
 
+	seq_buf_printf(&ppc_hw_desc,"machine:%s ", ppc_md.name);
+	dump_stack_set_arch_desc(ppc_hw_desc.buffer);
+
 	printk(KERN_INFO "Using %s machine description\n", ppc_md.name);
 }
 
-- 
2.37.3


^ permalink raw reply related	[flat|nested] 10+ messages in thread
* [PATCH 1/6] dump_stack: Support adding to the dump stack arch description
@ 2015-05-05 11:12 Michael Ellerman
  2015-05-05 11:12 ` [PATCH 6/6] powerpc/pseries: Add firmware details to " Michael Ellerman
  0 siblings, 1 reply; 10+ messages in thread
From: Michael Ellerman @ 2015-05-05 11:12 UTC (permalink / raw)
  To: linuxppc-dev; +Cc: tj, Andrew Morton, linux-kernel, Anton Blanchard

Arch code can set a "dump stack arch description string" which is
displayed with oops output to describe the hardware platform.

It is useful to initialise this as early as possible, so that an early
oops will have the hardware description.

However in practice we discover the hardware platform in stages, so it
would be useful to be able to incrementally fill in the hardware
description as we discover it.

This patch adds that ability, by creating dump_stack_add_arch_desc().

If there is no existing string it behaves exactly like
dump_stack_set_arch_desc(). However if there is an existing string it
appends to it, with a leading space.

This makes it easy to call it multiple times from different parts of the
code and get a reasonable looking result.

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
---
 include/linux/printk.h |  5 +++++
 kernel/printk/printk.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 51 insertions(+)


If people are happy with this, ideally we'd take this via the powerpc tree with
the rest of the series.

There also might be a better way to implement it, if so I'm all ears, but I
think what I have here is at least correct.

diff --git a/include/linux/printk.h b/include/linux/printk.h
index 9b30871c9149..7539fd417be0 100644
--- a/include/linux/printk.h
+++ b/include/linux/printk.h
@@ -165,6 +165,7 @@ u32 log_buf_len_get(void);
 void log_buf_kexec_setup(void);
 void __init setup_log_buf(int early);
 void dump_stack_set_arch_desc(const char *fmt, ...);
+void dump_stack_add_arch_desc(const char *fmt, ...);
 void dump_stack_print_info(const char *log_lvl);
 void show_regs_print_info(const char *log_lvl);
 #else
@@ -219,6 +220,10 @@ static inline void dump_stack_set_arch_desc(const char *fmt, ...)
 {
 }
 
+static inline void dump_stack_add_arch_desc(const char *fmt, ...)
+{
+}
+
 static inline void dump_stack_print_info(const char *log_lvl)
 {
 }
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
index c099b082cd02..11d7d587e252 100644
--- a/kernel/printk/printk.c
+++ b/kernel/printk/printk.c
@@ -3028,6 +3028,52 @@ void __init dump_stack_set_arch_desc(const char *fmt, ...)
 }
 
 /**
+ * dump_stack_add_arch_desc - add arch-specific info to show with task dumps
+ * @fmt: printf-style format string
+ * @...: arguments for the format string
+ *
+ * See dump_stack_set_arch_desc() for why you'd want to use this.
+ *
+ * This version adds to any existing string already created with either
+ * dump_stack_set_arch_desc() or dump_stack_add_arch_desc(). If there is an
+ * existing string a space will be prepended to the passed string.
+ */
+void __init dump_stack_add_arch_desc(const char *fmt, ...)
+{
+	va_list args;
+	int pos, len;
+	char *p;
+
+	/*
+	 * If there's an existing string we snprintf() past the end of it, and
+	 * then turn the terminating NULL of the existing string into a space
+	 * to create one string separated by a space.
+	 *
+	 * If there's no existing string we just snprintf() to the buffer, like
+	 * dump_stack_set_arch_desc(), but without calling it because we'd need
+	 * a varargs version.
+	 */
+
+	len = strnlen(dump_stack_arch_desc_str, sizeof(dump_stack_arch_desc_str));
+	pos = len;
+
+	if (len)
+		pos++;
+
+	if (pos >= sizeof(dump_stack_arch_desc_str))
+		return; /* Ran out of space */
+
+	p = &dump_stack_arch_desc_str[pos];
+
+	va_start(args, fmt);
+	vsnprintf(p, sizeof(dump_stack_arch_desc_str) - pos, fmt, args);
+	va_end(args);
+
+	if (len)
+		dump_stack_arch_desc_str[len] = ' ';
+}
+
+/**
  * dump_stack_print_info - print generic debug info for dump_stack()
  * @log_lvl: log level
  *
-- 
2.1.0

^ permalink raw reply related	[flat|nested] 10+ messages in thread

end of thread, other threads:[~2022-09-30  4:29 UTC | newest]

Thread overview: 10+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-09-28 13:40 [PATCH 1/6] powerpc: Add ppc_md.name to dump stack arch description Michael Ellerman
2022-09-28 13:40 ` [PATCH 2/6] powerpc: Add PVR & CPU name " Michael Ellerman
2022-09-28 13:40 ` [PATCH 3/6] powerpc/64: Add logical PVR to the " Michael Ellerman
2022-09-28 13:40 ` [PATCH 4/6] powerpc: Add device-tree model to " Michael Ellerman
2022-09-28 13:40 ` [PATCH 5/6] powerpc/powernv: Add opal details " Michael Ellerman
2022-09-28 13:40 ` [PATCH 6/6] powerpc/pseries: Add firmware " Michael Ellerman
2022-09-28 20:14   ` Nathan Lynch
2022-09-30  4:28     ` Michael Ellerman
2022-09-28 20:35 ` [PATCH 1/6] powerpc: Add ppc_md.name " Nathan Lynch
  -- strict thread matches above, loose matches on Subject: below --
2015-05-05 11:12 [PATCH 1/6] dump_stack: Support adding to the " Michael Ellerman
2015-05-05 11:12 ` [PATCH 6/6] powerpc/pseries: Add firmware details to " Michael Ellerman

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).