diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2017-07-05 20:11:26 +0200 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2017-07-05 20:11:26 +0200 |
commit | eed1fc87795362fd868bdc960d7b96d25f81eae3 (patch) | |
tree | c9299d4ea8c79a42ea48510d168ae40597d4bcc5 /lib | |
parent | Merge tag 'armsoc-arm64' of git://git.kernel.org/pub/scm/linux/kernel/git/arm... (diff) | |
parent | Merge branch 'for-4.13' into for-linus (diff) | |
download | linux-eed1fc87795362fd868bdc960d7b96d25f81eae3.tar.xz linux-eed1fc87795362fd868bdc960d7b96d25f81eae3.zip |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/pmladek/printk
Pull printk updates from Petr Mladek:
- Store printk() messages into the main log buffer directly even in NMI
when the lock is available. It is the best effort to print even large
chunk of text. It is handy, for example, when all ftrace messages are
printed during the system panic in NMI.
- Add missing annotations to calm down compiler warnings
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/pmladek/printk:
printk: add __printf attributes to internal functions
printk: Use the main logbuf in NMI when logbuf_lock is available
Diffstat (limited to 'lib')
-rw-r--r-- | lib/nmi_backtrace.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/lib/nmi_backtrace.c b/lib/nmi_backtrace.c index 4e8a30d1c22f..0bc0a3535a8a 100644 --- a/lib/nmi_backtrace.c +++ b/lib/nmi_backtrace.c @@ -86,9 +86,11 @@ void nmi_trigger_cpumask_backtrace(const cpumask_t *mask, bool nmi_cpu_backtrace(struct pt_regs *regs) { + static arch_spinlock_t lock = __ARCH_SPIN_LOCK_UNLOCKED; int cpu = smp_processor_id(); if (cpumask_test_cpu(cpu, to_cpumask(backtrace_mask))) { + arch_spin_lock(&lock); if (regs && cpu_in_idle(instruction_pointer(regs))) { pr_warn("NMI backtrace for cpu %d skipped: idling at pc %#lx\n", cpu, instruction_pointer(regs)); @@ -99,6 +101,7 @@ bool nmi_cpu_backtrace(struct pt_regs *regs) else dump_stack(); } + arch_spin_unlock(&lock); cpumask_clear_cpu(cpu, to_cpumask(backtrace_mask)); return true; } |