Subject: [PATCH] printk_time: prepare stub for using other than cpu_clock -v2: refresh to v3.10 Signed-off-by: Yinghai Lu --- include/linux/printk.h | 3 +++ init/main.c | 1 + kernel/printk.c | 17 +++++++++++++++-- 3 files changed, 19 insertions(+), 2 deletions(-) Index: linux-2.6/init/main.c =================================================================== --- linux-2.6.orig/init/main.c +++ linux-2.6/init/main.c @@ -601,6 +601,7 @@ asmlinkage void __init start_kernel(void late_time_init(); sched_clock_init(); calibrate_delay(); + set_printk_time_clock(local_clock); pidmap_init(); anon_vma_init(); #ifdef CONFIG_X86 Index: linux-2.6/kernel/printk.c =================================================================== --- linux-2.6.orig/kernel/printk.c +++ linux-2.6/kernel/printk.c @@ -217,6 +217,19 @@ struct log { static DEFINE_RAW_SPINLOCK(logbuf_lock); #ifdef CONFIG_PRINTK + +static u64 default_printk_time_clock(void) +{ + return 0; +} + +static u64 (*printk_time_clock)(void) = default_printk_time_clock; + +void set_printk_time_clock(u64 (*fn)(void)) +{ + printk_time_clock = fn; +} + DECLARE_WAIT_QUEUE_HEAD(log_wait); /* the next printk record to read by syslog(READ) or /proc/kmsg */ static u64 syslog_seq; @@ -354,7 +367,7 @@ static void log_store(int facility, int if (ts_nsec > 0) msg->ts_nsec = ts_nsec; else - msg->ts_nsec = local_clock(); + msg->ts_nsec = printk_time_clock(); memset(log_dict(msg) + dict_len, 0, pad_len); msg->len = sizeof(struct log) + text_len + dict_len + pad_len; @@ -1457,7 +1470,7 @@ static bool cont_add(int facility, int l cont.facility = facility; cont.level = level; cont.owner = current; - cont.ts_nsec = local_clock(); + cont.ts_nsec = printk_time_clock(); cont.flags = 0; cont.cons = 0; cont.flushed = false; Index: linux-2.6/include/linux/printk.h =================================================================== --- linux-2.6.orig/include/linux/printk.h +++ linux-2.6/include/linux/printk.h @@ -107,6 +107,7 @@ void early_printk(const char *s, ...) { #endif #ifdef CONFIG_PRINTK +extern void set_printk_time_clock(u64 (*fn)(void)); asmlinkage __printf(5, 0) int vprintk_emit(int facility, int level, const char *dict, size_t dictlen, @@ -150,6 +151,8 @@ void dump_stack_set_arch_desc(const char void dump_stack_print_info(const char *log_lvl); void show_regs_print_info(const char *log_lvl); #else +static inline void set_printk_time_clock(u64 (*fn)(void)) { } + static inline __printf(1, 0) int vprintk(const char *s, va_list args) {