Re: [PATCH v6 03/22] panic: Add vpanic()
From: Petr Mladek
Date: Mon May 05 2025 - 08:25:23 EST
On Wed 2025-04-30 13:02:18, Nam Cao wrote:
> vpanic() is useful for implementing runtime verification reactors. Add it.
>
> Signed-off-by: Nam Cao <namcao@xxxxxxxxxxxxx>
> Reviewed-by: Petr Mladek <pmladek@xxxxxxxx>
> ---
> Cc: John Ogness <john.ogness@xxxxxxxxxxxxx>
> Cc: Sergey Senozhatsky <senozhatsky@xxxxxxxxxxxx>
> ---
> include/linux/panic.h | 3 +++
> kernel/panic.c | 17 ++++++++++++-----
> 2 files changed, 15 insertions(+), 5 deletions(-)
>
> diff --git a/include/linux/panic.h b/include/linux/panic.h
> index 54d90b6c5f47..3522f8c441f4 100644
> --- a/include/linux/panic.h
> +++ b/include/linux/panic.h
> @@ -3,6 +3,7 @@
> #define _LINUX_PANIC_H
>
> #include <linux/compiler_attributes.h>
> +#include <linux/stdarg.h>
> #include <linux/types.h>
>
> struct pt_regs;
> @@ -10,6 +11,8 @@ struct pt_regs;
> extern long (*panic_blink)(int state);
> __printf(1, 2)
> void panic(const char *fmt, ...) __noreturn __cold;
> +__printf(1, 0)
> +void vpanic(const char *fmt, va_list args) __noreturn __cold;
> void nmi_panic(struct pt_regs *regs, const char *msg);
> void check_panic_on_warn(const char *origin);
> extern void oops_enter(void);
> diff --git a/kernel/panic.c b/kernel/panic.c
> index d8635d5cecb2..df799d784b61 100644
> --- a/kernel/panic.c
> +++ b/kernel/panic.c
> @@ -277,17 +277,16 @@ static void panic_other_cpus_shutdown(bool crash_kexec)
> }
>
> /**
> - * panic - halt the system
> + * vpanic - halt the system
> * @fmt: The text string to print
> *
I wanted to double check the __printf attributtes and compiled this
file with W=1:
$> make W=1 kernel/panic.o
CC kernel/panic.o
kernel/panic.c:288: warning: Function parameter or struct member 'args' not described in 'vpanic'
So, we should add description of the new @args parameter...
> * Display a message, then perform cleanups.
> *
> * This function never returns.
> */
> -void panic(const char *fmt, ...)
> +void vpanic(const char *fmt, va_list args)
> {
> static char buf[1024];
> - va_list args;
> long i, i_next = 0, len;
> int state = 0;
> int old_cpu, this_cpu;
Otherwise, it looks good.
Best Regards,
Petr