From 55ff3b05bf34f809e21b27ca9d156ac6f7c4b745 Mon Sep 17 00:00:00 2001 From: Changki Kim Date: Sun, 23 Aug 2020 14:36:48 +0900 Subject: [PATCH] ANDROID: vendor_hooks: Add new android vendor hooks for ipi stop When a kernel panic occurred, it is sometimes caused by a other cpu than the panic cpu. When a panic cpu sends smp stop IPI, it can help to solve the problem even more if aonther cpu stores registers and run cache flush. Bug: 165956922 Change-Id: I21c74fe0d047e49b676c502bc9b8d8830e5431de Signed-off-by: Changki Kim --- arch/arm64/kernel/smp.c | 3 +++ drivers/android/vendor_hooks.c | 2 ++ include/trace/hooks/debug.h | 24 ++++++++++++++++++++++++ 3 files changed, 29 insertions(+) create mode 100644 include/trace/hooks/debug.h diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c index 038ce6263d1c..d928271934e9 100644 --- a/arch/arm64/kernel/smp.c +++ b/arch/arm64/kernel/smp.c @@ -53,6 +53,8 @@ #define CREATE_TRACE_POINTS #include +#undef CREATE_TRACE_POINTS +#include DEFINE_PER_CPU_READ_MOSTLY(int, cpu_number); EXPORT_PER_CPU_SYMBOL(cpu_number); @@ -899,6 +901,7 @@ void handle_IPI(int ipinr, struct pt_regs *regs) break; case IPI_CPU_STOP: + trace_android_vh_ipi_stop(regs); irq_enter(); local_cpu_stop(); irq_exit(); diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index efaee731f592..7b4b1abbb537 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -16,6 +16,7 @@ #include #include #include +#include /* * Export tracepoints that act as a bare tracehook (ie: have no trace event @@ -53,3 +54,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_write_finished); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_rwsem_list_add); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_alter_futex_plist_add); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_is_fpsimd_save); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ipi_stop); diff --git a/include/trace/hooks/debug.h b/include/trace/hooks/debug.h new file mode 100644 index 000000000000..d3e310ec4b2d --- /dev/null +++ b/include/trace/hooks/debug.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM debug + +#define TRACE_INCLUDE_PATH trace/hooks + +#if !defined(_TRACE_HOOK_DEBUG_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_HOOK_DEBUG_H + +#include +#include + +#if defined(CONFIG_TRACEPOINTS) && defined(CONFIG_ANDROID_VENDOR_HOOKS) + +DECLARE_HOOK(android_vh_ipi_stop, + TP_PROTO(struct pt_regs *regs), + TP_ARGS(regs)) +#else +#define trace_android_vh_ipi_stop(regs) +#endif + +#endif /* _TRACE_HOOK_DEBUG_H */ +/* This part must be outside protection */ +#include