update
diff --git a/kmsg-config-no-printk.patch b/kmsg-config-no-printk.patch index e07302a..9f01101 100644 --- a/kmsg-config-no-printk.patch +++ b/kmsg-config-no-printk.patch
@@ -4,8 +4,8 @@ Signed-off-by: Kay Sievers <kay@vrfy.org> --- - kernel/printk.c | 10 ++++++++-- - 1 file changed, 8 insertions(+), 2 deletions(-) + kernel/printk.c | 11 +++++++++-- + 1 file changed, 9 insertions(+), 2 deletions(-) --- a/kernel/printk.c +++ b/kernel/printk.c @@ -25,14 +25,16 @@ static u32 log_next_idx; /* the next printk record to read after the last 'clear' command */ -@@ -1631,9 +1631,15 @@ asmlinkage int printk(const char *fmt, . +@@ -1649,10 +1649,17 @@ asmlinkage int printk(const char *fmt, . } EXPORT_SYMBOL(printk); -#else +#else /* CONFIG_PRINTK */ - #define LOG_LINE_MAX 0 + #define LOG_LINE_MAX 0 + #define PREFIX_MAX 0 ++#define LOG_LINE_MAX 0 +static u64 syslog_seq; +static u32 syslog_idx; +static enum log_flags syslog_prev;
diff --git a/kmsg-cont-order.patch b/kmsg-cont-order.patch new file mode 100644 index 0000000..3221e16 --- /dev/null +++ b/kmsg-cont-order.patch
@@ -0,0 +1,35 @@ +--- + kernel/printk.c | 22 ++++++++++++++++++---- + 1 file changed, 18 insertions(+), 4 deletions(-) + +--- a/kernel/printk.c ++++ b/kernel/printk.c +@@ -1377,10 +1377,24 @@ static void cont_flush(enum log_flags fl + if (cont.len == 0) + return; + +- log_store(cont.facility, cont.level, LOG_NOCONS | flags, +- cont.ts_nsec, NULL, 0, cont.buf, cont.len); +- +- cont.flushed = true; ++ if (cont.cons) { ++ /* ++ * If we have flushed a fragment of this line to the console, ++ * we need to wait for the console to pick up the full line. ++ * We add a flag to suppress a duplicated output from the store. ++ */ ++ log_store(cont.facility, cont.level, flags | LOG_NOCONS, ++ cont.ts_nsec, NULL, 0, cont.buf, cont.len); ++ cont.flushed = true; ++ } else { ++ /* ++ * If we never flushed a fragment of this line to the console, ++ * we can just submit it to the store and free the buffer. ++ */ ++ log_store(cont.facility, cont.level, flags, cont.ts_nsec, ++ NULL, 0, cont.buf, cont.len); ++ cont.len = 0; ++ } + } + + static bool cont_add(int facility, int level, const char *text, size_t len)
diff --git a/kmsg-export-flags.patch b/kmsg-export-flags.patch index c817460..8091c5f 100644 --- a/kmsg-export-flags.patch +++ b/kmsg-export-flags.patch
@@ -86,7 +86,7 @@ Users: dmesg(1), userspace kernel log consumers --- a/kernel/printk.c +++ b/kernel/printk.c -@@ -360,6 +360,7 @@ static void log_store(int facility, int +@@ -361,6 +361,7 @@ static void log_store(int facility, int struct devkmsg_user { u64 seq; u32 idx; @@ -94,7 +94,7 @@ struct mutex lock; char buf[8192]; }; -@@ -425,6 +426,7 @@ static ssize_t devkmsg_read(struct file +@@ -426,6 +427,7 @@ static ssize_t devkmsg_read(struct file struct log *msg; u64 ts_usec; size_t i; @@ -102,7 +102,7 @@ size_t len; ssize_t ret; -@@ -462,8 +464,25 @@ static ssize_t devkmsg_read(struct file +@@ -463,8 +465,25 @@ static ssize_t devkmsg_read(struct file msg = log_from_idx(user->idx); ts_usec = msg->ts_nsec; do_div(ts_usec, 1000); @@ -120,7 +120,7 @@ + if (msg->flags & LOG_CONT && !(user->prev & LOG_CONT)) + cont = 'c'; + else if ((msg->flags & LOG_CONT) || -+ (user->prev & LOG_CONT) && !(msg->flags & LOG_PREFIX)) ++ ((user->prev & LOG_CONT) && !(msg->flags & LOG_PREFIX))) + cont = '+'; + + len = sprintf(user->buf, "%u,%llu,%llu,%c;",
diff --git a/series b/series index 907aed0..eb8e491 100644 --- a/series +++ b/series
@@ -5,3 +5,4 @@ kmsg-cont-order.patch kmsg-config-no-printk.patch kmsg-export-flags.patch +kmsg-console-cont-flush-merge.patch