summaryrefslogtreecommitdiffstats
path: root/debian/patches-rt/0085-printk-refactor-kmsg_dump_get_buffer.patch
diff options
context:
space:
mode:
Diffstat (limited to 'debian/patches-rt/0085-printk-refactor-kmsg_dump_get_buffer.patch')
-rw-r--r--debian/patches-rt/0085-printk-refactor-kmsg_dump_get_buffer.patch145
1 files changed, 0 insertions, 145 deletions
diff --git a/debian/patches-rt/0085-printk-refactor-kmsg_dump_get_buffer.patch b/debian/patches-rt/0085-printk-refactor-kmsg_dump_get_buffer.patch
deleted file mode 100644
index 59433fcf0..000000000
--- a/debian/patches-rt/0085-printk-refactor-kmsg_dump_get_buffer.patch
+++ /dev/null
@@ -1,145 +0,0 @@
-From 4e12561f1d5b3af25e1394a63dd37a0e6064ceda Mon Sep 17 00:00:00 2001
-From: John Ogness <john.ogness@linutronix.de>
-Date: Mon, 30 Nov 2020 01:41:56 +0106
-Subject: [PATCH 085/296] printk: refactor kmsg_dump_get_buffer()
-Origin: https://www.kernel.org/pub/linux/kernel/projects/rt/5.10/older/patches-5.10.35-rt39.tar.xz
-
-kmsg_dump_get_buffer() requires nearly the same logic as
-syslog_print_all(), but uses different variable names and
-does not make use of the ringbuffer loop macros. Modify
-kmsg_dump_get_buffer() so that the implementation is as similar
-to syslog_print_all() as possible.
-
-A follow-up commit will move this common logic into a
-separate helper function.
-
-Signed-off-by: John Ogness <john.ogness@linutronix.de>
-Reviewed-by: Petr Mladek <pmladek@suse.com>
-Signed-off-by: Sebastian Andrzej Siewior <bigeasy@linutronix.de>
----
- include/linux/kmsg_dump.h | 2 +-
- kernel/printk/printk.c | 60 +++++++++++++++++++++------------------
- 2 files changed, 33 insertions(+), 29 deletions(-)
-
-diff --git a/include/linux/kmsg_dump.h b/include/linux/kmsg_dump.h
-index 235c50982c2d..4095a34db0fa 100644
---- a/include/linux/kmsg_dump.h
-+++ b/include/linux/kmsg_dump.h
-@@ -62,7 +62,7 @@ bool kmsg_dump_get_line(struct kmsg_dumper *dumper, bool syslog,
- char *line, size_t size, size_t *len);
-
- bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
-- char *buf, size_t size, size_t *len);
-+ char *buf, size_t size, size_t *len_out);
-
- void kmsg_dump_rewind_nolock(struct kmsg_dumper *dumper);
-
-diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c
-index 411787b900ac..b4f72b5f70b9 100644
---- a/kernel/printk/printk.c
-+++ b/kernel/printk/printk.c
-@@ -3420,7 +3420,7 @@ EXPORT_SYMBOL_GPL(kmsg_dump_get_line);
- * read.
- */
- bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
-- char *buf, size_t size, size_t *len)
-+ char *buf, size_t size, size_t *len_out)
- {
- struct printk_info info;
- unsigned int line_count;
-@@ -3428,12 +3428,10 @@ bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
- unsigned long flags;
- u64 seq;
- u64 next_seq;
-- size_t l = 0;
-+ size_t len = 0;
- bool ret = false;
- bool time = printk_time;
-
-- prb_rec_init_rd(&r, &info, buf, size);
--
- if (!dumper->active || !buf || !size)
- goto out;
-
-@@ -3451,48 +3449,54 @@ bool kmsg_dump_get_buffer(struct kmsg_dumper *dumper, bool syslog,
- goto out;
- }
-
-- /* calculate length of entire buffer */
-- seq = dumper->cur_seq;
-- while (prb_read_valid_info(prb, seq, &info, &line_count)) {
-- if (r.info->seq >= dumper->next_seq)
-+ /*
-+ * Find first record that fits, including all following records,
-+ * into the user-provided buffer for this dump.
-+ */
-+
-+ prb_for_each_info(dumper->cur_seq, prb, seq, &info, &line_count) {
-+ if (info.seq >= dumper->next_seq)
- break;
-- l += get_record_print_text_size(&info, line_count, syslog, time);
-- seq = r.info->seq + 1;
-+ len += get_record_print_text_size(&info, line_count, syslog, time);
- }
-
-- /* move first record forward until length fits into the buffer */
-- seq = dumper->cur_seq;
-- while (l >= size && prb_read_valid_info(prb, seq,
-- &info, &line_count)) {
-- if (r.info->seq >= dumper->next_seq)
-+ /*
-+ * Move first record forward until length fits into the buffer. Ignore
-+ * newest messages that were not counted in the above cycle. Messages
-+ * might appear and get lost in the meantime. This is the best effort
-+ * that prevents an infinite loop.
-+ */
-+ prb_for_each_info(dumper->cur_seq, prb, seq, &info, &line_count) {
-+ if (len < size || info.seq >= dumper->next_seq)
- break;
-- l -= get_record_print_text_size(&info, line_count, syslog, time);
-- seq = r.info->seq + 1;
-+ len -= get_record_print_text_size(&info, line_count, syslog, time);
- }
-
-- /* last message in next interation */
-+ /*
-+ * Next kmsg_dump_get_buffer() invocation will dump block of
-+ * older records stored right before this one.
-+ */
- next_seq = seq;
-
-- /* actually read text into the buffer now */
-- l = 0;
-- while (prb_read_valid(prb, seq, &r)) {
-+ prb_rec_init_rd(&r, &info, buf, size);
-+
-+ len = 0;
-+ prb_for_each_record(seq, prb, seq, &r) {
- if (r.info->seq >= dumper->next_seq)
- break;
-
-- l += record_print_text(&r, syslog, time);
--
-- /* adjust record to store to remaining buffer space */
-- prb_rec_init_rd(&r, &info, buf + l, size - l);
-+ len += record_print_text(&r, syslog, time);
-
-- seq = r.info->seq + 1;
-+ /* Adjust record to store to remaining buffer space. */
-+ prb_rec_init_rd(&r, &info, buf + len, size - len);
- }
-
- dumper->next_seq = next_seq;
- ret = true;
- logbuf_unlock_irqrestore(flags);
- out:
-- if (len)
-- *len = l;
-+ if (len_out)
-+ *len_out = len;
- return ret;
- }
- EXPORT_SYMBOL_GPL(kmsg_dump_get_buffer);
---
-2.30.2
-