printk() - restore timestamp printing at console output
[linux-3.10.git] / kernel / printk.c
index 301fb0f..572941d 100644 (file)
@@ -786,6 +786,22 @@ static bool printk_time;
 #endif
 module_param_named(time, printk_time, bool, S_IRUGO | S_IWUSR);
 
+static size_t prepend_timestamp(unsigned long long t, char *buf)
+{
+       unsigned long rem_ns;
+
+       if (!printk_time)
+               return 0;
+
+       if (!buf)
+               return 15;
+
+       rem_ns = do_div(t, 1000000000);
+
+       return sprintf(buf, "[%5lu.%06lu] ",
+                      (unsigned long) t, rem_ns / 1000);
+}
+
 static int syslog_print_line(u32 idx, char *text, size_t size)
 {
        struct log *msg;
@@ -800,9 +816,7 @@ static int syslog_print_line(u32 idx, char *text, size_t size)
                        len++;
                if (msg->level > 99)
                        len++;
-
-               if (printk_time)
-                       len += 15;
+               len += prepend_timestamp(0, NULL);
 
                len += msg->text_len;
                len++;
@@ -810,15 +824,7 @@ static int syslog_print_line(u32 idx, char *text, size_t size)
        }
 
        len = sprintf(text, "<%u>", msg->level);
-
-       if (printk_time) {
-               unsigned long long t = msg->ts_nsec;
-               unsigned long rem_ns = do_div(t, 1000000000);
-
-               len += sprintf(text + len, "[%5lu.%06lu] ",
-                                  (unsigned long) t, rem_ns / 1000);
-       }
-
+       len += prepend_timestamp(msg->ts_nsec, text + len);
        if (len + msg->text_len > size)
                return -EINVAL;
        memcpy(text + len, log_text(msg), msg->text_len);
@@ -1741,7 +1747,7 @@ again:
        for (;;) {
                struct log *msg;
                static char text[LOG_LINE_MAX];
-               size_t len;
+               size_t len, l;
                int level;
 
                raw_spin_lock_irqsave(&logbuf_lock, flags);
@@ -1761,10 +1767,13 @@ again:
 
                msg = log_from_idx(console_idx);
                level = msg->level & 7;
-               len = msg->text_len;
-               if (len+1 >= sizeof(text))
-                       len = sizeof(text)-1;
-               memcpy(text, log_text(msg), len);
+
+               len = prepend_timestamp(msg->ts_nsec, text);
+               l = msg->text_len;
+               if (len + l + 1 >= sizeof(text))
+                       l = sizeof(text) - len - 1;
+               memcpy(text + len, log_text(msg), l);
+               len += l;
                text[len++] = '\n';
 
                console_idx = log_next(console_idx);