From mboxrd@z Thu Jan 1 00:00:00 1970 From: Don Slutz Subject: Re: [PATCH v3 5/5] xen/console: Traditional console timestamps including milliseconds Date: Thu, 06 Mar 2014 18:54:24 -0500 Message-ID: <53190AB0.4020806@terremark.com> References: <1394134085-22952-1-git-send-email-andrew.cooper3@citrix.com> <1394134085-22952-6-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii"; Format="flowed" Content-Transfer-Encoding: 7bit Return-path: In-Reply-To: <1394134085-22952-6-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: Andrew Cooper , Xen-devel Cc: Tim Deegan , Jan Beulich , Keir Fraser , Ian Campbell , Stefano Stabellini List-Id: xen-devel@lists.xenproject.org On 03/06/14 14:28, Andrew Cooper wrote: > Suggested-by: Don Slutz > Signed-off-by: Andrew Cooper > CC: Keir Fraser > CC: Jan Beulich > CC: Ian Campbell > CC: Stefano Stabellini > CC: Tim Deegan > > --- > > The change in arm is only for the sake of compilation - the function is a > no-op. > --- > docs/misc/xen-command-line.markdown | 4 +++- > xen/arch/arm/time.c | 2 +- > xen/arch/x86/time.c | 10 +++++++--- > xen/drivers/char/console.c | 11 ++++++++++- > xen/include/xen/time.h | 2 +- > 5 files changed, 22 insertions(+), 7 deletions(-) > > diff --git a/docs/misc/xen-command-line.markdown b/docs/misc/xen-command-line.markdown > index 98c9e5e..89dc484 100644 > --- a/docs/misc/xen-command-line.markdown > +++ b/docs/misc/xen-command-line.markdown > @@ -275,7 +275,7 @@ cleared. This allows a single port to be shared by two subsystems > makes sense on its own. > > ### console\_timestamps > -> `= none | date | boot` > +> `= none | date | datems | boot` > > > Default: `boot` > > @@ -284,6 +284,8 @@ Specify which timestamp format Xen should use for each console line. > * `none`: No timestamps > * `date`: Date and time information > * `[YYYY-MM-DD HH:MM:SS]` > +* `datems`: Date and time, with milliseconds > + * `[YYYY-MM-DD HH:MM:SS.mmm]` > * `boot`: Seconds and microseconds since boot > * `[SSSSSS.uuuuuu]` > > diff --git a/xen/arch/arm/time.c b/xen/arch/arm/time.c > index 81e3e28..22e94bb 100644 > --- a/xen/arch/arm/time.c > +++ b/xen/arch/arm/time.c > @@ -282,7 +282,7 @@ void domain_set_time_offset(struct domain *d, int32_t time_offset_seconds) > /* XXX update guest visible wallclock time */ > } > > -struct tm wallclock_time(void) > +struct tm wallclock_time(uint64_t *ns) > { Adding: if ( ns ) *ns = 0; Makes sense here. > return (struct tm) { 0 }; > } > diff --git a/xen/arch/x86/time.c b/xen/arch/x86/time.c > index 4f4de22..1156ccc 100644 > --- a/xen/arch/x86/time.c > +++ b/xen/arch/x86/time.c > @@ -1646,15 +1646,19 @@ int dom0_pit_access(struct ioreq *ioreq) > return 0; > } > > -struct tm wallclock_time(void) > +struct tm wallclock_time(uint64_t *ns) > { > - uint64_t seconds; > + uint64_t seconds, nsec; > > if ( !wc_sec ) And here. > return (struct tm) { 0 }; > > seconds = NOW() + SECONDS(wc_sec) + wc_nsec; > - do_div(seconds, 1000000000); > + nsec = do_div(seconds, 1000000000); > + > + if ( *ns ) This should be just if ( ns ) -Don Slutz > + *ns = nsec; > + > return gmtime(seconds); > } > > diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c > index 60461b9..837e8a8 100644 > --- a/xen/drivers/char/console.c > +++ b/xen/drivers/char/console.c > @@ -53,6 +53,7 @@ enum con_timestamp_mode > { > TSM_NONE, /* No timestamps */ > TSM_DATE, /* [YYYY-MM-DD HH:MM:SS] */ > + TSM_DATE_MS, /* [YYYY-MM-DD HH:MM:SS.mmm] */ > TSM_BOOT /* [SSSSSS.uuuuuu] */ > }; > > @@ -560,6 +561,8 @@ static void __init parse_console_timestamps(char *s) > if ( *s == '\0' || /* Compat for old booleanparam() */ > !strcmp(s, "date") ) > opt_con_timestamp_mode = TSM_DATE; > + else if ( !strcmp(s, "datems") ) > + opt_con_timestamp_mode = TSM_DATE_MS; > else if ( !strcmp(s, "boot") ) > opt_con_timestamp_mode = TSM_BOOT; > else if ( !strcmp(s, "none") ) > @@ -579,7 +582,8 @@ static void printk_start_of_line(const char *prefix) > switch ( opt_con_timestamp_mode ) > { > case TSM_DATE: > - tm = wallclock_time(); > + case TSM_DATE_MS: > + tm = wallclock_time(&nsec); > > if ( tm.tm_mday == 0 ) > return; > @@ -588,6 +592,11 @@ static void printk_start_of_line(const char *prefix) > snprintf(tstr, sizeof(tstr), "[%04u-%02u-%02u %02u:%02u:%02u] ", > 1900 + tm.tm_year, tm.tm_mon + 1, tm.tm_mday, > tm.tm_hour, tm.tm_min, tm.tm_sec); > + else > + snprintf(tstr, sizeof(tstr), > + "[%04u-%02u-%02u %02u:%02u:%02u.%03"PRIu64"] ", > + 1900 + tm.tm_year, tm.tm_mon + 1, tm.tm_mday, > + tm.tm_hour, tm.tm_min, tm.tm_sec, nsec / 1000000); > break; > > case TSM_BOOT: > diff --git a/xen/include/xen/time.h b/xen/include/xen/time.h > index 3eb5b63..2703454 100644 > --- a/xen/include/xen/time.h > +++ b/xen/include/xen/time.h > @@ -48,7 +48,7 @@ struct tm { > int tm_isdst; /* daylight saving time */ > }; > struct tm gmtime(unsigned long t); > -struct tm wallclock_time(void); > +struct tm wallclock_time(uint64_t *ns); > > #define SYSTEM_TIME_HZ 1000000000ULL > #define NOW() ((s_time_t)get_s_time())