On Apr 19, 2020, at 7:11 PM, crash-utility-request(a)redhat.com wrote:
 
 Send Crash-utility mailing list submissions to
    crash-utility(a)redhat.com
 
 To subscribe or unsubscribe via the World Wide Web, visit
    
https://www.redhat.com/mailman/listinfo/crash-utility
 or, via email, send a message with subject or body 'help' to
    crash-utility-request(a)redhat.com
 
 You can reach the person managing the list at
    crash-utility-owner(a)redhat.com
 
 When replying, please edit your Subject line so it is more specific
 than "Re: Contents of Crash-utility digest..."
 
 
 Today's Topics:
 
   1. Re: Crash-utility Digest, Vol 175, Issue 27 (Jon Deacon)
 
 
 ----------------------------------------------------------------------
 
 Message: 1
 Date: Sun, 19 Apr 2020 19:10:49 -0400
 From: Jon Deacon <jdeacon60(a)gmail.com>
 To: crash-utility(a)redhat.com
 Subject: Re: [Crash-utility] Crash-utility Digest, Vol 175, Issue 27
 Message-ID: <BBA9A8B9-A0EA-404C-AC73-7814A9544219(a)gmail.com>
 Content-Type: text/plain; charset=utf-8
 
 Would you please take me off your list totally ridiculous  
 
 Sent from my iPhone
 
> On Apr 19, 2020, at 4:01 PM, crash-utility-request(a)redhat.com wrote:
> 
> ?Send Crash-utility mailing list submissions to
>   crash-utility(a)redhat.com
> 
> To subscribe or unsubscribe via the World Wide Web, visit
>   
https://www.redhat.com/mailman/listinfo/crash-utility
> or, via email, send a message with subject or body 'help' to
>   crash-utility-request(a)redhat.com
> 
> You can reach the person managing the list at
>   crash-utility-owner(a)redhat.com
> 
> When replying, please edit your Subject line so it is more specific
> than "Re: Contents of Crash-utility digest..."
> 
> 
> Today's Topics:
> 
>  1. Re: [PATCH] add log -T option to display the message text
>     with human readable timestamp (Dave Anderson)
>  2. Re: [PATCH] add log -T option to display the message text
>     with human readable timestamp (Dave Anderson)
>  3. Re: [PATCH] add log -T option to display the    message    text
>     with human readable timestamp (Moore, Martin (Linux ERT))
> 
> 
> ----------------------------------------------------------------------
> 
> Message: 1
> Date: Sun, 19 Apr 2020 15:34:46 -0400 (EDT)
> From: Dave Anderson <anderson(a)redhat.com>
> To: Wang Long <w(a)laoqinren.net>
> Cc: crash-utility(a)redhat.com
> Subject: Re: [Crash-utility] [PATCH] add log -T option to display the
>   message text with human readable timestamp
> Message-ID:
>   <116726603.23908736.1587324886732.JavaMail.zimbra(a)redhat.com>
> Content-Type: text/plain; charset=utf-8
> 
> 
> 
> ----- Original Message -----
>> Sometimes, we need to know the accurate time of the log, which
>> helps us analyze the problem.
>> 
>> add -T option(like dmesg -T command) for log command to display
>> the message text with human readable timestamp.
>> 
>> Signed-off-by: Wang Long <w(a)laoqinren.net>
> 
> Did you attempt this patch on a live system?  Because your patch to 
> kernel_init() hangs the session.  I didn't bother to investigate beyond
> adding these two debug statements around your addition to kernel_init():
> 
> error(INFO, "start patch...\n");
>         get_uptime(NULL, &uptime_jiffies);
>         uptime_sec = (uptime_jiffies)/(ulonglong)machdep->hz;
>         kt->boot_date.tv_sec = kt->date.tv_sec - uptime_sec;
>         kt->boot_date.tv_nsec = 0;
> error(INFO, "end patch...\n");
> 
> And that's where it hangs:
> 
> $ ./crash
> 
> crash 7.2.9rc13
> Copyright (C) 2002-2020  Red Hat, Inc.
> Copyright (C) 2004, 2005, 2006, 2010  IBM Corporation
> Copyright (C) 1999-2006  Hewlett-Packard Co
> Copyright (C) 2005, 2006, 2011, 2012  Fujitsu Limited
> Copyright (C) 2006, 2007  VA Linux Systems Japan K.K.
> Copyright (C) 2005, 2011  NEC Corporation
> Copyright (C) 1999, 2002, 2007  Silicon Graphics, Inc.
> Copyright (C) 1999, 2000, 2001, 2002  Mission Critical Linux, Inc.
> This program is free software, covered by the GNU General Public License,
> and you are welcome to change it and/or distribute copies of it under
> certain conditions.  Enter "help copying" to see the conditions.
> This program has absolutely no warranty.  Enter "help warranty" for
details.
> 
> GNU gdb (GDB) 7.6
> Copyright (C) 2013 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later <
http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "x86_64-unknown-linux-gnu"...
> 
> WARNING: kernel relocated [796MB]: patching 85687 gdb minimal_symbol values
> 
> crash: start patch...                                                  
> 
> <hang>
> 
> And it shows a cpu spinning at 100%:
> 
> $ top
> top - 15:26:43 up 38 days,  3:41,  5 users,  load average: 1.00, 0.89, 0.65
> Tasks: 280 total,   2 running, 278 sleeping,   0 stopped,   0 zombie
> %Cpu(s):  3.9 us,  8.7 sy,  0.0 ni, 87.3 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
> KiB Mem : 15907600 total,   455876 free,  1232832 used, 14218892 buff/cache
> KiB Swap:  8060924 total,  7395580 free,   665344 used. 14176220 avail Mem 
>   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
> 26668 root      20   0  350268 213688   5680 R 100.0  1.3   5:42.70 crash
>  1707 root      20   0  115692   1184    688 S   0.3  0.0   2:16.52 ksmtuned
> 12852 anderson  20   0 4235240 274608  20320 S   0.3  1.7 601:46.85 gnome-shell
> 13060 anderson  20   0  804924  14100   3744 S   0.3  0.1 118:44.59 gsd-color
> 27045 anderson  20   0  172452   2532   1648 R   0.3  0.0   0:00.08 top
>     1 root      20   0  210504   5592   3224 S   0.0  0.0  18:14.19 systemd
> ...
> 
> I'll let you figure it out...
> 
> Dave
> 
> 
> 
> 
> 
> 
>> ---
>> defs.h   |  2 ++
>> help.c   | 28 +++++++++++++++++++++++++++-
>> kernel.c | 22 ++++++++++++++++++++--
>> 3 files changed, 49 insertions(+), 3 deletions(-)
>> 
>> diff --git a/defs.h b/defs.h
>> index d8eda5e..1644dbd 100644
>> --- a/defs.h/
>> +++ b/defs.h
>> @@ -689,6 +689,7 @@ struct kernel_table {                   /* kernel data */
>>        ulong kernel_module;
>>   int mods_installed;
>>   struct timespec date;
>> +    struct timespec boot_date;
>>   char proc_version[BUFSIZE];
>>   struct new_utsname utsname;
>>   uint kernel_version[3];
>> @@ -5577,6 +5578,7 @@ void dump_log(int);
>> #define SHOW_LOG_DICT  (0x2)
>> #define SHOW_LOG_TEXT  (0x4)
>> #define SHOW_LOG_AUDIT (0x8)
>> +#define SHOW_LOG_CTIME (0x10)
>> void set_cpu(int);
>> void clear_machdep_cache(void);
>> struct stack_hook *gather_text_list(struct bt_info *);
>> diff --git a/help.c b/help.c
>> index c443cad..1ee70f7 100644
>> --- a/help.c
>> +++ b/help.c
>> @@ -3892,12 +3892,13 @@ NULL
>> char *help_log[] = {
>> "log",
>> "dump system message buffer",
>> -"[-tdma]",
>> +"[-Ttdma]",
>> "  This command dumps the kernel log_buf contents in chronological order.
>> The",
>> "  command supports the older log_buf formats, which may or may not contain
>> a",
>> "  timestamp inserted prior to each message, as well as the newer
>> variable-length",
>> "  record format, where the timestamp is contained in each log entry's
>> header.",
>> "  ",/
>> +"    -T  Display the message text with human readable timestamp.",
>> "    -t  Display the message text without the timestamp; only applicable to
>> the",
>> "        variable-length record format.",
>> "    -d  Display the dictionary of key/value pair properties that are
>> optionally",
>> @@ -4031,6 +4032,31 @@ char *help_log[] = {
>> "    type=1307 audit(1489384479.809:4346):  cwd=\"/proc\"",
>> "    ...",
>> " ",
>> +"  Display the message text with human readable timestamp.\n"
>> +"    %s> log -T",
>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>> 0x0000000000000000-0x000000000009fbff] usable",
>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>> 0x000000000009fc00-0x000000000009ffff] reserved",
>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>> 0x00000000000f0000-0x00000000000fffff] reserved",
>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>> 0x0000000000100000-0x00000000dffeffff] usable",
>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>> 0x00000000dfff0000-0x00000000dfffffff] ACPI data",
>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>> 0x00000000fec00000-0x00000000fec00fff] reserved",
>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>> 0x00000000fee00000-0x00000000fee00fff] reserved",
>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>> 0x00000000fffc0000-0x00000000ffffffff] reserved",
>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>> 0x0000000100000000-0x000000011fffffff] usable",
>> +"    [Sat Apr  4 07:41:09 2020] NX (Execute Disable) protection:
active",
>> +"    [Sat Apr  4 07:41:09 2020] SMBIOS 2.5 present.",
>> +"    [Sat Apr  4 07:41:09 2020] DMI: innotek GmbH VirtualBox/VirtualBox,
>> BIOS VirtualBox 12/01/2006",
>> +"    [Sat Apr  4 07:41:09 2020] Hypervisor detected: KVM",
>> +"    [Sat Apr  4 07:41:09 2020] kvm-clock: Using msrs 4b564d01 and
>> 4b564d00",
>> +"    [Sat Apr  4 07:41:09 2020] kvm-clock: cpu 0, msr 6de01001, primary
cpu
>> clock",
>> +"    [Sat Apr  4 07:41:09 2020] kvm-clock: using sched offset of
11838753697
>> cycles",
>> +"    [Sat Apr  4 07:41:09 2020] clocksource: kvm-clock: mask:
>> 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483
ns",
>> +"    [Sat Apr  4 07:41:09 2020] e820: update [mem 0x00000000-0x00000fff]
>> usable ==> reserved",
>> +"    [Sat Apr  4 07:41:09 2020] e820: remove [mem 0x000a0000-0x000fffff]
>> usable",
>> +"    [Sat Apr  4 07:41:09 2020] last_pfn = 0x120000 max_arch_pfn =
>> 0x400000000",
>> +"    [Sat Apr  4 07:41:09 2020] MTRR default type: uncachable",
>> +"    [Sat Apr  4 07:41:09 2020] MTRR variable ranges disabled:",
>> +"    ...",/
>> NULL
>> };
>> 
>> diff --git a/kernel.c b/kernel.c
>> index 7604fac..016d8d9 100644
>> --- a/kernel.c
>> +++ b/kernel.c
>> @@ -111,6 +111,8 @@ kernel_init()
>>   char *irq_desc_type_name;
>>   ulong pv_init_ops;/
>>   struct gnu_request req;
>> +    ulonglong uptime_jiffies;
>> +    ulong  uptime_sec;
>> 
>>   if (pc->flags & KERNEL_DEBUG_QUERY)
>>       return;
>> @@ -294,6 +296,14 @@ kernel_init()
>>   } else
>>       error(INFO, "cannot determine base kernel version\n");
>> 
>> +    get_uptime(NULL, &uptime_jiffies);
>> +    uptime_sec = (uptime_jiffies)/(ulonglong)machdep->hz;
>> +    kt->boot_date.tv_sec = kt->date.tv_sec - uptime_sec;
>> +    kt->boot_date.tv_nsec = 0;
>> +
>> +    if (CRASHDEBUG(1))
>> +        fprintf(fp, "boot_date: %lx: %s\n",
>> +            kt->boot_date.tv_sec,
strip_linefeeds(ctime(&kt->boot_date.tv_sec)));
>> 
>>   verify_version();
>> 
>> @@ -4912,9 +4922,12 @@ cmd_log(void)
>> 
>>   msg_flags = 0;
>> 
>> -        while ((c = getopt(argcnt, args, "tdma")) != EOF) {
>> +        while ((c = getopt(argcnt, args, "Ttdma")) != EOF) {
>>                switch(c)
>>                {
>> +        case 'T':
>> +            msg_flags |= SHOW_LOG_CTIME;
>> +            break;
>>       case 't':
>>           msg_flags |= SHOW_LOG_TEXT;
>>           break;
>> @@ -5154,7 +5167,12 @@ dump_log_entry(char *logptr, int msg_flags)
>>   if ((msg_flags & SHOW_LOG_TEXT) == 0) {
>>       nanos = (ulonglong)ts_nsec / (ulonglong)1000000000;
>>       rem = (ulonglong)ts_nsec % (ulonglong)1000000000;
>> -        sprintf(buf, "[%5lld.%06ld] ", nanos, rem/1000);
>> +        if (msg_flags & SHOW_LOG_CTIME) {
>> +            time_t t = kt->boot_date.tv_sec + nanos;
>> +            sprintf(buf, "[%s] ", strip_linefeeds(ctime(&t)));
>> +        }
>> +        else
>> +            sprintf(buf, "[%5lld.%06ld] ", nanos, rem/1000);
>>       ilen = strlen(buf);
>>       fprintf(fp, "%s", buf);
>>   }
>> --
>> 1.8.3.1
>> 
>> 
>> 
>> 
> 
> 
> 
> ------------------------------
> 
> Message: 2
> Date: Sun, 19 Apr 2020 15:48:55 -0400 (EDT)
> From: Dave Anderson <anderson(a)redhat.com>
> To: "Discussion list for crash utility usage,    maintenance and
>   development" <crash-utility(a)redhat.com>
> Subject: Re: [Crash-utility] [PATCH] add log -T option to display the
>   message text with human readable timestamp
> Message-ID:
>   <2105444223.23908999.1587325735354.JavaMail.zimbra(a)redhat.com>
> Content-Type: text/plain; charset=utf-8
> 
> 
> FWIW, I tried it on another RHEL7 machine running live,
> but then also on a RHEL8 kernel dumpfile, and they all hang:
> 
> $ crash vmlinux vmcore
> 
> crash 7.2.9rc13
> Copyright (C) 2002-2020  Red Hat, Inc.
> Copyright (C) 2004, 2005, 2006, 2010  IBM Corporation
> Copyright (C) 1999-2006  Hewlett-Packard Co
> Copyright (C) 2005, 2006, 2011, 2012  Fujitsu Limited
> Copyright (C) 2006, 2007  VA Linux Systems Japan K.K.
> Copyright (C) 2005, 2011  NEC Corporation
> Copyright (C) 1999, 2002, 2007  Silicon Graphics, Inc.
> Copyright (C) 1999, 2000, 2001, 2002  Mission Critical Linux, Inc.
> This program is free software, covered by the GNU General Public License,
> and you are welcome to change it and/or distribute copies of it under
> certain conditions.  Enter "help copying" to see the conditions.
> This program has absolutely no warranty.  Enter "help warranty" for
details.
> 
> GNU gdb (GDB) 7.6                         
> Copyright (C) 2013 Free Software Foundation, Inc.
> License GPLv3+: GNU GPL version 3 or later <
http://gnu.org/licenses/gpl.html>
> This is free software: you are free to change and redistribute it.
> There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
> and "show warranty" for details.
> This GDB was configured as "x86_64-unknown-linux-gnu"...
> 
> WARNING: kernel relocated [950MB]: patching 94929 gdb minimal_symbol values
> 
> crash: start patch...                                                  
> 
> 
> 
> ----- Original Message -----
>> 
>> 
>> ----- Original Message -----
>>> Sometimes, we need to know the accurate time of the log, which
>>> helps us analyze the problem.
>>> 
>>> add -T option(like dmesg -T command) for log command to display
>>> the message text with human readable timestamp.
>>> 
>>> Signed-off-by: Wang Long <w(a)laoqinren.net>
>> 
>> Did you attempt this patch on a live system?  Because your patch to
>> kernel_init() hangs the session.  I didn't bother to investigate beyond
>> adding these two debug statements around your addition to kernel_init():
>> 
>> error(INFO, "start patch...\n");
>>         get_uptime(NULL, &uptime_jiffies);
>>         uptime_sec = (uptime_jiffies)/(ulonglong)machdep->hz;
>>         kt->boot_date.tv_sec = kt->date.tv_sec - uptime_sec;
>>         kt->boot_date.tv_nsec = 0;
>> error(INFO, "end patch...\n");
>> 
>> And that's where it hangs:
>> 
>> $ ./crash
>> 
>> crash 7.2.9rc13
>> Copyright (C) 2002-2020  Red Hat, Inc.
>> Copyright (C) 2004, 2005, 2006, 2010  IBM Corporation
>> Copyright (C) 1999-2006  Hewlett-Packard Co
>> Copyright (C) 2005, 2006, 2011, 2012  Fujitsu Limited
>> Copyright (C) 2006, 2007  VA Linux Systems Japan K.K.
>> Copyright (C) 2005, 2011  NEC Corporation
>> Copyright (C) 1999, 2002, 2007  Silicon Graphics, Inc.
>> Copyright (C) 1999, 2000, 2001, 2002  Mission Critical Linux, Inc.
>> This program is free software, covered by the GNU General Public License,
>> and you are welcome to change it and/or distribute copies of it under
>> certain conditions.  Enter "help copying" to see the conditions.
>> This program has absolutely no warranty.  Enter "help warranty" for
>> details.
>> 
>> GNU gdb (GDB) 7.6
>> Copyright (C) 2013 Free Software Foundation, Inc.
>> License GPLv3+: GNU GPL version 3 or later
>> <
http://gnu.org/licenses/gpl.html>
>> This is free software: you are free to change and redistribute it.
>> There is NO WARRANTY, to the extent permitted by law.  Type "show
copying"
>> and "show warranty" for details.
>> This GDB was configured as "x86_64-unknown-linux-gnu"...
>> 
>> WARNING: kernel relocated [796MB]: patching 85687 gdb minimal_symbol values
>> 
>> crash: start patch...
>> 
>> <hang>
>> 
>> And it shows a cpu spinning at 100%:
>> 
>> $ top
>> top - 15:26:43 up 38 days,  3:41,  5 users,  load average: 1.00, 0.89, 0.65
>> Tasks: 280 total,   2 running, 278 sleeping,   0 stopped,   0 zombie
>> %Cpu(s):  3.9 us,  8.7 sy,  0.0 ni, 87.3 id,  0.0 wa,  0.0 hi,  0.0 si,
>> 0.0 st
>> KiB Mem : 15907600 total,   455876 free,  1232832 used, 14218892 buff/cache
>> KiB Swap:  8060924 total,  7395580 free,   665344 used. 14176220 avail Mem
>>   PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
>> 26668 root      20   0  350268 213688   5680 R 100.0  1.3   5:42.70 crash
>>  1707 root      20   0  115692   1184    688 S   0.3  0.0   2:16.52
>>  ksmtuned
>> 12852 anderson  20   0 4235240 274608  20320 S   0.3  1.7 601:46.85
>> gnome-shell
>> 13060 anderson  20   0  804924  14100   3744 S   0.3  0.1 118:44.59
>> gsd-color
>> 27045 anderson  20   0  172452   2532   1648 R   0.3  0.0   0:00.08 top
>>     1 root      20   0  210504   5592   3224 S   0.0  0.0  18:14.19 systemd
>> ...
>> 
>> I'll let you figure it out...
>> 
>> Dave
>> 
>> 
>> 
>> 
>> 
>> 
>>> ---
>>> defs.h   |  2 ++
>>> help.c   | 28 +++++++++++++++++++++++++++-
>>> kernel.c | 22 ++++++++++++++++++++--
>>> 3 files changed, 49 insertions(+), 3 deletions(-)
>>> 
>>> diff --git a/defs.h b/defs.h
>>> index d8eda5e..1644dbd 100644
>>> --- a/defs.h/
>>> +++ b/defs.h
>>> @@ -689,6 +689,7 @@ struct kernel_table {                   /* kernel data
>>> */
>>>        ulong kernel_module;
>>>   int mods_installed;
>>>   struct timespec date;
>>> +    struct timespec boot_date;
>>>   char proc_version[BUFSIZE];
>>>   struct new_utsname utsname;
>>>   uint kernel_version[3];
>>> @@ -5577,6 +5578,7 @@ void dump_log(int);
>>> #define SHOW_LOG_DICT  (0x2)
>>> #define SHOW_LOG_TEXT  (0x4)
>>> #define SHOW_LOG_AUDIT (0x8)
>>> +#define SHOW_LOG_CTIME (0x10)
>>> void set_cpu(int);
>>> void clear_machdep_cache(void);
>>> struct stack_hook *gather_text_list(struct bt_info *);
>>> diff --git a/help.c b/help.c
>>> index c443cad..1ee70f7 100644
>>> --- a/help.c
>>> +++ b/help.c
>>> @@ -3892,12 +3892,13 @@ NULL
>>> char *help_log[] = {
>>> "log",
>>> "dump system message buffer",
>>> -"[-tdma]",
>>> +"[-Ttdma]",
>>> "  This command dumps the kernel log_buf contents in chronological
order.
>>> The",
>>> "  command supports the older log_buf formats, which may or may not
>>> contain
>>> a",
>>> "  timestamp inserted prior to each message, as well as the newer
>>> variable-length",
>>> "  record format, where the timestamp is contained in each log
entry's
>>> header.",
>>> "  ",/
>>> +"    -T  Display the message text with human readable
timestamp.",
>>> "    -t  Display the message text without the timestamp; only
applicable
>>> to
>>> the",
>>> "        variable-length record format.",
>>> "    -d  Display the dictionary of key/value pair properties that are
>>> optionally",
>>> @@ -4031,6 +4032,31 @@ char *help_log[] = {
>>> "    type=1307 audit(1489384479.809:4346): 
cwd=\"/proc\"",
>>> "    ...",
>>> " ",
>>> +"  Display the message text with human readable timestamp.\n"
>>> +"    %s> log -T",
>>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>>> 0x0000000000000000-0x000000000009fbff] usable",
>>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>>> 0x000000000009fc00-0x000000000009ffff] reserved",
>>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>>> 0x00000000000f0000-0x00000000000fffff] reserved",
>>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>>> 0x0000000000100000-0x00000000dffeffff] usable",
>>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>>> 0x00000000dfff0000-0x00000000dfffffff] ACPI data",
>>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>>> 0x00000000fec00000-0x00000000fec00fff] reserved",
>>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>>> 0x00000000fee00000-0x00000000fee00fff] reserved",
>>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>>> 0x00000000fffc0000-0x00000000ffffffff] reserved",
>>> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
>>> 0x0000000100000000-0x000000011fffffff] usable",
>>> +"    [Sat Apr  4 07:41:09 2020] NX (Execute Disable) protection:
active",
>>> +"    [Sat Apr  4 07:41:09 2020] SMBIOS 2.5 present.",
>>> +"    [Sat Apr  4 07:41:09 2020] DMI: innotek GmbH
VirtualBox/VirtualBox,
>>> BIOS VirtualBox 12/01/2006",
>>> +"    [Sat Apr  4 07:41:09 2020] Hypervisor detected: KVM",
>>> +"    [Sat Apr  4 07:41:09 2020] kvm-clock: Using msrs 4b564d01 and
>>> 4b564d00",
>>> +"    [Sat Apr  4 07:41:09 2020] kvm-clock: cpu 0, msr 6de01001,
primary
>>> cpu
>>> clock",
>>> +"    [Sat Apr  4 07:41:09 2020] kvm-clock: using sched offset of
>>> 11838753697
>>> cycles",
>>> +"    [Sat Apr  4 07:41:09 2020] clocksource: kvm-clock: mask:
>>> 0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483
>>> ns",
>>> +"    [Sat Apr  4 07:41:09 2020] e820: update [mem
0x00000000-0x00000fff]
>>> usable ==> reserved",
>>> +"    [Sat Apr  4 07:41:09 2020] e820: remove [mem
0x000a0000-0x000fffff]
>>> usable",
>>> +"    [Sat Apr  4 07:41:09 2020] last_pfn = 0x120000 max_arch_pfn =
>>> 0x400000000",
>>> +"    [Sat Apr  4 07:41:09 2020] MTRR default type: uncachable",
>>> +"    [Sat Apr  4 07:41:09 2020] MTRR variable ranges disabled:",
>>> +"    ...",/
>>> NULL
>>> };
>>> 
>>> diff --git a/kernel.c b/kernel.c
>>> index 7604fac..016d8d9 100644
>>> --- a/kernel.c
>>> +++ b/kernel.c
>>> @@ -111,6 +111,8 @@ kernel_init()
>>>   char *irq_desc_type_name;
>>>   ulong pv_init_ops;/
>>>   struct gnu_request req;
>>> +    ulonglong uptime_jiffies;
>>> +    ulong  uptime_sec;
>>> 
>>>   if (pc->flags & KERNEL_DEBUG_QUERY)
>>>       return;
>>> @@ -294,6 +296,14 @@ kernel_init()
>>>   } else
>>>       error(INFO, "cannot determine base kernel version\n");
>>> 
>>> +    get_uptime(NULL, &uptime_jiffies);
>>> +    uptime_sec = (uptime_jiffies)/(ulonglong)machdep->hz;
>>> +    kt->boot_date.tv_sec = kt->date.tv_sec - uptime_sec;
>>> +    kt->boot_date.tv_nsec = 0;
>>> +
>>> +    if (CRASHDEBUG(1))
>>> +        fprintf(fp, "boot_date: %lx: %s\n",
>>> +            kt->boot_date.tv_sec,
strip_linefeeds(ctime(&kt->boot_date.tv_sec)));
>>> 
>>>   verify_version();
>>> 
>>> @@ -4912,9 +4922,12 @@ cmd_log(void)
>>> 
>>>   msg_flags = 0;
>>> 
>>> -        while ((c = getopt(argcnt, args, "tdma")) != EOF) {
>>> +        while ((c = getopt(argcnt, args, "Ttdma")) != EOF) {
>>>                switch(c)
>>>                {
>>> +        case 'T':
>>> +            msg_flags |= SHOW_LOG_CTIME;
>>> +            break;
>>>       case 't':
>>>           msg_flags |= SHOW_LOG_TEXT;
>>>           break;
>>> @@ -5154,7 +5167,12 @@ dump_log_entry(char *logptr, int msg_flags)
>>>   if ((msg_flags & SHOW_LOG_TEXT) == 0) {
>>>       nanos = (ulonglong)ts_nsec / (ulonglong)1000000000;
>>>       rem = (ulonglong)ts_nsec % (ulonglong)1000000000;
>>> -        sprintf(buf, "[%5lld.%06ld] ", nanos, rem/1000);
>>> +        if (msg_flags & SHOW_LOG_CTIME) {
>>> +            time_t t = kt->boot_date.tv_sec + nanos;
>>> +            sprintf(buf, "[%s] ",
strip_linefeeds(ctime(&t)));
>>> +        }
>>> +        else
>>> +            sprintf(buf, "[%5lld.%06ld] ", nanos, rem/1000);
>>>       ilen = strlen(buf);
>>>       fprintf(fp, "%s", buf);
>>>   }
>>> --
>>> 1.8.3.1
>>> 
>>> 
>>> 
>>> 
>> 
>> --
>> Crash-utility mailing list
>> Crash-utility(a)redhat.com
>> 
https://www.redhat.com/mailman/listinfo/crash-utility
>> 
> 
> 
> 
> ------------------------------
> 
> Message: 3
> Date: Sun, 19 Apr 2020 20:01:12 +0000
> From: "Moore, Martin (Linux ERT)" <martin.moore(a)hpe.com>
> To: "Discussion list for crash utility usage,    maintenance and
>   development"    <crash-utility(a)redhat.com>,
"anderson(a)redhat.com"
>   <anderson(a)redhat.com>
> Subject: Re: [Crash-utility] [PATCH] add log -T option to display the
>   message    text with human readable timestamp
> Message-ID:
>  
<AT5PR8401MB05480CDBEEE71C6F900654B991D70(a)AT5PR8401MB0548.NAMPRD84.PROD.OUTLOOK.COM>
> 
> Content-Type: text/plain; charset=WINDOWS-1252
> 
> Just to mention an alternative possibility, the pykdump extension to crash
(
https://sourceforge.net/projects/pykdump/) includes the 'tslog' command to
accomplish this.
> 
> Martin Moore
> Linux Engineering Resolution Team
> HPE Pointnext Services
> Hewlett Packard Enterprise
> 
> Martin.Moore(a)hpe.com?
> 8AM-5PM EDT (GMT-4) Monday-Friday
> Manager: Becky McBride (becky.mcbride(a)hpe.com)
> 
> -----Original Message-----
> From: crash-utility-bounces(a)redhat.com <crash-utility-bounces(a)redhat.com> On
Behalf Of Wang Long
> Sent: Saturday, April 18, 2020 10:21 PM
> To: anderson(a)redhat.com; crash-utility(a)redhat.com
> Subject: [Crash-utility] [PATCH] add log -T option to display the message text with
human readable timestamp
> 
> Sometimes, we need to know the accurate time of the log, which helps us analyze the
problem.
> 
> add -T option(like dmesg -T command) for log command to display the message text with
human readable timestamp.
> 
> Signed-off-by: Wang Long <w(a)laoqinren.net>
> ---
> defs.h   |  2 ++
> help.c   | 28 +++++++++++++++++++++++++++-
> kernel.c | 22 ++++++++++++++++++++--
> 3 files changed, 49 insertions(+), 3 deletions(-)
> 
> diff --git a/defs.h b/defs.h
> index d8eda5e..1644dbd 100644
> --- a/defs.h
> +++ b/defs.h
> @@ -689,6 +689,7 @@ struct kernel_table {                   /* kernel data */
>        ulong kernel_module;
>   int mods_installed;
>   struct timespec date;
> +    struct timespec boot_date;
>   char proc_version[BUFSIZE];
>   struct new_utsname utsname;
>   uint kernel_version[3];
> @@ -5577,6 +5578,7 @@ void dump_log(int);  #define SHOW_LOG_DICT  (0x2)  #define
SHOW_LOG_TEXT  (0x4)  #define SHOW_LOG_AUDIT (0x8)
> +#define SHOW_LOG_CTIME (0x10)
> void set_cpu(int);
> void clear_machdep_cache(void);
> struct stack_hook *gather_text_list(struct bt_info *); diff --git a/help.c b/help.c
index c443cad..1ee70f7 100644
> --- a/help.c
> +++ b/help.c
> @@ -3892,12 +3892,13 @@ NULL
> char *help_log[] = {
> "log",
> "dump system message buffer",
> -"[-tdma]",
> +"[-Ttdma]",
> "  This command dumps the kernel log_buf contents in chronological order. 
The",  "  command supports the older log_buf formats, which may or may not
contain a",  "  timestamp inserted prior to each message, as well as the newer
variable-length",  "  record format, where the timestamp is contained in each
log entry's header.",  "  ",
> +"    -T  Display the message text with human readable timestamp.",
> "    -t  Display the message text without the timestamp; only applicable to
the",
> "        variable-length record format.",
> "    -d  Display the dictionary of key/value pair properties that are
optionally",
> @@ -4031,6 +4032,31 @@ char *help_log[] = {
> "    type=1307 audit(1489384479.809:4346):  cwd=\"/proc\"",
> "    ...",
> " ",
> +"  Display the message text with human readable timestamp.\n"
> +"    %s> log -T",
> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
0x0000000000000000-0x000000000009fbff] usable",
> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
0x000000000009fc00-0x000000000009ffff] reserved",
> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
0x00000000000f0000-0x00000000000fffff] reserved",
> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
0x0000000000100000-0x00000000dffeffff] usable",
> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
0x00000000dfff0000-0x00000000dfffffff] ACPI data",
> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
0x00000000fec00000-0x00000000fec00fff] reserved",
> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
0x00000000fee00000-0x00000000fee00fff] reserved",
> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
0x00000000fffc0000-0x00000000ffffffff] reserved",
> +"    [Sat Apr  4 07:41:09 2020] BIOS-e820: [mem
0x0000000100000000-0x000000011fffffff] usable",
> +"    [Sat Apr  4 07:41:09 2020] NX (Execute Disable) protection: active",
> +"    [Sat Apr  4 07:41:09 2020] SMBIOS 2.5 present.",
> +"    [Sat Apr  4 07:41:09 2020] DMI: innotek GmbH VirtualBox/VirtualBox, BIOS
VirtualBox 12/01/2006",
> +"    [Sat Apr  4 07:41:09 2020] Hypervisor detected: KVM",
> +"    [Sat Apr  4 07:41:09 2020] kvm-clock: Using msrs 4b564d01 and
4b564d00",
> +"    [Sat Apr  4 07:41:09 2020] kvm-clock: cpu 0, msr 6de01001, primary cpu
clock",
> +"    [Sat Apr  4 07:41:09 2020] kvm-clock: using sched offset of 11838753697
cycles",
> +"    [Sat Apr  4 07:41:09 2020] clocksource: kvm-clock: mask:
0xffffffffffffffff max_cycles: 0x1cd42e4dffb, max_idle_ns: 881590591483 ns",
> +"    [Sat Apr  4 07:41:09 2020] e820: update [mem 0x00000000-0x00000fff] usable
==> reserved",
> +"    [Sat Apr  4 07:41:09 2020] e820: remove [mem 0x000a0000-0x000fffff]
usable",
> +"    [Sat Apr  4 07:41:09 2020] last_pfn = 0x120000 max_arch_pfn =
0x400000000",
> +"    [Sat Apr  4 07:41:09 2020] MTRR default type: uncachable",
> +"    [Sat Apr  4 07:41:09 2020] MTRR variable ranges disabled:",
> +"    ...",
> NULL               
> };
> 
> diff --git a/kernel.c b/kernel.c
> index 7604fac..016d8d9 100644
> --- a/kernel.c
> +++ b/kernel.c
> @@ -111,6 +111,8 @@ kernel_init()
>   char *irq_desc_type_name;    
>   ulong pv_init_ops;
>   struct gnu_request req;
> +    ulonglong uptime_jiffies;
> +    ulong  uptime_sec;
> 
>   if (pc->flags & KERNEL_DEBUG_QUERY)
>       return;
> @@ -294,6 +296,14 @@ kernel_init()
>   } else
>       error(INFO, "cannot determine base kernel version\n");
> 
> +    get_uptime(NULL, &uptime_jiffies);
> +    uptime_sec = (uptime_jiffies)/(ulonglong)machdep->hz;
> +    kt->boot_date.tv_sec = kt->date.tv_sec - uptime_sec;
> +    kt->boot_date.tv_nsec = 0;
> +
> +    if (CRASHDEBUG(1))
> +        fprintf(fp, "boot_date: %lx: %s\n",
> +            kt->boot_date.tv_sec, 
> +strip_linefeeds(ctime(&kt->boot_date.tv_sec)));
> 
>   verify_version();
> 
> @@ -4912,9 +4922,12 @@ cmd_log(void)
> 
>   msg_flags = 0;
> 
> -        while ((c = getopt(argcnt, args, "tdma")) != EOF) {
> +        while ((c = getopt(argcnt, args, "Ttdma")) != EOF) {
>                switch(c)
>                {
> +        case 'T':
> +            msg_flags |= SHOW_LOG_CTIME;
> +            break;
>       case 't':
>           msg_flags |= SHOW_LOG_TEXT;
>           break;
> @@ -5154,7 +5167,12 @@ dump_log_entry(char *logptr, int msg_flags)
>   if ((msg_flags & SHOW_LOG_TEXT) == 0) {
>       nanos = (ulonglong)ts_nsec / (ulonglong)1000000000;
>       rem = (ulonglong)ts_nsec % (ulonglong)1000000000;
> -        sprintf(buf, "[%5lld.%06ld] ", nanos, rem/1000);
> +        if (msg_flags & SHOW_LOG_CTIME) {
> +            time_t t = kt->boot_date.tv_sec + nanos;
> +            sprintf(buf, "[%s] ", strip_linefeeds(ctime(&t)));
> +        }
> +        else
> +            sprintf(buf, "[%5lld.%06ld] ", nanos, rem/1000);
>       ilen = strlen(buf);
>       fprintf(fp, "%s", buf);
>   }
> --
> 1.8.3.1
> 
> 
> 
> 
> --
> Crash-utility mailing list
> Crash-utility(a)redhat.com
> 
https://www.redhat.com/mailman/listinfo/crash-utility
> 
> 
> 
> 
> ------------------------------
> 
> --
> Crash-utility mailing list
> Crash-utility(a)redhat.com
> 
https://www.redhat.com/mailman/listinfo/crash-utility
> 
> End of Crash-utility Digest, Vol 175, Issue 27
> **********************************************
> 
 
 
 
 
 ------------------------------
 
 --
 Crash-utility mailing list
 Crash-utility(a)redhat.com
 
https://www.redhat.com/mailman/listinfo/crash-utility
 
 End of Crash-utility Digest, Vol 175, Issue 28
 **********************************************