Messages in this thread | | | Date | Wed, 21 Feb 2024 10:55:38 +0100 | From | Petr Mladek <> | Subject | Re: [PATCH printk v2 07/26] printk: Check printk_deferred_enter()/_exit() usage |
| |
On Sun 2024-02-18 20:03:07, John Ogness wrote: > From: Sebastian Andrzej Siewior <bigeasy@linutronix.de> > > Add validation that printk_deferred_enter()/_exit() are called in > non-migration contexts. > > --- a/include/linux/printk.h > +++ b/include/linux/printk.h > @@ -159,13 +159,16 @@ __printf(1, 2) __cold int _printk_deferred(const char *fmt, ...); > > extern void __printk_safe_enter(void); > extern void __printk_safe_exit(void);
It seems that these two does not longer need to stay in the global linux/printk.h. The declaration can be moved to kernel/printk/internal.h (with 'extern' removed).
> +extern void __printk_deferred_enter(void); > +extern void __printk_deferred_exit(void); > + > /* > * The printk_deferred_enter/exit macros are available only as a hack for > * some code paths that need to defer all printk console printing. Interrupts > * must be disabled for the deferred duration. > */ > -#define printk_deferred_enter __printk_safe_enter > -#define printk_deferred_exit __printk_safe_exit > +#define printk_deferred_enter() __printk_deferred_enter() > +#define printk_deferred_exit() __printk_deferred_exit() > > /* > * Please don't use printk_ratelimit(), because it shares ratelimiting state > diff --git a/kernel/printk/printk_safe.c b/kernel/printk/printk_safe.c > index 6d10927a07d8..8d9408d653de 100644 > --- a/kernel/printk/printk_safe.c > +++ b/kernel/printk/printk_safe.c > @@ -26,6 +26,18 @@ void __printk_safe_exit(void) > this_cpu_dec(printk_context); > } > > +void __printk_deferred_enter(void) > +{ > + cant_migrate(); > + this_cpu_inc(printk_context);
I would prefer to call __printk_safe_enter() here to make it clear that they update printk_context the same way and have the same effect.
Let's make compiler to do the inlining.
> +} > + > +void __printk_deferred_exit(void) > +{ > + cant_migrate(); > + this_cpu_dec(printk_context);
ditto
> +} > + > asmlinkage int vprintk(const char *fmt, va_list args) > { > #ifdef CONFIG_KGDB_KDB
With the two changes:
Reviewed-by: Petr Mladek <pmladek@suse.com>
Best Regards, Petr
| |