Add sleep time into timestamp to reflect the actual time since sched_clock will be stopped during suspend.
Thanks John Stultz for suggestion to use monotonic_to_bootbased. Signed-off-by: Neil Zhang <zhan...@marvell.com> --- kernel/printk/printk.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index 4dae9cb..121f792 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -250,6 +250,18 @@ static char __log_buf[__LOG_BUF_LEN] __aligned(LOG_ALIGN); static char *log_buf = __log_buf; static u32 log_buf_len = __LOG_BUF_LEN; +static u64 print_clock(void) +{ + struct timespec ts; + u64 ts_nsec = local_clock(); + + ts = ns_to_timespec(ts_nsec); + monotonic_to_bootbased(&ts); + ts_nsec = timespec_to_ns(&ts); + + return ts_nsec; +} + /* cpu currently holding logbuf_lock */ static volatile unsigned int logbuf_cpu = UINT_MAX; @@ -349,7 +361,7 @@ static void log_store(int facility, int level, if (ts_nsec > 0) msg->ts_nsec = ts_nsec; else - msg->ts_nsec = local_clock(); + msg->ts_nsec = print_clock(); memset(log_dict(msg) + dict_len, 0, pad_len); msg->len = sizeof(struct printk_log) + text_len + dict_len + pad_len; @@ -1440,7 +1452,7 @@ static bool cont_add(int facility, int level, const char *text, size_t len) cont.facility = facility; cont.level = level; cont.owner = current; - cont.ts_nsec = local_clock(); + cont.ts_nsec = print_clock(); cont.flags = 0; cont.cons = 0; cont.flushed = false; -- 1.7.9.5 -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/