From b42eddeb28c063365c03d726ee5af4faea825a39 Mon Sep 17 00:00:00 2001 From: Sangmoon Kim Date: Mon, 26 Dec 2022 20:53:40 +0900 Subject: [PATCH] Revert "Revert "ANDROID: workqueue: add vendor hook for wq lockup information"" This reverts commit 7a6ea55aa01ad68460ef10b47abedef555b0a4a1. This hook was removed because there is no user. But the new project needs this hook. Bug: 263703180 Change-Id: I14e286fd6d426d4ffdb4cb440477f0fae65e980e Signed-off-by: Sangmoon Kim --- drivers/android/vendor_hooks.c | 2 ++ include/trace/hooks/wqlockup.h | 21 +++++++++++++++++++++ kernel/workqueue.c | 2 ++ 3 files changed, 25 insertions(+) create mode 100644 include/trace/hooks/wqlockup.h diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index ecad931b264c..eae2a7539bd4 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -41,6 +41,7 @@ #include #include #include +#include #include #include #include @@ -148,6 +149,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cpu_idle_exit); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mpam_set); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_busiest_group); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_gic_resume); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_wq_lockup_pool); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_ipi_stop); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sysrq_crash); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dump_throttled_rt_tasks); diff --git a/include/trace/hooks/wqlockup.h b/include/trace/hooks/wqlockup.h new file mode 100644 index 000000000000..2572ebf5eff4 --- /dev/null +++ b/include/trace/hooks/wqlockup.h @@ -0,0 +1,21 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM wqlockup +#define TRACE_INCLUDE_PATH trace/hooks + +#if !defined(_TRACE_HOOK_WQLOCKUP_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_HOOK_WQLOCKUP_H +#include +/* + * Following tracepoints are not exported in tracefs and provide a + * mechanism for vendor modules to hook and extend functionality + */ +DECLARE_HOOK(android_vh_wq_lockup_pool, + TP_PROTO(int cpu, unsigned long pool_ts), + TP_ARGS(cpu, pool_ts)); + +/* macro versions of hooks are no longer required */ + +#endif /* _TRACE_HOOK_WQLOCKUP_H */ +/* This part must be outside protection */ +#include diff --git a/kernel/workqueue.c b/kernel/workqueue.c index e4fdc09b688e..c1fc53c42194 100644 --- a/kernel/workqueue.c +++ b/kernel/workqueue.c @@ -54,6 +54,7 @@ #include "workqueue_internal.h" +#include #include /* events/workqueue.h uses default TRACE_INCLUDE_PATH */ #undef TRACE_INCLUDE_PATH @@ -5842,6 +5843,7 @@ static void wq_watchdog_timer_fn(struct timer_list *unused) pr_cont_pool_info(pool); pr_cont(" stuck for %us!\n", jiffies_to_msecs(now - pool_ts) / 1000); + trace_android_vh_wq_lockup_pool(pool->cpu, pool_ts); } }