Commit bf6d0d1e authored by Petr Mladek's avatar Petr Mladek

Merge branch 'rework/printk_safe-removal' into for-linus

parents a0ddee65 5d5e4522
...@@ -187,6 +187,12 @@ static void watchdog_smp_panic(int cpu, u64 tb) ...@@ -187,6 +187,12 @@ static void watchdog_smp_panic(int cpu, u64 tb)
if (sysctl_hardlockup_all_cpu_backtrace) if (sysctl_hardlockup_all_cpu_backtrace)
trigger_allbutself_cpu_backtrace(); trigger_allbutself_cpu_backtrace();
/*
* Force flush any remote buffers that might be stuck in IRQ context
* and therefore could not run their irq_work.
*/
printk_trigger_flush();
if (hardlockup_panic) if (hardlockup_panic)
nmi_panic(NULL, "Hard LOCKUP"); nmi_panic(NULL, "Hard LOCKUP");
......
...@@ -198,6 +198,7 @@ void dump_stack_print_info(const char *log_lvl); ...@@ -198,6 +198,7 @@ void dump_stack_print_info(const char *log_lvl);
void show_regs_print_info(const char *log_lvl); void show_regs_print_info(const char *log_lvl);
extern asmlinkage void dump_stack_lvl(const char *log_lvl) __cold; extern asmlinkage void dump_stack_lvl(const char *log_lvl) __cold;
extern asmlinkage void dump_stack(void) __cold; extern asmlinkage void dump_stack(void) __cold;
void printk_trigger_flush(void);
#else #else
static inline __printf(1, 0) static inline __printf(1, 0)
int vprintk(const char *s, va_list args) int vprintk(const char *s, va_list args)
...@@ -274,6 +275,9 @@ static inline void dump_stack_lvl(const char *log_lvl) ...@@ -274,6 +275,9 @@ static inline void dump_stack_lvl(const char *log_lvl)
static inline void dump_stack(void) static inline void dump_stack(void)
{ {
} }
static inline void printk_trigger_flush(void)
{
}
#endif #endif
#ifdef CONFIG_SMP #ifdef CONFIG_SMP
......
...@@ -3253,6 +3253,11 @@ void defer_console_output(void) ...@@ -3253,6 +3253,11 @@ void defer_console_output(void)
preempt_enable(); preempt_enable();
} }
void printk_trigger_flush(void)
{
defer_console_output();
}
int vprintk_deferred(const char *fmt, va_list args) int vprintk_deferred(const char *fmt, va_list args)
{ {
int r; int r;
......
...@@ -75,6 +75,12 @@ void nmi_trigger_cpumask_backtrace(const cpumask_t *mask, ...@@ -75,6 +75,12 @@ void nmi_trigger_cpumask_backtrace(const cpumask_t *mask,
touch_softlockup_watchdog(); touch_softlockup_watchdog();
} }
/*
* Force flush any remote buffers that might be stuck in IRQ context
* and therefore could not run their irq_work.
*/
printk_trigger_flush();
clear_bit_unlock(0, &backtrace_flag); clear_bit_unlock(0, &backtrace_flag);
put_cpu(); put_cpu();
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment