aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArve Hjønnevåg <arve@android.com>2012-11-26 20:05:37 -0800
committerArve Hjønnevåg <arve@android.com>2013-04-29 14:52:25 -0700
commit47852dee11ad45c297ff92e74beebff354f15ec7 (patch)
tree41ab720546e2e2e89af9e6ccbe54093d14469e90
parentb3fa85c55e848c8b6f96d4a8c7cc49ad138790ca (diff)
downloadvexpress-lsk-47852dee11ad45c297ff92e74beebff354f15ec7.tar.gz
ARM: fiq_debugger: Use kmsg_dumper to dump kernel logs
Signed-off-by: Arve Hjønnevåg <arve@android.com>
-rw-r--r--arch/arm/common/fiq_debugger.c40
1 files changed, 10 insertions, 30 deletions
diff --git a/arch/arm/common/fiq_debugger.c b/arch/arm/common/fiq_debugger.c
index 5e9005bfdbb..eabd94b98f4 100644
--- a/arch/arm/common/fiq_debugger.c
+++ b/arch/arm/common/fiq_debugger.c
@@ -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