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);