* [PATCH v5 1/3] panic: Introduce arch_do_panic
2026-08-10 11:35 [PATCH v5 0/3] Introduce arch_do_panic Mete Durlu
@ 2026-08-10 11:35 ` Mete Durlu
2026-08-10 11:35 ` [PATCH v5 2/3] s390: Implement arch_do_panic() Mete Durlu
2026-08-10 11:35 ` [PATCH v5 3/3] sparc: Implement arch_do_panic Mete Durlu
2 siblings, 0 replies; 7+ messages in thread
From: Mete Durlu @ 2026-08-10 11:35 UTC (permalink / raw)
To: Andrew Morton, Petr Mladek, Heiko Carstens, Vasily Gorbik,
Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
David S. Miller, Andreas Larsson, Bradley Morgan
Cc: linux-kernel, linux-s390, sparclinux, Mete Durlu
Introduce a hook for architectures to put their specific panic handlers.
s390 and sparc already has ifdef preprocessor checks to execute
architecture specific code. Pave the way for vpanic() cleanup.
Reviewed-by: Bradley Morgan <include@grrlz.net>
Suggested-by: Sven Schnelle <svens@linux.ibm.com>
Signed-off-by: Mete Durlu <meted@linux.ibm.com>
---
include/linux/panic.h | 2 ++
kernel/panic.c | 3 +++
2 files changed, 5 insertions(+)
diff --git a/include/linux/panic.h b/include/linux/panic.h
index f1dd417e54b2..98dd7dfd27de 100644
--- a/include/linux/panic.h
+++ b/include/linux/panic.h
@@ -110,4 +110,6 @@ extern void add_taint(unsigned flag, enum lockdep_ok);
extern int test_taint(unsigned flag);
extern unsigned long get_taint(void);
+void arch_do_panic(void);
+
#endif /* _LINUX_PANIC_H */
diff --git a/kernel/panic.c b/kernel/panic.c
index 213725b612aa..726a97842232 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -567,6 +567,8 @@ static void panic_other_cpus_shutdown(bool crash_kexec)
crash_smp_send_stop();
}
+void __weak arch_do_panic(void) {}
+
/**
* vpanic - halt the system
* @fmt: The text string to print
@@ -756,6 +758,7 @@ void vpanic(const char *fmt, va_list args)
#endif
pr_emerg("---[ end Kernel panic - not syncing: %s ]---\n", buf);
+ arch_do_panic();
/* Do not scroll important messages printed above */
suppress_printk = 1;
--
2.55.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* [PATCH v5 2/3] s390: Implement arch_do_panic()
2026-08-10 11:35 [PATCH v5 0/3] Introduce arch_do_panic Mete Durlu
2026-08-10 11:35 ` [PATCH v5 1/3] panic: " Mete Durlu
@ 2026-08-10 11:35 ` Mete Durlu
2026-08-10 12:01 ` Bradley Morgan
2026-08-10 12:35 ` Heiko Carstens
2026-08-10 11:35 ` [PATCH v5 3/3] sparc: Implement arch_do_panic Mete Durlu
2 siblings, 2 replies; 7+ messages in thread
From: Mete Durlu @ 2026-08-10 11:35 UTC (permalink / raw)
To: Andrew Morton, Petr Mladek, Heiko Carstens, Vasily Gorbik,
Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
David S. Miller, Andreas Larsson, Bradley Morgan
Cc: linux-kernel, linux-s390, sparclinux, Mete Durlu
Implement s390 specific arch_do_panic() instead of using s390 specific
ifdef sections in vpanic() code. disabled_wait() is now called after
"end Kernel panic" marker.
No functional changes.
Signed-off-by: Mete Durlu <meted@linux.ibm.com>
---
arch/s390/kernel/traps.c | 7 +++++++
kernel/panic.c | 3 ---
2 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c
index 564403496a7c..309d3d3e95fd 100644
--- a/arch/s390/kernel/traps.c
+++ b/arch/s390/kernel/traps.c
@@ -24,6 +24,7 @@
#include <linux/entry-common.h>
#include <linux/kmsan.h>
#include <linux/bug.h>
+#include <linux/panic.h>
#include <asm/entry-percpu.h>
#include <asm/asm-extable.h>
#include <asm/irqflags.h>
@@ -31,6 +32,7 @@
#include <asm/vtime.h>
#include <asm/fpu.h>
#include <asm/fault.h>
+#include <asm/processor.h>
#include "entry.h"
static inline void __user *get_trap_ip(struct pt_regs *regs)
@@ -275,6 +277,11 @@ static void monitor_event_exception(struct pt_regs *regs)
}
}
+void arch_do_panic(void)
+{
+ disabled_wait();
+}
+
void kernel_stack_invalid(struct pt_regs *regs)
{
/*
diff --git a/kernel/panic.c b/kernel/panic.c
index 726a97842232..ee6e3f9e3900 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -752,9 +752,6 @@ void vpanic(const char *fmt, va_list args)
pr_emerg("Press Stop-A (L1-A) from sun keyboard or send break\n"
"twice on console to return to the boot prom\n");
}
-#endif
-#if defined(CONFIG_S390)
- disabled_wait();
#endif
pr_emerg("---[ end Kernel panic - not syncing: %s ]---\n", buf);
--
2.55.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v5 2/3] s390: Implement arch_do_panic()
2026-08-10 11:35 ` [PATCH v5 2/3] s390: Implement arch_do_panic() Mete Durlu
@ 2026-08-10 12:01 ` Bradley Morgan
2026-08-10 12:35 ` Heiko Carstens
1 sibling, 0 replies; 7+ messages in thread
From: Bradley Morgan @ 2026-08-10 12:01 UTC (permalink / raw)
To: Mete Durlu, Andrew Morton, Petr Mladek, Heiko Carstens,
Vasily Gorbik, Alexander Gordeev, Christian Borntraeger,
Sven Schnelle, David S. Miller, Andreas Larsson
Cc: linux-kernel, linux-s390, sparclinux
On 10 August 2026 12:35:57 BST, Mete Durlu <meted@linux.ibm.com> wrote:
>Implement s390 specific arch_do_panic() instead of using s390 specific
>ifdef sections in vpanic() code. disabled_wait() is now called after
>"end Kernel panic" marker.
>No functional changes.
>
Can't see anything wrong, code wise
Reviewed-by: Bradley Morgan <include@grrlz.net>
>Signed-off-by: Mete Durlu <meted@linux.ibm.com>
>---
> arch/s390/kernel/traps.c | 7 +++++++
> kernel/panic.c | 3 ---
> 2 files changed, 7 insertions(+), 3 deletions(-)
>
>diff --git a/arch/s390/kernel/traps.c b/arch/s390/kernel/traps.c
>index 564403496a7c..309d3d3e95fd 100644
>--- a/arch/s390/kernel/traps.c
>+++ b/arch/s390/kernel/traps.c
>@@ -24,6 +24,7 @@
> #include <linux/entry-common.h>
> #include <linux/kmsan.h>
> #include <linux/bug.h>
>+#include <linux/panic.h>
> #include <asm/entry-percpu.h>
> #include <asm/asm-extable.h>
> #include <asm/irqflags.h>
>@@ -31,6 +32,7 @@
> #include <asm/vtime.h>
> #include <asm/fpu.h>
> #include <asm/fault.h>
>+#include <asm/processor.h>
> #include "entry.h"
>
> static inline void __user *get_trap_ip(struct pt_regs *regs)
>@@ -275,6 +277,11 @@ static void monitor_event_exception(struct pt_regs *regs)
> }
> }
>
Comment? I mean, its a suggestion, but it's not strictly needed
>+void arch_do_panic(void)
>+{
>+ disabled_wait();
>+}
>+
> void kernel_stack_invalid(struct pt_regs *regs)
> {
> /*
>diff --git a/kernel/panic.c b/kernel/panic.c
>index 726a97842232..ee6e3f9e3900 100644
>--- a/kernel/panic.c
>+++ b/kernel/panic.c
>@@ -752,9 +752,6 @@ void vpanic(const char *fmt, va_list args)
> pr_emerg("Press Stop-A (L1-A) from sun keyboard or send break\n"
> "twice on console to return to the boot prom\n");
> }
>-#endif
>-#if defined(CONFIG_S390)
>- disabled_wait();
> #endif
> pr_emerg("---[ end Kernel panic - not syncing: %s ]---\n", buf);
>
>
>
Thanks!
^ permalink raw reply [flat|nested] 7+ messages in thread* Re: [PATCH v5 2/3] s390: Implement arch_do_panic()
2026-08-10 11:35 ` [PATCH v5 2/3] s390: Implement arch_do_panic() Mete Durlu
2026-08-10 12:01 ` Bradley Morgan
@ 2026-08-10 12:35 ` Heiko Carstens
1 sibling, 0 replies; 7+ messages in thread
From: Heiko Carstens @ 2026-08-10 12:35 UTC (permalink / raw)
To: Mete Durlu
Cc: Andrew Morton, Petr Mladek, Vasily Gorbik, Alexander Gordeev,
Christian Borntraeger, Sven Schnelle, David S. Miller,
Andreas Larsson, Bradley Morgan, linux-kernel, linux-s390,
sparclinux
On Mon, Aug 10, 2026 at 01:35:57PM +0200, Mete Durlu wrote:
> Implement s390 specific arch_do_panic() instead of using s390 specific
> ifdef sections in vpanic() code. disabled_wait() is now called after
> "end Kernel panic" marker.
> No functional changes.
>
> Signed-off-by: Mete Durlu <meted@linux.ibm.com>
> ---
> arch/s390/kernel/traps.c | 7 +++++++
> kernel/panic.c | 3 ---
> 2 files changed, 7 insertions(+), 3 deletions(-)
Acked-by: Heiko Carstens <hca@linux.ibm.com>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v5 3/3] sparc: Implement arch_do_panic
2026-08-10 11:35 [PATCH v5 0/3] Introduce arch_do_panic Mete Durlu
2026-08-10 11:35 ` [PATCH v5 1/3] panic: " Mete Durlu
2026-08-10 11:35 ` [PATCH v5 2/3] s390: Implement arch_do_panic() Mete Durlu
@ 2026-08-10 11:35 ` Mete Durlu
2026-08-10 12:11 ` Bradley Morgan
2 siblings, 1 reply; 7+ messages in thread
From: Mete Durlu @ 2026-08-10 11:35 UTC (permalink / raw)
To: Andrew Morton, Petr Mladek, Heiko Carstens, Vasily Gorbik,
Alexander Gordeev, Christian Borntraeger, Sven Schnelle,
David S. Miller, Andreas Larsson, Bradley Morgan
Cc: linux-kernel, linux-s390, sparclinux, Mete Durlu
Implement sparc specific arch_do_panic() instead of using sparc specific
ifdef sections in vpanic() code.
Reorder arch specific panic handling, sparc's Stop-A messages are now
printed after "end Kernel panic" marker.
Signed-off-by: Mete Durlu <meted@linux.ibm.com>
---
arch/sparc/kernel/setup.c | 9 +++++++++
kernel/panic.c | 9 ---------
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/arch/sparc/kernel/setup.c b/arch/sparc/kernel/setup.c
index 4975867d9001..5f43cef80638 100644
--- a/arch/sparc/kernel/setup.c
+++ b/arch/sparc/kernel/setup.c
@@ -2,6 +2,8 @@
#include <asm/setup.h>
#include <linux/sysctl.h>
+#include <linux/panic.h>
+#include <linux/printk.h>
static const struct ctl_table sparc_sysctl_table[] = {
{
@@ -36,6 +38,13 @@ static const struct ctl_table sparc_sysctl_table[] = {
#endif
};
+void arch_do_panic(void)
+{
+ /* Make sure the user can actually press Stop-A (L1-A) */
+ stop_a_enabled = 1;
+ pr_emerg("Press Stop-A (L1-A) from sun keyboard or send break\n"
+ "twice on console to return to the boot prom\n");
+}
static int __init init_sparc_sysctls(void)
{
diff --git a/kernel/panic.c b/kernel/panic.c
index ee6e3f9e3900..7dda841c16f9 100644
--- a/kernel/panic.c
+++ b/kernel/panic.c
@@ -744,15 +744,6 @@ void vpanic(const char *fmt, va_list args)
reboot_mode = panic_reboot_mode;
emergency_restart();
}
-#ifdef __sparc__
- {
- extern int stop_a_enabled;
- /* Make sure the user can actually press Stop-A (L1-A) */
- stop_a_enabled = 1;
- pr_emerg("Press Stop-A (L1-A) from sun keyboard or send break\n"
- "twice on console to return to the boot prom\n");
- }
-#endif
pr_emerg("---[ end Kernel panic - not syncing: %s ]---\n", buf);
arch_do_panic();
--
2.55.0
^ permalink raw reply related [flat|nested] 7+ messages in thread* Re: [PATCH v5 3/3] sparc: Implement arch_do_panic
2026-08-10 11:35 ` [PATCH v5 3/3] sparc: Implement arch_do_panic Mete Durlu
@ 2026-08-10 12:11 ` Bradley Morgan
0 siblings, 0 replies; 7+ messages in thread
From: Bradley Morgan @ 2026-08-10 12:11 UTC (permalink / raw)
To: Mete Durlu, Andrew Morton, Petr Mladek, Heiko Carstens,
Vasily Gorbik, Alexander Gordeev, Christian Borntraeger,
Sven Schnelle, David S. Miller, Andreas Larsson
Cc: linux-kernel, linux-s390, sparclinux
On 10 August 2026 12:35:58 BST, Mete Durlu <meted@linux.ibm.com> wrote:
>Implement sparc specific arch_do_panic() instead of using sparc specific
>ifdef sections in vpanic() code.
>Reorder arch specific panic handling, sparc's Stop-A messages are now
>printed after "end Kernel panic" marker.
>
Reviewed-by: Bradley Morgan <include@grrlz.net>
thank you for clearing the ifdeffery..
>Signed-off-by: Mete Durlu <meted@linux.ibm.com>
>---
> arch/sparc/kernel/setup.c | 9 +++++++++
> kernel/panic.c | 9 ---------
> 2 files changed, 9 insertions(+), 9 deletions(-)
>
>diff --git a/arch/sparc/kernel/setup.c b/arch/sparc/kernel/setup.c
>index 4975867d9001..5f43cef80638 100644
>--- a/arch/sparc/kernel/setup.c
>+++ b/arch/sparc/kernel/setup.c
>@@ -2,6 +2,8 @@
>
> #include <asm/setup.h>
> #include <linux/sysctl.h>
>+#include <linux/panic.h>
>+#include <linux/printk.h>
>
> static const struct ctl_table sparc_sysctl_table[] = {
> {
>@@ -36,6 +38,13 @@ static const struct ctl_table sparc_sysctl_table[] = {
> #endif
> };
>
>+void arch_do_panic(void)
>+{
>+ /* Make sure the user can actually press Stop-A (L1-A) */
>+ stop_a_enabled = 1;
>+ pr_emerg("Press Stop-A (L1-A) from sun keyboard or send break\n"
>+ "twice on console to return to the boot prom\n");
>+}
>
> static int __init init_sparc_sysctls(void)
> {
>diff --git a/kernel/panic.c b/kernel/panic.c
>index ee6e3f9e3900..7dda841c16f9 100644
>--- a/kernel/panic.c
>+++ b/kernel/panic.c
>@@ -744,15 +744,6 @@ void vpanic(const char *fmt, va_list args)
> reboot_mode = panic_reboot_mode;
> emergency_restart();
> }
>-#ifdef __sparc__
>- {
>- extern int stop_a_enabled;
>- /* Make sure the user can actually press Stop-A (L1-A) */
>- stop_a_enabled = 1;
>- pr_emerg("Press Stop-A (L1-A) from sun keyboard or send break\n"
>- "twice on console to return to the boot prom\n");
>- }
>-#endif
> pr_emerg("---[ end Kernel panic - not syncing: %s ]---\n", buf);
>
> arch_do_panic();
>
>
Thanks!
^ permalink raw reply [flat|nested] 7+ messages in thread