diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index faf0d91160db..f0d0f15c535a 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -387,6 +387,15 @@ DECLARE_RESTRICTED_HOOK(android_rvh_remove_entity_load_avg, TP_PROTO(struct cfs_rq *cfs_rq, struct sched_entity *se), TP_ARGS(cfs_rq, se), 1); +DECLARE_RESTRICTED_HOOK(android_rvh_before_pick_task_fair, + TP_PROTO(struct rq *rq, struct task_struct **p, + struct task_struct *prev, struct rq_flags *rf), + TP_ARGS(rq, p, prev, rf), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_balance_fair, + TP_PROTO(struct rq *rq, struct task_struct *prev, struct rq_flags *rf), + TP_ARGS(rq, prev, rf), 1); + 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), diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 1d091b3e200c..03f211423017 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -8961,6 +8961,7 @@ static void set_cpus_allowed_fair(struct task_struct *p, struct affinity_context static int balance_fair(struct rq *rq, struct task_struct *prev, struct rq_flags *rf) { + trace_android_rvh_balance_fair(rq, prev, rf); if (sched_fair_runnable(rq)) return 1; @@ -9120,12 +9121,15 @@ struct task_struct * pick_next_task_fair(struct rq *rq, struct task_struct *prev, struct rq_flags *rf) { struct sched_entity *se; - struct task_struct *p; + struct task_struct *p = NULL; int new_tasks; again: - p = pick_task_fair(rq); - trace_android_rvh_replace_next_task_fair(rq, &p, prev); + trace_android_rvh_before_pick_task_fair(rq, &p, prev, rf); + if (!p) { + p = pick_task_fair(rq); + trace_android_rvh_replace_next_task_fair(rq, &p, prev); + } if (!p) goto idle; diff --git a/kernel/sched/vendor_hooks.c b/kernel/sched/vendor_hooks.c index 7a14bff67655..cb1d6f57cf85 100644 --- a/kernel/sched/vendor_hooks.c +++ b/kernel/sched/vendor_hooks.c @@ -134,5 +134,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_sugov_sched_attr); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_iowait); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_uclamp_validate); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_util_fits_cpu); - - +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_before_pick_task_fair); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_balance_fair);