[Crash-utility] [PATCH] Print '\n' and '\t' in log command
Dave Anderson
anderson at redhat.com
Thu Oct 25 19:00:58 UTC 2012
----- Original Message -----
>
>
> ----- Original Message -----
> > Hi Dave,
> >
> > Currently the log command does not print '\n' and '\t'. The reason
> > is that isprint() does not return true for those characters.
> > This patch adds the isspace() test in order to print these characters
> > properly.
> >
> > Michael
> > ---
> > kernel.c | 2 +-
> > 1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > --- a/kernel.c
> > +++ b/kernel.c
> > @@ -4164,7 +4164,7 @@ dump_log_entry(char *logptr, int msg_fla
> > }
> >
> > for (i = 0, p = msg; i < text_len; i++, p++)
> > - fputc(isprint(*p) ? *p : '.', fp);
> > + fputc(isprint(*p) || isspace(*p) ? *p : '.', fp);
> >
> > if (dict_len & (msg_flags & SHOW_LOG_DICT)) {
> > fprintf(fp, "\n");
> >
>
> Hmmm, that's OK, but it still looks a bit strange.
>
> For example, without the patch, entries 003371 and 003695 show
> the issue:
>
> crash> log
> ...
> [ 0.003371] ENERGY_PERF_BIAS: Set to 'normal', was
> 'performance'.ENERGY_PERF_BIAS: View and update with
> x86_energy_perf_policy(8)
> [ 0.003678] mce: CPU supports 7 MCE banks
> [ 0.003687] CPU0: Thermal monitoring enabled (TM1)
> [ 0.003692] process: using mwait in idle threads
> [ 0.003695] Last level iTLB entries: 4KB 512, 2MB 0, 4MB 0.Last
> level dTLB entries: 4KB 512, 2MB 32, 4MB 32.tlb_flushall_shift is
> 0x1
> [ 0.004676] ACPI: Core revision 20120711
> ...
>
> With your patch applied:
>
> crash> log
> ...
> [ 0.003371] ENERGY_PERF_BIAS: Set to 'normal', was 'performance'
> ENERGY_PERF_BIAS: View and update with x86_energy_perf_policy(8)
> [ 0.003678] mce: CPU supports 7 MCE banks
> [ 0.003687] CPU0: Thermal monitoring enabled (TM1)
> [ 0.003692] process: using mwait in idle threads
> [ 0.003695] Last level iTLB entries: 4KB 512, 2MB 0, 4MB 0
> Last level dTLB entries: 4KB 512, 2MB 32, 4MB 32
> tlb_flushall_shift is 0x1
> [ 0.004676] ACPI: Core revision 20120711
> ...
>
> But, note that the dmesg(1) command repeats the timestamp for each
> line:
>
> $ dmesg
> ...
> [ 0.003371] ENERGY_PERF_BIAS: Set to 'normal', was 'performance'
> [ 0.003371] ENERGY_PERF_BIAS: View and update with
> x86_energy_perf_policy(8)
> [ 0.003678] mce: CPU supports 7 MCE banks
> [ 0.003687] CPU0: Thermal monitoring enabled (TM1)
> [ 0.003692] process: using mwait in idle threads
> [ 0.003695] Last level iTLB entries: 4KB 512, 2MB 0, 4MB 0
> [ 0.003695] Last level dTLB entries: 4KB 512, 2MB 32, 4MB 32
> [ 0.003695] tlb_flushall_shift is 0x1
> [ 0.004676] ACPI: Core revision 20120711
> ...
>
> I think that the log command should either (1) repeat the timestamp as
> dmesg(1) does, or (2) insert "ilen" number of spaces before printing the
> extra message lines.
>
> What do you think?
>
> Dave
IMHO, for readability, despite diverging from dmesg(1), I actually prefer
inserting spaces instead of repeating the timestamp, so that it looks
like this:
crash> log
...
[ 0.003371] ENERGY_PERF_BIAS: Set to 'normal', was 'performance'
ENERGY_PERF_BIAS: View and update with x86_energy_perf_policy(8)
[ 0.003678] mce: CPU supports 7 MCE banks
[ 0.003687] CPU0: Thermal monitoring enabled (TM1)
[ 0.003692] process: using mwait in idle threads
[ 0.003695] Last level iTLB entries: 4KB 512, 2MB 0, 4MB 0
Last level dTLB entries: 4KB 512, 2MB 32, 4MB 32
tlb_flushall_shift is 0x1
[ 0.004676] ACPI: Core revision 20120711
...
And doing it that way maintains a bit of continuity w/respect to the
way that dictionary data can be dumped with "runq -d":
crash> log
...
[ 0.214952] pci 0000:00:00.0: [8086:0154] type 00 class 0x060000
[ 0.214987] pci 0000:00:02.0: [8086:0166] type 00 class 0x030000
[ 0.214995] pci 0000:00:02.0: reg 10: [mem 0xf0000000-0xf03fffff 64bit]
[ 0.215000] pci 0000:00:02.0: reg 18: [mem 0xe0000000-0xefffffff 64bit pref]
[ 0.215003] pci 0000:00:02.0: reg 20: [io 0x5000-0x503f]
...
crash> log -d
...
[ 0.214952] pci 0000:00:00.0: [8086:0154] type 00 class 0x060000
SUBSYSTEM=pci
DEVICE=+pci:0000:00:00.0
[ 0.214987] pci 0000:00:02.0: [8086:0166] type 00 class 0x030000
SUBSYSTEM=pci
DEVICE=+pci:0000:00:02.0
[ 0.214995] pci 0000:00:02.0: reg 10: [mem 0xf0000000-0xf03fffff 64bit]
SUBSYSTEM=pci
DEVICE=+pci:0000:00:02.0
[ 0.215000] pci 0000:00:02.0: reg 18: [mem 0xe0000000-0xefffffff 64bit pref]
SUBSYSTEM=pci
DEVICE=+pci:0000:00:02.0
[ 0.215003] pci 0000:00:02.0: reg 20: [io 0x5000-0x503f]
SUBSYSTEM=pci
DEVICE=+pci:0000:00:02.0
...
This patch work for you?
--- kernel.c 15 Oct 2012 19:05:39 -0000 1.286
+++ kernel.c 25 Oct 2012 18:48:59 -0000
@@ -4166,8 +4166,14 @@
fprintf(fp, buf);
}
- for (i = 0, p = msg; i < text_len; i++, p++)
- fputc(isprint(*p) ? *p : '.', fp);
+ for (i = 0, p = msg; i < text_len; i++, p++) {
+ if (*p == '\n')
+ fprintf(fp, "\n%s", space(ilen));
+ else if (isprint(*p) || isspace(*p))
+ fputc(*p, fp);
+ else
+ fputc('.', fp);
+ }
if (dict_len & (msg_flags & SHOW_LOG_DICT)) {
fprintf(fp, "\n");
Dave
-------------- next part --------------
A non-text attachment was scrubbed...
Name: log.patch
Type: text/x-patch
Size: 696 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/crash-utility/attachments/20121025/7c4a9b8c/attachment.bin>
More information about the Crash-utility
mailing list