312x
[firefly-linux-kernel-4.4.55.git] / kernel / printk.c
index a6b2f1fc21c10f37ca9b0e8675cf4d3b71814002..cbf71b406e33627b7e5c9e5941caf0b97f7bef1d 100644 (file)
@@ -306,6 +306,12 @@ static u32 log_next(u32 idx)
        return idx + msg->len;
 }
 
+#ifdef CONFIG_RK_LAST_LOG
+extern void rk_last_log_text(char *text, size_t size);
+static char rk_text[1024];
+static size_t msg_print_text(const struct log *msg, enum log_flags prev,
+                            bool syslog, char *buf, size_t size);
+#endif
 /* insert record into the buffer, discard old ones, update heads */
 static void log_store(int facility, int level,
                      enum log_flags flags, u64 ts_nsec,
@@ -362,6 +368,10 @@ static void log_store(int facility, int level,
        memset(log_dict(msg) + dict_len, 0, pad_len);
        msg->len = sizeof(struct log) + text_len + dict_len + pad_len;
 
+#ifdef CONFIG_RK_LAST_LOG
+       size = msg_print_text(msg, msg->flags, true, rk_text, sizeof(rk_text));
+       rk_last_log_text(rk_text, size);
+#endif
        /* insert message */
        log_next_idx += msg->len;
        log_next_seq++;
@@ -1707,21 +1717,12 @@ asmlinkage int printk(const char *fmt, ...)
 }
 EXPORT_SYMBOL(printk);
 
-#ifdef CONFIG_RK_LAST_LOG
-void __init switch_log_buf(char *new_log_buf, unsigned size)
+#if defined(CONFIG_RK_DEBUG_UART) && (CONFIG_RK_DEBUG_UART >= 0)
+void console_disable_suspend(void)
 {
-       unsigned long flags;
-
-       if (!new_log_buf || log_buf_len > size)
-               return;
-
-       raw_spin_lock_irqsave(&logbuf_lock, flags);
-       memcpy(new_log_buf, log_buf, min(log_buf_len, size));
-       log_buf = new_log_buf;
-       log_buf_len = size;
-       raw_spin_unlock_irqrestore(&logbuf_lock, flags);
+       console_suspended = 0;
 }
-#endif /* CONFIG_RK_LAST_LOG */
+#endif
 #else /* CONFIG_PRINTK */
 
 #define LOG_LINE_MAX           0