From 1050e6e0211a8936acb158a8475affa27670becf Mon Sep 17 00:00:00 2001 From: Stephen Dickey Date: Thu, 6 Jan 2022 16:11:49 -0800 Subject: [PATCH] ANDROID: sched: core: hook for get_nohz_timer_target Allow module to control behavior of get_nohz_timer_target. Bug: 205164003 Change-Id: I38cb201ebf06db7bbce0d6cb68dbbe3729355be8 Signed-off-by: Stephen Dickey --- drivers/android/vendor_hooks.c | 1 + include/trace/hooks/sched.h | 4 ++++ kernel/sched/core.c | 5 +++++ 3 files changed, 10 insertions(+) diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index bc8dd375d491..5207b75de9fe 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -196,6 +196,7 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_check_bpf_syscall); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_cpus_allowed_ptr_locked); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_rto_next_cpu); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_is_cpu_allowed); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_get_nohz_timer_target); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_em_dev_register_pd); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_logbuf); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_logbuf_pr_cont); diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index faee3c807d39..5dfecc295340 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -65,6 +65,10 @@ DECLARE_RESTRICTED_HOOK(android_rvh_is_cpu_allowed, TP_PROTO(int cpu, bool *allowed), TP_ARGS(cpu, allowed), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_get_nohz_timer_target, + TP_PROTO(int *cpu, bool *done), + TP_ARGS(cpu, done), 1); + DECLARE_RESTRICTED_HOOK(android_rvh_set_user_nice, TP_PROTO(struct task_struct *p, long *nice, bool *allowed), TP_ARGS(p, nice, allowed), 1); diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 4c367580e628..7a3856ba6018 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -1024,6 +1024,11 @@ int get_nohz_timer_target(void) int i, cpu = smp_processor_id(), default_cpu = -1; struct sched_domain *sd; const struct cpumask *hk_mask; + bool done = false; + + trace_android_rvh_get_nohz_timer_target(&cpu, &done); + if (done) + return cpu; if (housekeeping_cpu(cpu, HK_FLAG_TIMER)) { if (!idle_cpu(cpu))