From 34fde61f723b3387e12116390fa38540b18ced2e Mon Sep 17 00:00:00 2001 From: Mukesh Ojha Date: Tue, 13 Apr 2021 09:32:41 +0530 Subject: [PATCH] ANDROID: logbuf: vendor hook for logbuf dump on oops Initial kernel bootup logs get overwritten after running for a long time, and there can be debugging scenario where we need initial ~100s bootup logs for debugging. 'android_vh_initial_logbuf' vendor hook is helping in achieving this purpose. Bug: 185182649 Change-Id: I706824aeb566c09ecaf4b5900973d6cee8a2f35b Signed-off-by: Mukesh Ojha --- drivers/android/vendor_hooks.c | 2 ++ include/trace/hooks/logbuf.h | 26 ++++++++++++++++++++++++++ kernel/printk/printk.c | 3 +++ 3 files changed, 31 insertions(+) create mode 100644 include/trace/hooks/logbuf.h diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index f65cb834abcf..e3dd3745d47e 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -50,6 +50,7 @@ #include #include #include +#include /* * Export tracepoints that act as a bare tracehook (ie: have no trace event @@ -238,3 +239,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_binder_preset); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_post_init_entity_util_avg); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_typec_tcpm_get_timer); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_typec_tcpm_adj_current_limit); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_logbuf); diff --git a/include/trace/hooks/logbuf.h b/include/trace/hooks/logbuf.h new file mode 100644 index 000000000000..a599bf8c2cbf --- /dev/null +++ b/include/trace/hooks/logbuf.h @@ -0,0 +1,26 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM logbuf + +#define TRACE_INCLUDE_PATH trace/hooks + +#if !defined(_TRACE_HOOK_LOGBUF_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_HOOK_LOGBUF_H + +#include +#include + +#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS) +struct printk_ringbuffer; +struct printk_record; + +DECLARE_HOOK(android_vh_logbuf, + TP_PROTO(struct printk_ringbuffer *rb, struct printk_record *r), + TP_ARGS(rb, r)) +#else +#define trace_android_vh_logbuf(rb, r) +#endif + +#endif /* _TRACE_HOOK_LOGBUF_H */ +/* This part must be outside protection */ +#include diff --git a/kernel/printk/printk.c b/kernel/printk/printk.c index b56d7d561e7e..09b63b9aea9c 100644 --- a/kernel/printk/printk.c +++ b/kernel/printk/printk.c @@ -56,6 +56,7 @@ #include #undef CREATE_TRACE_POINTS #include +#include #include "printk_ringbuffer.h" #include "console_cmdline.h" @@ -538,6 +539,8 @@ static int log_store(u32 caller_id, int facility, int level, else prb_final_commit(&e); + trace_android_vh_logbuf(prb, &r); + return (text_len + trunc_msg_len); }