On Thu, 2014-11-06 at 17:22 +0000, Daniel Thompson wrote:
On 06/11/14 16:13, Joe Perches wrote:
On Thu, 2014-11-06 at 15:27 +0000, Daniel Thompson wrote:
Currently when kdb traps printk messages then the raw log level prefix (consisting of '\001' followed by a numeral) does not get stripped off before the message is issued to the various I/O handlers supported by kdb. This causes annoying visual noise as well as causing problems grepping for ^. It is also a change of behaviour compared to normal usage of printk() usage. For example <SysRq>-h ends up with different to that of kdb's "sr h".
This patch addresses the problem by stripping log levels from messages before they are issued to the I/O handlers.
Perhaps instead of stripping the logging level, maybe a KERN_SOH_ASCII 'char' sequence should be emitted as '<' 'char' '>' (see: printk:print_prefix)
Maybe this should be added to stable from v3.6 when KERN_SOH_ASCII was first added.
You mean call the problem a regression and try to restore the original 3.5 behaviour?
Yes.
I added KERN_SOH_ASCII so to me it's a regression.
However I have to confess that I don't really like the old behaviour. I'd view it as contradicting the normal behaviours of consoles (including the kgdbcon console). Why should printk() inside kdb show different text to printk() outside kdb? For me, having <5> and <c> scribbled all over the output of an "sr" command (which I think is probably the heaviest user of printk() inside kdb) never struck me as adding much value.
Is the above paragraph convincing?
I don't use it so I have a useful opinion.
I don't recall that anyone has reported it in the 2+ years since so it doesn't seem widely used.
But then again, this is a resend and I don't recall seeing it the first time either.
On the other hand if you really mean "perhaps and maybe" then I'd prefer to leave it as it it.
Your choice.
btw: in the patch I suggest using printk_skip_level instead of the direct test here:
+ cp = kdb_buffer; + if (cp[0] == KERN_SOH_ASCII && cp[1] != '\0') + cp += 2;
so this could be
cp = printk_skip_level(kdb_buffer);