From 2fca5c5325c46457b2f6f50e8b3e6ede1a437f34 Mon Sep 17 00:00:00 2001 From: zhaoxp3 Date: Thu, 15 Nov 2018 14:40:57 +0800 Subject: [PATCH] printk: add cpu info into kernel log Append cpu# to timestamp of per line kernel message. Change-Id: Ied651179309068de6c50f0646b441698565ac338 Signed-off-by: zhaoxp3 Reviewed-on: https://gerrit.mot.com/1269615 SME-Granted: SME Approvals Granted SLTApproved: Slta Waiver Tested-by: Jira Key Submit-Approved: Jira Key --- kernel/printk/printk.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index aee7e32b8be3..b50f5b77c4eb 100755 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -361,10 +361,10 @@ struct printk_log { u8 facility; /* syslog facility */ u8 flags:5; /* internal record flags */ u8 level:3; /* syslog level */ + u8 cpu; /* cpu id */ #ifdef CONFIG_PRINTK_PROCESS char process[16]; /* process name */ pid_t pid; /* process id */ - u8 cpu; /* cpu id */ u8 in_interrupt; /* interrupt context */ #endif } @@ -575,11 +575,10 @@ static size_t print_process(const struct printk_log *msg, char *buf) return 0; if (!buf) - return snprintf(NULL, 0, "%c[%1d:%15s:%5d] ", ' ', 0, " ", 0); + return snprintf(NULL, 0, "%c[%15s:%5d] ", ' ', " ", 0); - return sprintf(buf, "%c[%1d:%15s:%5d] ", + return sprintf(buf, "%c[%15s:%5d] ", msg->in_interrupt ? 'I' : ' ', - msg->cpu, msg->process, msg->pid); } @@ -736,12 +735,12 @@ static int log_store(int facility, int level, memset(log_dict(msg) + dict_len, 0, pad_len); msg->len = size; + msg->cpu = smp_processor_id(); #ifdef CONFIG_PRINTK_PROCESS if (printk_process) { strncpy(msg->process, current->comm, sizeof(msg->process) - 1); msg->process[sizeof(msg->process) - 1] = '\0'; msg->pid = task_pid_nr(current); - msg->cpu = smp_processor_id(); msg->in_interrupt = in_interrupt() ? 1 : 0; } #endif @@ -1338,7 +1337,7 @@ static inline void boot_delay_msec(int level) static bool printk_time = IS_ENABLED(CONFIG_PRINTK_TIME); module_param_named(time, printk_time, bool, S_IRUGO | S_IWUSR); -static size_t print_time(u64 ts, char *buf) +static size_t print_time(u64 ts, char *buf, u8 cpu) { unsigned long rem_nsec; @@ -1348,10 +1347,10 @@ static size_t print_time(u64 ts, char *buf) rem_nsec = do_div(ts, 1000000000); if (!buf) - return snprintf(NULL, 0, "[%5lu.000000] ", (unsigned long)ts); + return snprintf(NULL, 0, "[%5lu.000000,%u] ", (unsigned long)ts, cpu); - return sprintf(buf, "[%5lu.%06lu] ", - (unsigned long)ts, rem_nsec / 1000); + return sprintf(buf, "[%5lu.%06lu,%u] ", + (unsigned long)ts, rem_nsec / 1000,cpu); } static size_t print_prefix(const struct printk_log *msg, bool syslog, char *buf) @@ -1373,7 +1372,8 @@ static size_t print_prefix(const struct printk_log *msg, bool syslog, char *buf) } } - len += print_time(msg->ts_nsec, buf ? buf + len : NULL); + len += print_time(msg->ts_nsec, buf ? buf + len : NULL, + msg->cpu); #ifndef CONFIG_PRINTK_UTC_TIME len += print_process(msg, buf ? buf + len : NULL); #endif -- 2.20.1