From 8f3f46d77c8133ccce52e055a8b4b577699acc5f Mon Sep 17 00:00:00 2001 From: Liujie Xie Date: Tue, 6 Apr 2021 11:27:34 +0800 Subject: [PATCH] ANDROID: vendor_hooks: Add hooks to recognize special worker thread. Recognize special worker thread. Bug: 184571803 Signed-off-by: Liujie Xie Change-Id: I2ad112627eb18b98d0868bac6bd00bbfd84b34c4 --- drivers/android/vendor_hooks.c | 2 ++ include/trace/hooks/workqueue.h | 22 ++++++++++++++++++++++ kernel/workqueue.c | 2 ++ 3 files changed, 26 insertions(+) create mode 100644 include/trace/hooks/workqueue.h diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 3eff2ce672b0..de71b90eff5f 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -40,6 +40,7 @@ #include #include #include +#include #include #include #include @@ -183,6 +184,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_uclamp_eff_get); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpufreq_transition); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_cgroup_set_task); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_syscall_prctl_finished); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_create_worker); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_tick); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_wakeup_ignore); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_replace_next_task_fair); diff --git a/include/trace/hooks/workqueue.h b/include/trace/hooks/workqueue.h new file mode 100644 index 000000000000..0ffe56433a4c --- /dev/null +++ b/include/trace/hooks/workqueue.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM workqueue +#define TRACE_INCLUDE_PATH trace/hooks + +#if !defined(_TRACE_HOOK_WORKQUEUE_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_HOOK_WORKQUEUE_H +#include +#include +/* + * Following tracepoints are not exported in tracefs and provide a + * mechanism for vendor modules to hook and extend functionality + */ +struct worker; +DECLARE_HOOK(android_vh_create_worker, + TP_PROTO(struct worker *worker, struct workqueue_attrs *attrs), + TP_ARGS(worker, attrs)); +/* macro versions of hooks are no longer required */ + +#endif /* _TRACE_HOOK_WORKQUEUE_H */ +/* This part must be outside protection */ +#include diff --git a/kernel/workqueue.c b/kernel/workqueue.c index bb49ecab9d69..529250e4f506 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 @@ -1948,6 +1949,7 @@ static struct worker *create_worker(struct worker_pool *pool) if (IS_ERR(worker->task)) goto fail; + trace_android_vh_create_worker(worker, pool->attrs); set_user_nice(worker->task, pool->attrs->nice); kthread_bind_mask(worker->task, pool->attrs->cpumask);