diff options
author | Arun KS <[email protected]> | 2014-01-23 15:54:19 -0800 |
---|---|---|
committer | Linus Torvalds <[email protected]> | 2014-01-23 16:36:56 -0800 |
commit | 1d3fa370346d9d96ab0efb84e3312aed3aeb35ea (patch) | |
tree | 4ad8fe316cef1aa892651ba35c25d1c02d941533 | |
parent | aaf07621b8bbfdc0d87e9e5dbf1af3b24304998a (diff) |
printk: flush conflicting continuation line
An earlier newline was missing and current print is from different task.
In this scenario flush the continuation line and store this line
seperatly.
This patch fix the below scenario of timestamp interleaving,
[ 28.154370 ] read_word_reg : reg[0x 3], reg[0x 4] data [0x 642]
[ 28.155428 ] uart disconnect
[ 31.947341 ] dvfs[cpufreq.c<275>]:plug-in cpu<1> done
[ 28.155445 ] UART detached : send switch state 201
[ 32.014112 ] read_reg : reg[0x 3] data[0x21]
[[email protected]: simplify and condense the code]
Signed-off-by: Arun KS <[email protected]>
Signed-off-by: Arun KS <[email protected]>
Cc: Joe Perches <[email protected]>
Cc: Tejun Heo <[email protected]>
Cc: Frederic Weisbecker <[email protected]>
Cc: Paul Gortmaker <[email protected]>
Cc: Kay Sievers <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
-rw-r--r-- | kernel/printk/printk.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index f8b41bddc6dc..b1d255f04135 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -1595,10 +1595,13 @@ asmlinkage int vprintk_emit(int facility, int level, * either merge it with the current buffer and flush, or if * there was a race with interrupts (prefix == true) then just * flush it out and store this line separately. + * If the preceding printk was from a different task and missed + * a newline, flush and append the newline. */ - if (cont.len && cont.owner == current) { - if (!(lflags & LOG_PREFIX)) - stored = cont_add(facility, level, text, text_len); + if (cont.len) { + if (cont.owner == current && !(lflags & LOG_PREFIX)) + stored = cont_add(facility, level, text, + text_len); cont_flush(LOG_NEWLINE); } |