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
parent cc048ffd7e
commit a56f081c5b
3 changed files with 22 additions and 1 deletions

View File

@@ -152,3 +152,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_sea);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_mem_abort);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_do_sp_pc_abort);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_iommu_setup_dma_ops);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_pick_next_entity);
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_check_preempt_wakeup);

View File

@@ -242,6 +242,16 @@ DECLARE_RESTRICTED_HOOK(android_rvh_dequeue_task_idle,
TP_PROTO(struct task_struct *p),
TP_ARGS(p), 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);
/* macro versions of hooks are no longer required */
#endif /* _TRACE_HOOK_SCHED_H */

View File

@@ -4443,7 +4443,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
@@ -4485,6 +4489,7 @@ pick_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *curr)
se = cfs_rq->last;
}
done:
clear_buddies(cfs_rq, se);
return se;
@@ -6993,6 +6998,7 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_
struct cfs_rq *cfs_rq = task_cfs_rq(curr);
int scale = cfs_rq->nr_running >= sched_nr_latency;
int next_buddy_marked = 0;
bool preempt = false;
if (unlikely(se == pse))
return;
@@ -7036,6 +7042,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);
update_curr(cfs_rq_of(se));
BUG_ON(!pse);