printk: introduce a kmsg_dump iterator
Rather than storing the iterator information in the registered kmsg_dumper structure, create a separate iterator structure. The kmsg_dump_iter structure can reside on the stack of the caller, thus allowing lockless use of the kmsg_dump functions. Update code that accesses the kernel logs using the kmsg_dumper structure to use the new kmsg_dump_iter structure. For kmsg_dumpers, this also means adding a call to kmsg_dump_rewind() to initialize the iterator. All this is in preparation for removal of @logbuf_lock. Signed-off-by: John Ogness <john.ogness@linutronix.de> Reviewed-by: Kees Cook <keescook@chromium.org> # pstore Reviewed-by: Petr Mladek <pmladek@suse.com> Signed-off-by: Petr Mladek <pmladek@suse.com> Link: https://lore.kernel.org/r/20210303101528.29901-13-john.ogness@linutronix.de
This commit is contained in:
@@ -3005,7 +3005,7 @@ print_address(unsigned long addr)
|
||||
static void
|
||||
dump_log_buf(void)
|
||||
{
|
||||
struct kmsg_dumper dumper;
|
||||
struct kmsg_dump_iter iter;
|
||||
unsigned char buf[128];
|
||||
size_t len;
|
||||
|
||||
@@ -3017,9 +3017,9 @@ dump_log_buf(void)
|
||||
catch_memory_errors = 1;
|
||||
sync();
|
||||
|
||||
kmsg_dump_rewind_nolock(&dumper);
|
||||
kmsg_dump_rewind_nolock(&iter);
|
||||
xmon_start_pagination();
|
||||
while (kmsg_dump_get_line_nolock(&dumper, false, buf, sizeof(buf), &len)) {
|
||||
while (kmsg_dump_get_line_nolock(&iter, false, buf, sizeof(buf), &len)) {
|
||||
buf[len] = '\0';
|
||||
printf("%s", buf);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user