ANDROID: sched: Add vendor hooks for sched.
Add vendor hooks in sched to support oem's feature. Bug: 183674818 Signed-off-by: lijianzhong <lijianzhong@xiaomi.com> Change-Id: I8415958749948b3702e411f835c227ad4f8d8e92
This commit is contained in:
@@ -249,3 +249,11 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_psi_group);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_cpuset_fork);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_cpus_allowed_comm);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_sched_setaffinity_early);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_free_task);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_after_enqueue_task);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_after_dequeue_task);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_enqueue_entity);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dequeue_entity);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_entity_tick);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_enqueue_task_fair);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_dequeue_task_fair);
|
||||
|
@@ -254,8 +254,11 @@ DECLARE_RESTRICTED_HOOK(android_rvh_pick_next_entity,
|
||||
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, bool *nopreempt),
|
||||
TP_ARGS(rq, p, preempt, nopreempt), 1);
|
||||
TP_PROTO(struct rq *rq, struct task_struct *p, bool *preempt, bool *nopreempt,
|
||||
int wake_flags, struct sched_entity *se, struct sched_entity *pse,
|
||||
int next_buddy_marked, unsigned int granularity),
|
||||
TP_ARGS(rq, p, preempt, nopreempt, wake_flags, se, pse, next_buddy_marked,
|
||||
granularity), 1);
|
||||
|
||||
DECLARE_HOOK(android_vh_do_wake_up_sync,
|
||||
TP_PROTO(struct wait_queue_head *wq_head, int *done),
|
||||
@@ -276,14 +279,17 @@ DECLARE_HOOK(android_vh_build_sched_domains,
|
||||
TP_PROTO(bool has_asym),
|
||||
TP_ARGS(has_asym));
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_check_preempt_tick,
|
||||
TP_PROTO(struct task_struct *p, unsigned long *ideal_runtime, bool *skip_preempt),
|
||||
TP_ARGS(p, ideal_runtime, skip_preempt), 1);
|
||||
TP_PROTO(struct task_struct *p, unsigned long *ideal_runtime, bool *skip_preempt,
|
||||
unsigned long delta_exec, struct cfs_rq *cfs_rq, struct sched_entity *curr,
|
||||
unsigned int granularity),
|
||||
TP_ARGS(p, ideal_runtime, skip_preempt, delta_exec, cfs_rq, curr, granularity), 1);
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_check_preempt_wakeup_ignore,
|
||||
TP_PROTO(struct task_struct *p, bool *ignore),
|
||||
TP_ARGS(p, ignore), 1);
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_replace_next_task_fair,
|
||||
TP_PROTO(struct rq *rq, struct task_struct **p, struct sched_entity **se, bool *repick, bool simple),
|
||||
TP_ARGS(rq, p, se, repick, simple), 1);
|
||||
TP_PROTO(struct rq *rq, struct task_struct **p, struct sched_entity **se, bool *repick,
|
||||
bool simple, struct task_struct *prev),
|
||||
TP_ARGS(rq, p, se, repick, simple, prev), 1);
|
||||
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_util_est_update,
|
||||
TP_PROTO(struct cfs_rq *cfs_rq, struct task_struct *p, bool task_sleep, int *ret),
|
||||
@@ -304,6 +310,42 @@ DECLARE_RESTRICTED_HOOK(android_rvh_set_cpus_allowed_comm,
|
||||
DECLARE_HOOK(android_vh_sched_setaffinity_early,
|
||||
TP_PROTO(struct task_struct *p, const struct cpumask *new_mask, int *retval),
|
||||
TP_ARGS(p, new_mask, retval));
|
||||
|
||||
DECLARE_HOOK(android_vh_free_task,
|
||||
TP_PROTO(struct task_struct *p),
|
||||
TP_ARGS(p));
|
||||
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_after_enqueue_task,
|
||||
TP_PROTO(struct rq *rq, struct task_struct *p),
|
||||
TP_ARGS(rq, p), 1);
|
||||
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_after_dequeue_task,
|
||||
TP_PROTO(struct rq *rq, struct task_struct *p),
|
||||
TP_ARGS(rq, p), 1);
|
||||
|
||||
struct cfs_rq;
|
||||
struct sched_entity;
|
||||
struct rq_flags;
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_enqueue_entity,
|
||||
TP_PROTO(struct cfs_rq *cfs, struct sched_entity *se),
|
||||
TP_ARGS(cfs, se), 1);
|
||||
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_dequeue_entity,
|
||||
TP_PROTO(struct cfs_rq *cfs, struct sched_entity *se),
|
||||
TP_ARGS(cfs, se), 1);
|
||||
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_entity_tick,
|
||||
TP_PROTO(struct cfs_rq *cfs_rq, struct sched_entity *se),
|
||||
TP_ARGS(cfs_rq, se), 1);
|
||||
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_enqueue_task_fair,
|
||||
TP_PROTO(struct rq *rq, struct task_struct *p, int flags),
|
||||
TP_ARGS(rq, p, flags), 1);
|
||||
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_dequeue_task_fair,
|
||||
TP_PROTO(struct rq *rq, struct task_struct *p, int flags),
|
||||
TP_ARGS(rq, p, flags), 1);
|
||||
|
||||
/* macro versions of hooks are no longer required */
|
||||
|
||||
#endif /* _TRACE_HOOK_SCHED_H */
|
||||
|
@@ -109,6 +109,8 @@
|
||||
#define CREATE_TRACE_POINTS
|
||||
#include <trace/events/task.h>
|
||||
|
||||
#undef CREATE_TRACE_POINTS
|
||||
#include <trace/hooks/sched.h>
|
||||
/*
|
||||
* Minimum number of threads to boot the kernel
|
||||
*/
|
||||
@@ -446,6 +448,7 @@ void free_task(struct task_struct *tsk)
|
||||
cpufreq_task_times_exit(tsk);
|
||||
scs_release(tsk);
|
||||
|
||||
trace_android_vh_free_task(tsk);
|
||||
#ifndef CONFIG_THREAD_INFO_IN_TASK
|
||||
/*
|
||||
* The task is finally done with both the stack and thread_info,
|
||||
|
@@ -1607,6 +1607,7 @@ static inline void enqueue_task(struct rq *rq, struct task_struct *p, int flags)
|
||||
uclamp_rq_inc(rq, p);
|
||||
trace_android_rvh_enqueue_task(rq, p, flags);
|
||||
p->sched_class->enqueue_task(rq, p, flags);
|
||||
trace_android_rvh_after_enqueue_task(rq, p);
|
||||
}
|
||||
|
||||
static inline void dequeue_task(struct rq *rq, struct task_struct *p, int flags)
|
||||
@@ -1622,6 +1623,7 @@ static inline void dequeue_task(struct rq *rq, struct task_struct *p, int flags)
|
||||
uclamp_rq_dec(rq, p);
|
||||
trace_android_rvh_dequeue_task(rq, p, flags);
|
||||
p->sched_class->dequeue_task(rq, p, flags);
|
||||
trace_android_rvh_after_dequeue_task(rq, p);
|
||||
}
|
||||
|
||||
void activate_task(struct rq *rq, struct task_struct *p, int flags)
|
||||
|
@@ -582,6 +582,7 @@ static void __enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
|
||||
struct sched_entity *entry;
|
||||
bool leftmost = true;
|
||||
|
||||
trace_android_rvh_enqueue_entity(cfs_rq, se);
|
||||
/*
|
||||
* Find the right place in the rbtree:
|
||||
*/
|
||||
@@ -607,6 +608,7 @@ static void __enqueue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
|
||||
|
||||
static void __dequeue_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
|
||||
{
|
||||
trace_android_rvh_dequeue_entity(cfs_rq, se);
|
||||
rb_erase_cached(&se->run_node, &cfs_rq->tasks_timeline);
|
||||
}
|
||||
|
||||
@@ -4387,7 +4389,8 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr)
|
||||
|
||||
ideal_runtime = sched_slice(cfs_rq, curr);
|
||||
delta_exec = curr->sum_exec_runtime - curr->prev_sum_exec_runtime;
|
||||
trace_android_rvh_check_preempt_tick(current, &ideal_runtime, &skip_preempt);
|
||||
trace_android_rvh_check_preempt_tick(current, &ideal_runtime, &skip_preempt,
|
||||
delta_exec, cfs_rq, curr, sysctl_sched_min_granularity);
|
||||
if (skip_preempt)
|
||||
return;
|
||||
if (delta_exec > ideal_runtime) {
|
||||
@@ -4418,8 +4421,7 @@ check_preempt_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr)
|
||||
resched_curr(rq_of(cfs_rq));
|
||||
}
|
||||
|
||||
static void
|
||||
set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
|
||||
void set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
|
||||
{
|
||||
/* 'current' is not kept within the tree. */
|
||||
if (se->on_rq) {
|
||||
@@ -4450,6 +4452,8 @@ set_next_entity(struct cfs_rq *cfs_rq, struct sched_entity *se)
|
||||
|
||||
se->prev_sum_exec_runtime = se->sum_exec_runtime;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(set_next_entity);
|
||||
|
||||
|
||||
static int
|
||||
wakeup_preempt_entity(struct sched_entity *curr, struct sched_entity *se);
|
||||
@@ -4576,6 +4580,7 @@ entity_tick(struct cfs_rq *cfs_rq, struct sched_entity *curr, int queued)
|
||||
|
||||
if (cfs_rq->nr_running > 1)
|
||||
check_preempt_tick(cfs_rq, curr);
|
||||
trace_android_rvh_entity_tick(cfs_rq, curr);
|
||||
}
|
||||
|
||||
|
||||
@@ -5555,6 +5560,7 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags)
|
||||
flags = ENQUEUE_WAKEUP;
|
||||
}
|
||||
|
||||
trace_android_rvh_enqueue_task_fair(rq, p, flags);
|
||||
for_each_sched_entity(se) {
|
||||
cfs_rq = cfs_rq_of(se);
|
||||
|
||||
@@ -5661,6 +5667,7 @@ static void dequeue_task_fair(struct rq *rq, struct task_struct *p, int flags)
|
||||
flags |= DEQUEUE_SLEEP;
|
||||
}
|
||||
|
||||
trace_android_rvh_dequeue_task_fair(rq, p, flags);
|
||||
for_each_sched_entity(se) {
|
||||
cfs_rq = cfs_rq_of(se);
|
||||
|
||||
@@ -7079,7 +7086,8 @@ static void check_preempt_wakeup(struct rq *rq, struct task_struct *p, int wake_
|
||||
|
||||
find_matching_se(&se, &pse);
|
||||
update_curr(cfs_rq_of(se));
|
||||
trace_android_rvh_check_preempt_wakeup(rq, p, &preempt, &nopreempt);
|
||||
trace_android_rvh_check_preempt_wakeup(rq, p, &preempt, &nopreempt,
|
||||
wake_flags, se, pse, next_buddy_marked, sysctl_sched_wakeup_granularity);
|
||||
if (preempt)
|
||||
goto preempt;
|
||||
if (nopreempt)
|
||||
@@ -7176,8 +7184,7 @@ again:
|
||||
} while (cfs_rq);
|
||||
|
||||
p = task_of(se);
|
||||
trace_android_rvh_replace_next_task_fair(rq, &p, &se, &repick, false);
|
||||
|
||||
trace_android_rvh_replace_next_task_fair(rq, &p, &se, &repick, false, prev);
|
||||
/*
|
||||
* Since we haven't yet done put_prev_entity and if the selected task
|
||||
* is a different task than we started out with, try and touch the
|
||||
@@ -7210,7 +7217,7 @@ simple:
|
||||
if (prev)
|
||||
put_prev_task(rq, prev);
|
||||
|
||||
trace_android_rvh_replace_next_task_fair(rq, &p, &se, &repick, true);
|
||||
trace_android_rvh_replace_next_task_fair(rq, &p, &se, &repick, true, prev);
|
||||
if (repick) {
|
||||
for_each_sched_entity(se)
|
||||
set_next_entity(cfs_rq_of(se), se);
|
||||
|
Reference in New Issue
Block a user