[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [PATCH v3 4/5] xen/console: Provide timestamps as an offset since boot
This adds a new "Linux style" console timestamp method, which is shorter and more useful than the current date/time timestamps with single-second granularity. Signed-off-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx> CC: Keir Fraser <keir@xxxxxxx> CC: Jan Beulich <JBeulich@xxxxxxxx> CC: Tim Deegan <tim@xxxxxxx> --- docs/misc/xen-command-line.markdown | 15 +++++++-- xen/drivers/char/console.c | 58 +++++++++++++++++++++++++++++------ 2 files changed, 61 insertions(+), 12 deletions(-) diff --git a/docs/misc/xen-command-line.markdown b/docs/misc/xen-command-line.markdown index 15aa404..98c9e5e 100644 --- a/docs/misc/xen-command-line.markdown +++ b/docs/misc/xen-command-line.markdown @@ -275,11 +275,20 @@ cleared. This allows a single port to be shared by two subsystems makes sense on its own. ### console\_timestamps -> `= <boolean>` +> `= none | date | boot` -> Default: `false` +> Default: `boot` + +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]` +* `boot`: Seconds and microseconds since boot + * `[SSSSSS.uuuuuu]` -Flag to indicate whether include a timestamp with each console line. +For compatibility with the older boolean parameter, specifying +`console_timestamps` alone will enable the `date` option. ### console\_to\_ring > `= <boolean>` diff --git a/xen/drivers/char/console.c b/xen/drivers/char/console.c index 7d4383c..60461b9 100644 --- a/xen/drivers/char/console.c +++ b/xen/drivers/char/console.c @@ -49,8 +49,17 @@ static bool_t __read_mostly opt_console_to_ring; boolean_param("console_to_ring", opt_console_to_ring); /* console_timestamps: include a timestamp prefix on every Xen console line. */ -static bool_t __read_mostly opt_console_timestamps; -boolean_param("console_timestamps", opt_console_timestamps); +enum con_timestamp_mode +{ + TSM_NONE, /* No timestamps */ + TSM_DATE, /* [YYYY-MM-DD HH:MM:SS] */ + TSM_BOOT /* [SSSSSS.uuuuuu] */ +}; + +static enum con_timestamp_mode __read_mostly opt_con_timestamp_mode = TSM_BOOT; + +static void parse_console_timestamps(char *s); +custom_param("console_timestamps", parse_console_timestamps); /* conring_size: allows a large console ring than default (16kB). */ static uint32_t __initdata opt_conring_size; @@ -546,23 +555,54 @@ static int printk_prefix_check(char *p, char **pp) ((loglvl < upper_thresh) && printk_ratelimit())); } +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, "boot") ) + opt_con_timestamp_mode = TSM_BOOT; + else if ( !strcmp(s, "none") ) + opt_con_timestamp_mode = TSM_NONE; + else + printk(XENLOG_ERR "Unrecognised timestamp mode '%s'\n", s); +} + static void printk_start_of_line(const char *prefix) { struct tm tm; char tstr[32]; + uint64_t sec, nsec; __putstr(prefix); - if ( !opt_console_timestamps ) - return; + switch ( opt_con_timestamp_mode ) + { + case TSM_DATE: + tm = wallclock_time(); + + if ( tm.tm_mday == 0 ) + return; + + if ( opt_con_timestamp_mode == TSM_DATE ) + 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); + break; + + case TSM_BOOT: + sec = NOW(); + nsec = do_div(sec, 1000000000); - tm = wallclock_time(); - if ( tm.tm_mday == 0 ) + snprintf(tstr, sizeof(tstr), "[%5"PRIu64".%06"PRIu64"] ", + sec, nsec / 1000); + break; + + case TSM_NONE: + default: return; + } - 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); __putstr(tstr); } -- 1.7.10.4 _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx http://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |