diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index 04a04da448f8..c457f49cfa71 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -160,3 +160,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_replace_next_task_fair); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_build_sched_domains); EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_update_topology_flags_workfn); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_balance_rt); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_pick_next_entity); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_wakeup); diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index 76289757e163..43e14c5cd4da 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -248,6 +248,16 @@ DECLARE_RESTRICTED_HOOK(android_rvh_sched_balance_rt, TP_PROTO(struct rq *rq, struct task_struct *p, int *done), TP_ARGS(rq, p, done), 1); +struct cfs_rq; +DECLARE_RESTRICTED_HOOK(android_rvh_pick_next_entity, + TP_PROTO(struct cfs_rq *cfs_rq, struct sched_entity *curr, + struct sched_entity **se), + TP_ARGS(cfs_rq, curr, se), 1); + +DECLARE_RESTRICTED_HOOK(android_rvh_check_preempt_wakeup, + TP_PROTO(struct rq *rq, struct task_struct *p, bool *preempt), + TP_ARGS(rq, p, preempt), 1); + #endif /* _TRACE_HOOK_SCHED_H */ /* This part must be outside protection */ #include diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 4b06f4ef3d7b..c4a4521d2eb5 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4535,7 +4535,11 @@ static struct sched_entity * pick_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *curr) { struct sched_entity *left = __pick_first_entity(cfs_rq); - struct sched_entity *se; + struct sched_entity *se = NULL; + + trace_android_rvh_pick_next_entity(cfs_rq, curr, &se); + if (se) + goto done; /* * If curr is set we have to see if its left of the leftmost entity @@ -4577,6 +4581,7 @@ pick_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *curr) se = cfs_rq->last; } +done: return se; } @@ -7213,6 +7218,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ int next_buddy_marked = 0; int cse_is_idle, pse_is_idle; bool ignore = false; + bool preempt = false; if (unlikely(se == pse)) return; @@ -7259,6 +7265,9 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_ if (unlikely(p->policy != SCHED_NORMAL) || !sched_feat(WAKEUP_PREEMPTION)) return; + trace_android_rvh_check_preempt_wakeup(rq, p, &preempt); + if (preempt) + goto preempt; find_matching_se(&se, &pse); BUG_ON(!pse);