diff options
author | Petr Mladek <pmladek@suse.com> | 2021-04-27 15:32:09 +0300 |
---|---|---|
committer | Petr Mladek <pmladek@suse.com> | 2021-04-27 15:32:09 +0300 |
commit | c8dbea6df351df211216b5f8877b020f21ecf75f (patch) | |
tree | 85e752c1543e08ec217eb901379d56ce31213d20 /arch/um | |
parent | da34b03fbd0a6e58770d5fe00830674633a57d60 (diff) | |
parent | acebb5597ff182e52a225400a459052a70dae706 (diff) | |
download | linux-c8dbea6df351df211216b5f8877b020f21ecf75f.tar.xz |
Merge branch 'printk-rework' into for-linus
Diffstat (limited to 'arch/um')
-rw-r--r-- | arch/um/kernel/kmsg_dump.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/arch/um/kernel/kmsg_dump.c b/arch/um/kernel/kmsg_dump.c index 6516ef1f8274..0224fcb36e22 100644 --- a/arch/um/kernel/kmsg_dump.c +++ b/arch/um/kernel/kmsg_dump.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 #include <linux/kmsg_dump.h> +#include <linux/spinlock.h> #include <linux/console.h> #include <linux/string.h> #include <shared/init.h> @@ -9,8 +10,11 @@ static void kmsg_dumper_stdout(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason) { + static struct kmsg_dump_iter iter; + static DEFINE_SPINLOCK(lock); static char line[1024]; struct console *con; + unsigned long flags; size_t len = 0; /* only dump kmsg when no console is available */ @@ -29,11 +33,18 @@ static void kmsg_dumper_stdout(struct kmsg_dumper *dumper, if (con) return; + if (!spin_trylock_irqsave(&lock, flags)) + return; + + kmsg_dump_rewind(&iter); + printf("kmsg_dump:\n"); - while (kmsg_dump_get_line(dumper, true, line, sizeof(line), &len)) { + while (kmsg_dump_get_line(&iter, true, line, sizeof(line), &len)) { line[len] = '\0'; printf("%s", line); } + + spin_unlock_irqrestore(&lock, flags); } static struct kmsg_dumper kmsg_dumper = { |