From 093b79759e57798ccd9b529b4912603ad7d87b2e Mon Sep 17 00:00:00 2001 From: "ryan.xiao" Date: Fri, 24 May 2024 18:09:26 +0800 Subject: [PATCH] ANDROID: sched: add vendor hook to modify affinity We add vendor hook at __set_cpus_allowed_ptr for modifying the affinity mask Bug: 381776407 Change-Id: I5ed4aee3ec12e0d097fd92118ae4bb1325a77533 Signed-off-by: ryan.xiao --- include/trace/hooks/sched.h | 6 ++++++ kernel/sched/core.c | 4 +++- kernel/sched/vendor_hooks.c | 1 + 3 files changed, 10 insertions(+), 1 deletion(-) diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index 2e69327436dc..8e45f71f98ef 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -339,6 +339,12 @@ struct sched_dl_entity; DECLARE_HOOK(android_vh_dump_dl_server, TP_PROTO(struct sched_dl_entity *dl_se, struct task_struct *p), TP_ARGS(dl_se, p)); + +struct affinity_context; +DECLARE_RESTRICTED_HOOK(android_rvh_set_cpus_allowed_ptr, + TP_PROTO(struct task_struct *p, struct affinity_context *ctx, bool *skip_user_ptr), + TP_ARGS(p, ctx, skip_user_ptr), 1); + /* 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 cc69f9f15750..e540e1a031cf 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -3203,13 +3203,15 @@ int __set_cpus_allowed_ptr(struct task_struct *p, struct affinity_context *ctx) { struct rq_flags rf; struct rq *rq; + bool skip_user_ptr = false; + trace_android_rvh_set_cpus_allowed_ptr(p, ctx, &skip_user_ptr); rq = task_rq_lock(p, &rf); /* * Masking should be skipped if SCA_USER or any of the SCA_MIGRATE_* * flags are set. */ - if (p->user_cpus_ptr && + if (!skip_user_ptr && p->user_cpus_ptr && !(ctx->flags & (SCA_USER | SCA_MIGRATE_ENABLE | SCA_MIGRATE_DISABLE)) && cpumask_and(rq->scratch_mask, ctx->new_mask, p->user_cpus_ptr)) ctx->new_mask = rq->scratch_mask; diff --git a/kernel/sched/vendor_hooks.c b/kernel/sched/vendor_hooks.c index 2131bd9952f6..f9847a639504 100644 --- a/kernel/sched/vendor_hooks.c +++ b/kernel/sched/vendor_hooks.c @@ -89,3 +89,4 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_load_avg_se); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_load_avg_cfs_rq); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_update_rt_rq_load_avg_internal); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_dump_dl_server); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_cpus_allowed_ptr);