aboutsummaryrefslogtreecommitdiffstats
path: root/features/rt/printk-introduce-a-kmsg_dump-iterator.patch
diff options
context:
space:
mode:
Diffstat (limited to 'features/rt/printk-introduce-a-kmsg_dump-iterator.patch')
-rw-r--r--features/rt/printk-introduce-a-kmsg_dump-iterator.patch560
1 files changed, 560 insertions, 0 deletions
diff --git a/features/rt/printk-introduce-a-kmsg_dump-iterator.patch b/features/rt/printk-introduce-a-kmsg_dump-iterator.patch
new file mode 100644
index 00000000..cab5a8ea
--- /dev/null
+++ b/features/rt/printk-introduce-a-kmsg_dump-iterator.patch
@@ -0,0 +1,560 @@
+From b20f5eb741807f3e89ae444f82f7a4f3d76affb1 Mon Sep 17 00:00:00 2001
+From: John Ogness <john.ogness@linutronix.de>
+Date: Fri, 18 Dec 2020 11:40:08 +0000
+Subject: [PATCH 015/191] printk: introduce a kmsg_dump iterator
+
+Rather than store the iterator information into the registered
+kmsg_dump 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.
+
+This is in preparation for removal of @logbuf_lock.
+
+Signed-off-by: John Ogness <john.ogness@linutronix.de>
+Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
+---
+ arch/powerpc/kernel/nvram_64.c | 12 ++--
+ arch/powerpc/platforms/powernv/opal-kmsg.c | 3 +-
+ arch/powerpc/xmon/xmon.c | 6 +-
+ arch/um/kernel/kmsg_dump.c | 5 +-
+ drivers/hv/vmbus_drv.c | 5 +-
+ drivers/mtd/mtdoops.c | 5 +-
+ fs/pstore/platform.c | 5 +-
+ include/linux/kmsg_dump.h | 43 +++++++-------
+ kernel/debug/kdb/kdb_main.c | 10 ++--
+ kernel/printk/printk.c | 65 +++++++++++-----------
+ 10 files changed, 84 insertions(+), 75 deletions(-)
+
+diff --git a/arch/powerpc/kernel/nvram_64.c b/arch/powerpc/kernel/nvram_64.c
+index 532f22637783..1ef55f4b389a 100644
+--- a/arch/powerpc/kernel/nvram_64.c
++++ b/arch/powerpc/kernel/nvram_64.c
+@@ -73,7 +73,8 @@ static const char *nvram_os_partitions[] = {
+ };
+
+ static void oops_to_nvram(struct kmsg_dumper *dumper,
+- enum kmsg_dump_reason reason);
++ enum kmsg_dump_reason reason,
++ struct kmsg_dumper_iter *iter);
+
+ static struct kmsg_dumper nvram_kmsg_dumper = {
+ .dump = oops_to_nvram
+@@ -643,7 +644,8 @@ void __init nvram_init_oops_partition(int rtas_partition_exists)
+ * partition. If that's too much, go back and capture uncompressed text.
+ */
+ static void oops_to_nvram(struct kmsg_dumper *dumper,
+- enum kmsg_dump_reason reason)
++ enum kmsg_dump_reason reason,
++ struct kmsg_dumper_iter *iter)
+ {
+ struct oops_log_info *oops_hdr = (struct oops_log_info *)oops_buf;
+ static unsigned int oops_count = 0;
+@@ -681,13 +683,13 @@ static void oops_to_nvram(struct kmsg_dumper *dumper,
+ return;
+
+ if (big_oops_buf) {
+- kmsg_dump_get_buffer(dumper, false,
++ kmsg_dump_get_buffer(iter, false,
+ big_oops_buf, big_oops_buf_sz, &text_len);
+ rc = zip_oops(text_len);
+ }
+ if (rc != 0) {
+- kmsg_dump_rewind(dumper);
+- kmsg_dump_get_buffer(dumper, false,
++ kmsg_dump_rewind(iter);
++ kmsg_dump_get_buffer(iter, false,
+ oops_data, oops_data_sz, &text_len);
+ err_type = ERR_TYPE_KERNEL_PANIC;
+ oops_hdr->version = cpu_to_be16(OOPS_HDR_VERSION);
+diff --git a/arch/powerpc/platforms/powernv/opal-kmsg.c b/arch/powerpc/platforms/powernv/opal-kmsg.c
+index 6c3bc4b4da98..ec862846bc82 100644
+--- a/arch/powerpc/platforms/powernv/opal-kmsg.c
++++ b/arch/powerpc/platforms/powernv/opal-kmsg.c
+@@ -20,7 +20,8 @@
+ * message, it just ensures that OPAL completely flushes the console buffer.
+ */
+ static void kmsg_dump_opal_console_flush(struct kmsg_dumper *dumper,
+- enum kmsg_dump_reason reason)
++ enum kmsg_dump_reason reason,
++ struct kmsg_dumper_iter *iter)
+ {
+ /*
+ * Outside of a panic context the pollers will continue to run,
+diff --git a/arch/powerpc/xmon/xmon.c b/arch/powerpc/xmon/xmon.c
+index 3fe37495f63d..900882f90431 100644
+--- a/arch/powerpc/xmon/xmon.c
++++ b/arch/powerpc/xmon/xmon.c
+@@ -3001,7 +3001,7 @@ print_address(unsigned long addr)
+ static void
+ dump_log_buf(void)
+ {
+- struct kmsg_dumper dumper = { .active = 1 };
++ struct kmsg_dumper_iter iter = { .active = 1 };
+ unsigned char buf[128];
+ size_t len;
+
+@@ -3013,9 +3013,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);
+ }
+diff --git a/arch/um/kernel/kmsg_dump.c b/arch/um/kernel/kmsg_dump.c
+index 6516ef1f8274..78befecb79d2 100644
+--- a/arch/um/kernel/kmsg_dump.c
++++ b/arch/um/kernel/kmsg_dump.c
+@@ -7,7 +7,8 @@
+ #include <os.h>
+
+ static void kmsg_dumper_stdout(struct kmsg_dumper *dumper,
+- enum kmsg_dump_reason reason)
++ enum kmsg_dump_reason reason,
++ struct kmsg_dumper_iter *iter)
+ {
+ static char line[1024];
+ struct console *con;
+@@ -30,7 +31,7 @@ static void kmsg_dumper_stdout(struct kmsg_dumper *dumper,
+ return;
+
+ 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);
+ }
+diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c
+index 10dce9f91216..806950bc3c1d 100644
+--- a/drivers/hv/vmbus_drv.c
++++ b/drivers/hv/vmbus_drv.c
+@@ -1389,7 +1389,8 @@ static void vmbus_isr(void)
+ * buffer and call into Hyper-V to transfer the data.
+ */
+ static void hv_kmsg_dump(struct kmsg_dumper *dumper,
+- enum kmsg_dump_reason reason)
++ enum kmsg_dump_reason reason,
++ struct kmsg_dumper_iter *iter)
+ {
+ size_t bytes_written;
+ phys_addr_t panic_pa;
+@@ -1404,7 +1405,7 @@ static void hv_kmsg_dump(struct kmsg_dumper *dumper,
+ * Write dump contents to the page. No need to synchronize; panic should
+ * be single-threaded.
+ */
+- kmsg_dump_get_buffer(dumper, false, hv_panic_page, HV_HYP_PAGE_SIZE,
++ kmsg_dump_get_buffer(iter, false, hv_panic_page, HV_HYP_PAGE_SIZE,
+ &bytes_written);
+ if (bytes_written)
+ hyperv_report_panic_msg(panic_pa, bytes_written);
+diff --git a/drivers/mtd/mtdoops.c b/drivers/mtd/mtdoops.c
+index 774970bfcf85..6bc2c728adb7 100644
+--- a/drivers/mtd/mtdoops.c
++++ b/drivers/mtd/mtdoops.c
+@@ -267,7 +267,8 @@ static void find_next_position(struct mtdoops_context *cxt)
+ }
+
+ static void mtdoops_do_dump(struct kmsg_dumper *dumper,
+- enum kmsg_dump_reason reason)
++ enum kmsg_dump_reason reason,
++ struct kmsg_dumper_iter *iter)
+ {
+ struct mtdoops_context *cxt = container_of(dumper,
+ struct mtdoops_context, dump);
+@@ -276,7 +277,7 @@ static void mtdoops_do_dump(struct kmsg_dumper *dumper,
+ if (reason == KMSG_DUMP_OOPS && !dump_oops)
+ return;
+
+- kmsg_dump_get_buffer(dumper, true, cxt->oops_buf + MTDOOPS_HEADER_SIZE,
++ kmsg_dump_get_buffer(iter, true, cxt->oops_buf + MTDOOPS_HEADER_SIZE,
+ record_size - MTDOOPS_HEADER_SIZE, NULL);
+
+ if (reason != KMSG_DUMP_OOPS) {
+diff --git a/fs/pstore/platform.c b/fs/pstore/platform.c
+index d963ae7902f9..b90fedcc1716 100644
+--- a/fs/pstore/platform.c
++++ b/fs/pstore/platform.c
+@@ -383,7 +383,8 @@ void pstore_record_init(struct pstore_record *record,
+ * end of the buffer.
+ */
+ static void pstore_dump(struct kmsg_dumper *dumper,
+- enum kmsg_dump_reason reason)
++ enum kmsg_dump_reason reason,
++ struct kmsg_dumper_iter *iter)
+ {
+ unsigned long total = 0;
+ const char *why;
+@@ -435,7 +436,7 @@ static void pstore_dump(struct kmsg_dumper *dumper,
+ dst_size -= header_size;
+
+ /* Write dump contents. */
+- if (!kmsg_dump_get_buffer(dumper, true, dst + header_size,
++ if (!kmsg_dump_get_buffer(iter, true, dst + header_size,
+ dst_size, &dump_size))
+ break;
+
+diff --git a/include/linux/kmsg_dump.h b/include/linux/kmsg_dump.h
+index 4095a34db0fa..2fdb10ab1799 100644
+--- a/include/linux/kmsg_dump.h
++++ b/include/linux/kmsg_dump.h
+@@ -29,6 +29,18 @@ enum kmsg_dump_reason {
+ KMSG_DUMP_MAX
+ };
+
++/**
++ * struct kmsg_dumper_iter - iterator for kernel crash message dumper
++ * @active: Flag that specifies if this is currently dumping
++ * @cur_seq: Points to the oldest message to dump (private)
++ * @next_seq: Points after the newest message to dump (private)
++ */
++struct kmsg_dumper_iter {
++ bool active;
++ u64 cur_seq;
++ u64 next_seq;
++};
++
+ /**
+ * struct kmsg_dumper - kernel crash message dumper structure
+ * @list: Entry in the dumper list (private)
+@@ -36,37 +48,30 @@ enum kmsg_dump_reason {
+ * through the record iterator
+ * @max_reason: filter for highest reason number that should be dumped
+ * @registered: Flag that specifies if this is already registered
+- * @active: Flag that specifies if this is currently dumping
+- * @cur_seq: Points to the oldest message to dump (private)
+- * @next_seq: Points after the newest message to dump (private)
+ */
+ struct kmsg_dumper {
+ struct list_head list;
+- void (*dump)(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason);
++ void (*dump)(struct kmsg_dumper *dumper, enum kmsg_dump_reason reason,
++ struct kmsg_dumper_iter *iter);
+ enum kmsg_dump_reason max_reason;
+- bool active;
+ bool registered;
+-
+- /* private state of the kmsg iterator */
+- u64 cur_seq;
+- u64 next_seq;
+ };
+
+ #ifdef CONFIG_PRINTK
+ void kmsg_dump(enum kmsg_dump_reason reason);
+
+-bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog,
++bool kmsg_dump_get_line_nolock(struct kmsg_dumper_iter *iter, bool syslog,
+ char *line, size_t size, size_t *len);
+
+-bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog,
++bool kmsg_dump_get_line(struct kmsg_dumper_iter *iter, bool syslog,
+ char *line, size_t size, size_t *len);
+
+-bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
++bool kmsg_dump_get_buffer(struct kmsg_dumper_iter *iter, bool syslog,
+ char *buf, size_t size, size_t *len_out);
+
+-void kmsg_dump_rewind_nolock(struct kmsg_dumper *dumper);
++void kmsg_dump_rewind_nolock(struct kmsg_dumper_iter *iter);
+
+-void kmsg_dump_rewind(struct kmsg_dumper *dumper);
++void kmsg_dump_rewind(struct kmsg_dumper_iter *dumper_iter);
+
+ int kmsg_dump_register(struct kmsg_dumper *dumper);
+
+@@ -78,30 +83,30 @@ static inline void kmsg_dump(enum kmsg_dump_reason reason)
+ {
+ }
+
+-static inline bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper,
++static inline bool kmsg_dump_get_line_nolock(struct kmsg_dumper_iter *iter,
+ bool syslog, const char *line,
+ size_t size, size_t *len)
+ {
+ return false;
+ }
+
+-static inline bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog,
++static inline bool kmsg_dump_get_line(struct kmsg_dumper_iter *iter, bool syslog,
+ const char *line, size_t size, size_t *len)
+ {
+ return false;
+ }
+
+-static inline bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
++static inline bool kmsg_dump_get_buffer(struct kmsg_dumper_iter *iter, bool syslog,
+ char *buf, size_t size, size_t *len)
+ {
+ return false;
+ }
+
+-static inline void kmsg_dump_rewind_nolock(struct kmsg_dumper *dumper)
++static inline void kmsg_dump_rewind_nolock(struct kmsg_dumper_iter *iter)
+ {
+ }
+
+-static inline void kmsg_dump_rewind(struct kmsg_dumper *dumper)
++static inline void kmsg_dump_rewind(struct kmsg_dumper_iter *iter)
+ {
+ }
+
+diff --git a/kernel/debug/kdb/kdb_main.c b/kernel/debug/kdb/kdb_main.c
+index 930ac1b25ec7..7ae9da245e4b 100644
+--- a/kernel/debug/kdb/kdb_main.c
++++ b/kernel/debug/kdb/kdb_main.c
+@@ -2101,7 +2101,7 @@ static int kdb_dmesg(int argc, const char **argv)
+ int adjust = 0;
+ int n = 0;
+ int skip = 0;
+- struct kmsg_dumper dumper = { .active = 1 };
++ struct kmsg_dumper_iter iter = { .active = 1 };
+ size_t len;
+ char buf[201];
+
+@@ -2126,8 +2126,8 @@ static int kdb_dmesg(int argc, const char **argv)
+ kdb_set(2, setargs);
+ }
+
+- kmsg_dump_rewind_nolock(&dumper);
+- while (kmsg_dump_get_line_nolock(&dumper, 1, NULL, 0, NULL))
++ kmsg_dump_rewind_nolock(&iter);
++ while (kmsg_dump_get_line_nolock(&iter, 1, NULL, 0, NULL))
+ n++;
+
+ if (lines < 0) {
+@@ -2159,8 +2159,8 @@ static int kdb_dmesg(int argc, const char **argv)
+ if (skip >= n || skip < 0)
+ return 0;
+
+- kmsg_dump_rewind_nolock(&dumper);
+- while (kmsg_dump_get_line_nolock(&dumper, 1, buf, sizeof(buf), &len)) {
++ kmsg_dump_rewind_nolock(&iter);
++ while (kmsg_dump_get_line_nolock(&iter, 1, buf, sizeof(buf), &len)) {
+ if (skip) {
+ skip--;
+ continue;
+diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
+index 713d09843d23..7d426c5dcec6 100644
+--- a/kernel/printk/printk.c
++++ b/kernel/printk/printk.c
+@@ -3389,6 +3389,7 @@ EXPORT_SYMBOL_GPL(kmsg_dump_reason_str);
+ */
+ void kmsg_dump(enum kmsg_dump_reason reason)
+ {
++ struct kmsg_dumper_iter iter;
+ struct kmsg_dumper *dumper;
+ unsigned long flags;
+
+@@ -3408,25 +3409,21 @@ void kmsg_dump(enum kmsg_dump_reason reason)
+ continue;
+
+ /* initialize iterator with data about the stored records */
+- dumper->active = true;
+-
++ iter.active = true;
+ logbuf_lock_irqsave(flags);
+- dumper->cur_seq = latched_seq_read_nolock(&clear_seq);
+- dumper->next_seq = prb_next_seq(prb);
++ iter.cur_seq = latched_seq_read_nolock(&clear_seq);
++ iter.next_seq = prb_next_seq(prb);
+ logbuf_unlock_irqrestore(flags);
+
+ /* invoke dumper which will iterate over records */
+- dumper->dump(dumper, reason);
+-
+- /* reset iterator */
+- dumper->active = false;
++ dumper->dump(dumper, reason, &iter);
+ }
+ rcu_read_unlock();
+ }
+
+ /**
+ * kmsg_dump_get_line_nolock - retrieve one kmsg log line (unlocked version)
+- * @dumper: registered kmsg dumper
++ * @iter: kmsg dumper iterator
+ * @syslog: include the "<4>" prefixes
+ * @line: buffer to copy the line to
+ * @size: maximum size of the buffer
+@@ -3443,7 +3440,7 @@ void kmsg_dump(enum kmsg_dump_reason reason)
+ *
+ * The function is similar to kmsg_dump_get_line(), but grabs no locks.
+ */
+-bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog,
++bool kmsg_dump_get_line_nolock(struct kmsg_dumper_iter *iter, bool syslog,
+ char *line, size_t size, size_t *len)
+ {
+ struct printk_info info;
+@@ -3454,16 +3451,16 @@ bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog,
+
+ prb_rec_init_rd(&r, &info, line, size);
+
+- if (!dumper->active)
++ if (!iter->active)
+ goto out;
+
+ /* Read text or count text lines? */
+ if (line) {
+- if (!prb_read_valid(prb, dumper->cur_seq, &r))
++ if (!prb_read_valid(prb, iter->cur_seq, &r))
+ goto out;
+ l = record_print_text(&r, syslog, printk_time);
+ } else {
+- if (!prb_read_valid_info(prb, dumper->cur_seq,
++ if (!prb_read_valid_info(prb, iter->cur_seq,
+ &info, &line_count)) {
+ goto out;
+ }
+@@ -3472,7 +3469,7 @@ bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog,
+
+ }
+
+- dumper->cur_seq = r.info->seq + 1;
++ iter->cur_seq = r.info->seq + 1;
+ ret = true;
+ out:
+ if (len)
+@@ -3482,7 +3479,7 @@ bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog,
+
+ /**
+ * kmsg_dump_get_line - retrieve one kmsg log line
+- * @dumper: registered kmsg dumper
++ * @iter: kmsg dumper iterator
+ * @syslog: include the "<4>" prefixes
+ * @line: buffer to copy the line to
+ * @size: maximum size of the buffer
+@@ -3497,14 +3494,14 @@ bool kmsg_dump_get_line_nolock(struct kmsg_dumper *dumper, bool syslog,
+ * A return value of FALSE indicates that there are no more records to
+ * read.
+ */
+-bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog,
++bool kmsg_dump_get_line(struct kmsg_dumper_iter *iter, bool syslog,
+ char *line, size_t size, size_t *len)
+ {
+ unsigned long flags;
+ bool ret;
+
+ logbuf_lock_irqsave(flags);
+- ret = kmsg_dump_get_line_nolock(dumper, syslog, line, size, len);
++ ret = kmsg_dump_get_line_nolock(iter, syslog, line, size, len);
+ logbuf_unlock_irqrestore(flags);
+
+ return ret;
+@@ -3513,7 +3510,7 @@ EXPORT_SYMBOL_GPL(kmsg_dump_get_line);
+
+ /**
+ * kmsg_dump_get_buffer - copy kmsg log lines
+- * @dumper: registered kmsg dumper
++ * @iter: kmsg dumper iterator
+ * @syslog: include the "<4>" prefixes
+ * @buf: buffer to copy the line to
+ * @size: maximum size of the buffer
+@@ -3530,7 +3527,7 @@ EXPORT_SYMBOL_GPL(kmsg_dump_get_line);
+ * A return value of FALSE indicates that there are no more records to
+ * read.
+ */
+-bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
++bool kmsg_dump_get_buffer(struct kmsg_dumper_iter *iter, bool syslog,
+ char *buf, size_t size, size_t *len_out)
+ {
+ struct printk_info info;
+@@ -3542,19 +3539,19 @@ bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
+ bool ret = false;
+ bool time = printk_time;
+
+- if (!dumper->active || !buf || !size)
++ if (!iter->active || !buf || !size)
+ goto out;
+
+ logbuf_lock_irqsave(flags);
+- if (prb_read_valid_info(prb, dumper->cur_seq, &info, NULL)) {
+- if (info.seq != dumper->cur_seq) {
++ if (prb_read_valid_info(prb, iter->cur_seq, &info, NULL)) {
++ if (info.seq != iter->cur_seq) {
+ /* messages are gone, move to first available one */
+- dumper->cur_seq = info.seq;
++ iter->cur_seq = info.seq;
+ }
+ }
+
+ /* last entry */
+- if (dumper->cur_seq >= dumper->next_seq) {
++ if (iter->cur_seq >= iter->next_seq) {
+ logbuf_unlock_irqrestore(flags);
+ goto out;
+ }
+@@ -3565,7 +3562,7 @@ bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
+ * because this function (by way of record_print_text()) will
+ * not write more than size-1 bytes of text into @buf.
+ */
+- seq = find_first_fitting_seq(dumper->cur_seq, dumper->next_seq,
++ seq = find_first_fitting_seq(iter->cur_seq, iter->next_seq,
+ size - 1, syslog, time);
+
+ /*
+@@ -3578,7 +3575,7 @@ bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
+
+ len = 0;
+ prb_for_each_record(seq, prb, seq, &r) {
+- if (r.info->seq >= dumper->next_seq)
++ if (r.info->seq >= iter->next_seq)
+ break;
+
+ len += record_print_text(&r, syslog, time);
+@@ -3587,7 +3584,7 @@ bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
+ prb_rec_init_rd(&r, &info, buf + len, size - len);
+ }
+
+- dumper->next_seq = next_seq;
++ iter->next_seq = next_seq;
+ ret = true;
+ logbuf_unlock_irqrestore(flags);
+ out:
+@@ -3599,7 +3596,7 @@ EXPORT_SYMBOL_GPL(kmsg_dump_get_buffer);
+
+ /**
+ * kmsg_dump_rewind_nolock - reset the iterator (unlocked version)
+- * @dumper: registered kmsg dumper
++ * @iter: kmsg dumper iterator
+ *
+ * Reset the dumper's iterator so that kmsg_dump_get_line() and
+ * kmsg_dump_get_buffer() can be called again and used multiple
+@@ -3607,26 +3604,26 @@ EXPORT_SYMBOL_GPL(kmsg_dump_get_buffer);
+ *
+ * The function is similar to kmsg_dump_rewind(), but grabs no locks.
+ */
+-void kmsg_dump_rewind_nolock(struct kmsg_dumper *dumper)
++void kmsg_dump_rewind_nolock(struct kmsg_dumper_iter *iter)
+ {
+- dumper->cur_seq = latched_seq_read_nolock(&clear_seq);
+- dumper->next_seq = prb_next_seq(prb);
++ iter->cur_seq = latched_seq_read_nolock(&clear_seq);
++ iter->next_seq = prb_next_seq(prb);
+ }
+
+ /**
+ * kmsg_dump_rewind - reset the iterator
+- * @dumper: registered kmsg dumper
++ * @iter: kmsg dumper iterator
+ *
+ * Reset the dumper's iterator so that kmsg_dump_get_line() and
+ * kmsg_dump_get_buffer() can be called again and used multiple
+ * times within the same dumper.dump() callback.
+ */
+-void kmsg_dump_rewind(struct kmsg_dumper *dumper)
++void kmsg_dump_rewind(struct kmsg_dumper_iter *iter)
+ {
+ unsigned long flags;
+
+ logbuf_lock_irqsave(flags);
+- kmsg_dump_rewind_nolock(dumper);
++ kmsg_dump_rewind_nolock(iter);
+ logbuf_unlock_irqrestore(flags);
+ }
+ EXPORT_SYMBOL_GPL(kmsg_dump_rewind);
+--
+2.19.1
+