[PATCH] powerpc/fadump: update kernel logs before fadump crash begins
Christophe Leroy
christophe.leroy at csgroup.eu
Fri Jan 26 05:52:58 AEDT 2024
Hi,
Le 06/06/2020 à 06:45, Sourabh Jain a écrit :
> When we hit the fadump crash via the panic path the pstore update is
> missing. This is observed when commit 8341f2f222d7 ("sysrq: Use panic()
> to force a crash") changed the sysrq-trigger to take panic path instead
> of die path.
>
> The PPC panic event handler addresses the system panic in two different
> ways based on the system configuration. It first allows the FADump (if
> configured) to handle the kernel panic else forwards the call to platform
> specific panic function. Now pstore update is missing only if FADump
> handles the kernel panic, the platform-specific panic function do update
> the pstore by calling panic_flush_kmsg_end function.
>
> The simplest approach to handle this issue is to add pstore update in PPC
> panic handler before FADump handles the panic. But this leads to multiple
> pstore updates in case FADump is not configured and platform-specific
> panic function serves the kernel panic.
>
> Hence the function panic_flush_kmsg_end (used by the platform-specific
> panic function to update the kernel logs) is split into two functions, one
> will update the pstore (called in ppc panic event handler) and others will
> flush the kmsg on the console (called in platform specific panic function).
Is this patch still relevant ?
It is still awaiting in patchwork and I see it has produced sparse
warnings
(https://patchwork.ozlabs.org/project/linuxppc-dev/patch/20200606044506.44551-1-sourabhjain@linux.ibm.com/)
In addition, it doesn't apply anymore so I'll discard it. Please
re-submit if still needed.
Christophe
>
> Signed-off-by: Sourabh Jain <sourabhjain at linux.ibm.com>
> ---
> arch/powerpc/include/asm/bug.h | 2 ++
> arch/powerpc/kernel/setup-common.c | 1 +
> arch/powerpc/kernel/traps.c | 12 +++++++++++-
> arch/powerpc/platforms/ps3/setup.c | 2 +-
> arch/powerpc/platforms/pseries/setup.c | 2 +-
> 5 files changed, 16 insertions(+), 3 deletions(-)
>
> diff --git a/arch/powerpc/include/asm/bug.h b/arch/powerpc/include/asm/bug.h
> index 338f36cd9934..9268551a69bc 100644
> --- a/arch/powerpc/include/asm/bug.h
> +++ b/arch/powerpc/include/asm/bug.h
> @@ -118,6 +118,8 @@ extern void _exception_pkey(struct pt_regs *, unsigned long, int);
> extern void die(const char *, struct pt_regs *, long);
> extern bool die_will_crash(void);
> extern void panic_flush_kmsg_start(void);
> +extern void panic_flush_kmsg_dump(void);
> +extern void panic_flush_kmsg_console(void);
> extern void panic_flush_kmsg_end(void);
> #endif /* !__ASSEMBLY__ */
>
> diff --git a/arch/powerpc/kernel/setup-common.c b/arch/powerpc/kernel/setup-common.c
> index 7f8c890360fe..2d546a9e8bb1 100644
> --- a/arch/powerpc/kernel/setup-common.c
> +++ b/arch/powerpc/kernel/setup-common.c
> @@ -699,6 +699,7 @@ static int ppc_panic_event(struct notifier_block *this,
> * want interrupts to be hard disabled.
> */
> hard_irq_disable();
> + panic_flush_kmsg_dump();
>
> /*
> * If firmware-assisted dump has been registered then trigger
> diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c
> index 82a3438300fd..bb6bc19992b3 100644
> --- a/arch/powerpc/kernel/traps.c
> +++ b/arch/powerpc/kernel/traps.c
> @@ -169,15 +169,25 @@ extern void panic_flush_kmsg_start(void)
> bust_spinlocks(1);
> }
>
> -extern void panic_flush_kmsg_end(void)
> +extern void panic_flush_kmsg_dump(void)
> {
> printk_safe_flush_on_panic();
> kmsg_dump(KMSG_DUMP_PANIC);
> +}
> +
> +extern void panic_flush_kmsg_console(void)
> +{
> bust_spinlocks(0);
> debug_locks_off();
> console_flush_on_panic(CONSOLE_FLUSH_PENDING);
> }
>
> +extern void panic_flush_kmsg_end(void)
> +{
> + panic_flush_kmsg_dump();
> + panic_flush_kmsg_console();
> +}
> +
> static unsigned long oops_begin(struct pt_regs *regs)
> {
> int cpu;
> diff --git a/arch/powerpc/platforms/ps3/setup.c b/arch/powerpc/platforms/ps3/setup.c
> index b29368931c56..f96ba34284a1 100644
> --- a/arch/powerpc/platforms/ps3/setup.c
> +++ b/arch/powerpc/platforms/ps3/setup.c
> @@ -101,7 +101,7 @@ static void ps3_panic(char *str)
> printk(" System does not reboot automatically.\n");
> printk(" Please press POWER button.\n");
> printk("\n");
> - panic_flush_kmsg_end();
> + panic_flush_kmsg_console();
>
> while(1)
> lv1_pause(1);
> diff --git a/arch/powerpc/platforms/pseries/setup.c b/arch/powerpc/platforms/pseries/setup.c
> index 0c8421dd01ab..66ecb88c4b8e 100644
> --- a/arch/powerpc/platforms/pseries/setup.c
> +++ b/arch/powerpc/platforms/pseries/setup.c
> @@ -788,7 +788,7 @@ static void __init pSeries_setup_arch(void)
>
> static void pseries_panic(char *str)
> {
> - panic_flush_kmsg_end();
> + panic_flush_kmsg_console();
> rtas_os_term(str);
> }
>
More information about the Linuxppc-dev
mailing list