Pull printk updates from Petr Mladek: - Stop synchronizing kernel log buffer readers by logbuf_lock. As a result, the access to the buffer is fully lockless now. Note that printk() itself still uses locks because it tries to flush the messages to the console immediately. Also the per-CPU temporary buffers are still there because they prevent infinite recursion and serialize backtraces from NMI. All this is going to change in the future. - kmsg_dump API rework and cleanup as a side effect of the logbuf_lock removal. - Make bstr_printf() aware that %pf and %pF formats could deference the given pointer. - Show also page flags by %pGp format. - Clarify the documentation for plain pointer printing. - Do not show no_hash_pointers warning multiple times. - Update Senozhatsky email address. - Some clean up. * tag 'printk-for-5.13' of git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux: (24 commits) lib/vsprintf.c: remove leftover 'f' and 'F' cases from bstr_printf() printk: clarify the documentation for plain pointer printing kernel/printk.c: Fixed mundane typos printk: rename vprintk_func to vprintk vsprintf: dump full information of page flags in pGp mm, slub: don't combine pr_err with INFO mm, slub: use pGp to print page flags MAINTAINERS: update Senozhatsky email address lib/vsprintf: do not show no_hash_pointers message multiple times printk: console: remove unnecessary safe buffer usage printk: kmsg_dump: remove _nolock() variants printk: remove logbuf_lock printk: introduce a kmsg_dump iterator printk: kmsg_dumper: remove @active field printk: add syslog_lock printk: use atomic64_t for devkmsg_user.seq printk: use seqcount_latch for clear_seq printk: introduce CONSOLE_LOG_MAX printk: consolidate kmsg_dump_get_buffer/syslog_print_all code printk: refactor kmsg_dump_get_buffer() ...
Showing the changes to kernel/debug (1 of 16 files). Show all
Unified · Split
| @@ -2077,7 +2077,7 @@ static int kdb_dmesg(int argc, const char **argv) · 2076 unmodified lines | |||
| 2077 | int adjust = 0; | 2077 | int adjust = 0; |
| 2078 | int n = 0; | 2078 | int n = 0; |
| 2079 | int skip = 0; | 2079 | int skip = 0; |
| 2080 | struct kmsg_dumper dumper = { .active = 1 }; | 2080 | struct kmsg_dump_iter iter; |
| 2081 | size_t len; | 2081 | size_t len; |
| 2082 | char buf[201]; | 2082 | char buf[201]; |
| 2083 | 2083 | ||
| @@ -2102,8 +2102,8 @@ static int kdb_dmesg(int argc, const char **argv) · 18 unmodified lines | |||
| 2102 | kdb_set(2, setargs); | 2102 | kdb_set(2, setargs); |
| 2103 | } | 2103 | } |
| 2104 | 2104 | ||
| 2105 | kmsg_dump_rewind_nolock(&dumper); | 2105 | kmsg_dump_rewind(&iter); |
| 2106 | while (kmsg_dump_get_line_nolock(&dumper, 1, NULL, 0, NULL)) | 2106 | while (kmsg_dump_get_line(&iter, 1, NULL, 0, NULL)) |
| 2107 | n++; | 2107 | n++; |
| 2108 | 2108 | ||
| 2109 | if (lines < 0) { | 2109 | if (lines < 0) { |
| @@ -2135,8 +2135,8 @@ static int kdb_dmesg(int argc, const char **argv) · 25 unmodified lines | |||
| 2135 | if (skip >= n || skip < 0) | 2135 | if (skip >= n || skip < 0) |
| 2136 | return 0; | 2136 | return 0; |
| 2137 | 2137 | ||
| 2138 | kmsg_dump_rewind_nolock(&dumper); | 2138 | kmsg_dump_rewind(&iter); |
| 2139 | while (kmsg_dump_get_line_nolock(&dumper, 1, buf, sizeof(buf), &len)) { | 2139 | while (kmsg_dump_get_line(&iter, 1, buf, sizeof(buf), &len)) { |
| 2140 | if (skip) { | 2140 | if (skip) { |
| 2141 | skip--; | 2141 | skip--; |
| 2142 | continue; | 2142 | continue; |