From 555f3fe5635fdbd2cf2619a3431acc4befa98c00 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 Bug: 283222331 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 6b72bf0a35c3..eade309c193f 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -436,6 +436,14 @@ DECLARE_RESTRICTED_HOOK(android_rvh_update_rt_rq_load_avg, TP_PROTO(u64 now, struct rq *rq, struct task_struct *tsk, int running), TP_ARGS(now, rq, tsk, running), 1); +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 2be8d71c07da..c32a1fb373d0 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -2524,6 +2524,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 @@ -8205,7 +8206,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(); @@ -8234,6 +8236,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 450c71c78c8f..b5e529e0bc70 100644 --- a/kernel/sched/vendor_hooks.c +++ b/kernel/sched/vendor_hooks.c @@ -107,3 +107,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_remove_entity_load_avg); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_blocked_fair); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_rt_rq_load_avg); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_cpus_allowed_by_task); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_cpus_allowed_comm); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_setaffinity_early);