Messages in this thread | | | Date | Wed, 4 Aug 2021 11:52:49 +0200 | From | Petr Mladek <> | Subject | Re: [PATCH printk v1 02/10] printk: rename printk cpulock API and always disable interrupts |
| |
On Tue 2021-08-03 15:18:53, John Ogness wrote: > The printk cpulock functions use local_irq_disable(). This means that > hardware interrupts are also disabled on PREEMPT_RT. To make this > clear, rename the functions to use the raw_ prefix: > > raw_printk_cpu_lock_irqsave(flags); > raw_printk_cpu_unlock_irqrestore(flags); > > Also, these functions were a NOP for !CONFIG_SMP. But for !CONFIG_SMP > they still need to disable hardware interrupts. So modify them > appropriately for this. > > Signed-off-by: John Ogness <john.ogness@linutronix.de> > --- > include/linux/printk.h | 30 ++++++++++++++---------------- > lib/dump_stack.c | 4 ++-- > lib/nmi_backtrace.c | 4 ++-- > 3 files changed, 18 insertions(+), 20 deletions(-) > > diff --git a/include/linux/printk.h b/include/linux/printk.h > index 259af4f97f50..ac738d1d9934 100644 > --- a/include/linux/printk.h > +++ b/include/linux/printk.h > @@ -280,17 +280,22 @@ static inline void dump_stack(void) > extern int __printk_cpu_trylock(void); > extern void __printk_wait_on_cpu_lock(void); > extern void __printk_cpu_unlock(void); > +#else > +#define __printk_cpu_trylock() 1 > +#define __printk_wait_on_cpu_lock() > +#define __printk_cpu_unlock() > +#endif /* CONFIG_SMP */
IMHO, it is not obvious that
while (!__printk_cpu_trylock()) \ __printk_wait_on_cpu_lock(); \
does nothing in the !CONFIG_SMP case. Please, make it more obvious. I suggest to define:
#ifdef CONFIG_SMP
#define __printk_cpu_lock() \ do { \ while (!__printk_cpu_trylock()) \ __printk_wait_on_cpu_lock(); \ } while (0)
#else
#define __printk_cpu_lock()
#endif
/** * raw_printk_cpu_lock_irqsave() - Disable interrupts and acquire the printk * cpu-reentrant spinning lock. * @flags: Stack-allocated storage for saving local interrupt state, * to be passed to raw_printk_cpu_unlock_irqrestore(). * * If the lock is owned by another CPU, spin until it becomes available. */ #define raw_printk_cpu_lock_irqsave(flags) \ do { \ local_irq_save(flags); \ __printk_cpu_lock(); \ } while (0)
Best Regards, Petr
| |