ARM: fiq_debugger: Use kmsg_dumper to dump kernel logs
authorArve Hjønnevåg <arve@android.com>
Tue, 27 Nov 2012 04:05:37 +0000 (20:05 -0800)
committerJohn Stultz <john.stultz@linaro.org>
Tue, 16 Feb 2016 21:52:24 +0000 (13:52 -0800)
Signed-off-by: Arve Hjønnevåg <arve@android.com>
arch/arm/common/fiq_debugger.c

index 5e9005bfdbb9c5cfb8bf645a403a374ee392e673..eabd94b98f4ba4ed59f71f90c5b470291dc2bcef 100644 (file)
@@ -23,6 +23,7 @@
 #include <linux/clk.h>
 #include <linux/platform_device.h>
 #include <linux/kernel_stat.h>
+#include <linux/kmsg_dump.h>
 #include <linux/irq.h>
 #include <linux/delay.h>
 #include <linux/reboot.h>
@@ -207,29 +208,19 @@ static void debug_prompt(struct fiq_debugger_state *state)
        debug_puts(state, "debug> ");
 }
 
-int log_buf_copy(char *dest, int idx, int len);
 static void dump_kernel_log(struct fiq_debugger_state *state)
 {
-       char buf[1024];
-       int idx = 0;
-       int ret;
-       int saved_oip;
+       char buf[512];
+       size_t len;
+       struct kmsg_dumper dumper = { .active = true };
 
-       /* setting oops_in_progress prevents log_buf_copy()
-        * from trying to take a spinlock which will make it
-        * very unhappy in some cases...
-        */
-       saved_oip = oops_in_progress;
-       oops_in_progress = 1;
-       for (;;) {
-               ret = log_buf_copy(buf, idx, 1023);
-               if (ret <= 0)
-                       break;
-               buf[ret] = 0;
+
+       kmsg_dump_rewind_nolock(&dumper);
+       while (kmsg_dump_get_line_nolock(&dumper, true, buf,
+                                        sizeof(buf) - 1, &len)) {
+               buf[len] = 0;
                debug_puts(state, buf);
-               idx += ret;
        }
-       oops_in_progress = saved_oip;
 }
 
 static char *mode_name(unsigned cpsr)
@@ -523,18 +514,7 @@ static void begin_syslog_dump(struct fiq_debugger_state *state)
 
 static void end_syslog_dump(struct fiq_debugger_state *state)
 {
-       char buf[128];
-       int ret;
-       int idx = 0;
-
-       while (1) {
-               ret = log_buf_copy(buf, idx, sizeof(buf) - 1);
-               if (ret <= 0)
-                       break;
-               buf[ret] = 0;
-               debug_printf(state, "%s", buf);
-               idx += ret;
-       }
+       dump_kernel_log(state);
 }
 #endif