From 8979a0b16a61d388652db36015e0ecdc600f8de9 Mon Sep 17 00:00:00 2001 From: lijianzhong Date: Wed, 24 Mar 2021 15:44:55 +0800 Subject: [PATCH] ANDROID: sched: Add vendor hooks for cpu affinity. Add vendor hooks for CPU affinity to support OEM's tuning policy, where we can block or unblock a certain type of application's CPU affinity. Bug: 183674818 Signed-off-by: lijianzhong Change-Id: I3402abec4d9faa08f564409bfb8db8d7902f3aa2 (cherry picked from commit 7cf9646c245fdc63e2a3c9fad457c11fabdd2dfc) --- include/trace/hooks/sched.h | 8 ++++++++ kernel/sched/core.c | 7 ++++++- kernel/sched/vendor_hooks.c | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index b2461e4a5d7e..5b393f5a4807 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -339,6 +339,14 @@ DECLARE_HOOK(android_vh_map_util_freq, bool *need_freq_update), TP_ARGS(util, freq, cap, next_freq, policy, need_freq_update)); +DECLARE_RESTRICTED_HOOK(android_rvh_set_cpus_allowed_comm, + TP_PROTO(struct task_struct *p, const struct cpumask *new_mask), + TP_ARGS(p, new_mask), 1); + +DECLARE_HOOK(android_vh_sched_setaffinity_early, + TP_PROTO(struct task_struct *p, const struct cpumask *new_mask, bool *retval), + TP_ARGS(p, new_mask, retval)); + /* macro versions of hooks are no longer required */ #endif /* _TRACE_HOOK_SCHED_H */ diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 3aa814086acc..6e4557b20b17 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2595,6 +2595,7 @@ void set_cpus_allowed_common(struct task_struct *p, const struct cpumask *new_ma cpumask_copy(&p->cpus_mask, new_mask); p->nr_cpus_allowed = cpumask_weight(new_mask); + trace_android_rvh_set_cpus_allowed_comm(p, new_mask); } static void @@ -8284,7 +8285,8 @@ out_free_cpus_allowed: long sched_setaffinity(pid_t pid, const struct cpumask *in_mask) { struct task_struct *p; - int retval; + int retval = 0; + bool skip = false; rcu_read_lock(); @@ -8313,6 +8315,9 @@ long sched_setaffinity(pid_t pid, const struct cpumask *in_mask) rcu_read_unlock(); } + trace_android_vh_sched_setaffinity_early(p, in_mask, &skip); + if (skip) + goto out_put_task; retval = security_task_setscheduler(p); if (retval) goto out_put_task; diff --git a/kernel/sched/vendor_hooks.c b/kernel/sched/vendor_hooks.c index 98c99358223e..8f8249ad1380 100644 --- a/kernel/sched/vendor_hooks.c +++ b/kernel/sched/vendor_hooks.c @@ -87,3 +87,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_new_ilb); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_energy_efficient_cpu); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_pelt_multiplier); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_map_util_freq); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_cpus_allowed_comm); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_setaffinity_early);