ANDROID: sched: Add restricted vendor hooks in CFS scheduler

Add restricted vendor hooks in CFS scheduler class to allow
customizations in vendor modules.

Bug: 180668820
Change-Id: I69bd90e11220d7607b075a3aa687059deaa60439
Signed-off-by: Pavankumar Kondeti <quic_pkondeti@quicinc.com>
This commit is contained in:
Pavankumar Kondeti
2021-02-19 12:18:11 +05:30
committed by Shaleen Agrawal
parent 1085eff98a
commit 771633a2e9
3 changed files with 22 additions and 1 deletions

View File

@@ -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);

View File

@@ -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 <trace/define_trace.h>

View File

@@ -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);