mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-12 15:49:17 -04:00
ANDROID: sched: add vendor hooks to handle scheduling priority
Add hooks to collect scheduling information and apply vendor's tuning when task's scheduling priority is changed Bug: 163431711 Signed-off-by: JianMin Liu <jian-min.liu@mediatek.com> Change-Id: Ic85835852690d0060666107d9108560f5023496b
This commit is contained in:
parent
cfde7b838c
commit
3b773b24e6
3 changed files with 39 additions and 0 deletions
|
|
@ -19,6 +19,11 @@
|
|||
* associated with them) to allow external modules to probe them.
|
||||
*/
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_select_task_rq_fair);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_rtmutex_prepare_setprio);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_prepare_prio_fork);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_finish_prio_fork);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_user_nice);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_setscheduler);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_start);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_mutex_wait_finish);
|
||||
EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_rwsem_read_wait_start);
|
||||
|
|
|
|||
|
|
@ -15,8 +15,33 @@ struct task_struct;
|
|||
DECLARE_RESTRICTED_HOOK(android_rvh_select_task_rq_fair,
|
||||
TP_PROTO(struct task_struct *p, int prev_cpu, int sd_flag, int wake_flags, int *new_cpu),
|
||||
TP_ARGS(p, prev_cpu, sd_flag, wake_flags, new_cpu), 1);
|
||||
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_prepare_prio_fork,
|
||||
TP_PROTO(struct task_struct *p),
|
||||
TP_ARGS(p), 1);
|
||||
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_finish_prio_fork,
|
||||
TP_PROTO(struct task_struct *p),
|
||||
TP_ARGS(p), 1);
|
||||
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_rtmutex_prepare_setprio,
|
||||
TP_PROTO(struct task_struct *p, struct task_struct *pi_task),
|
||||
TP_ARGS(p, pi_task), 1);
|
||||
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_set_user_nice,
|
||||
TP_PROTO(struct task_struct *p, long *nice),
|
||||
TP_ARGS(p, nice), 1);
|
||||
|
||||
DECLARE_RESTRICTED_HOOK(android_rvh_setscheduler,
|
||||
TP_PROTO(struct task_struct *p),
|
||||
TP_ARGS(p), 1);
|
||||
#else
|
||||
#define trace_android_rvh_select_task_rq_fair(p, prev_cpu, sd_flag, wake_flags, new_cpu)
|
||||
#define trace_android_rvh_prepare_prio_fork(p)
|
||||
#define trace_android_rvh_finish_prio_fork(p)
|
||||
#define trace_android_rvh_rtmutex_prepare_setprio(p, pi_task)
|
||||
#define trace_android_rvh_set_user_nice(p, nice)
|
||||
#define trace_android_rvh_setscheduler(p)
|
||||
#endif
|
||||
#endif /* _TRACE_HOOK_SCHED_H */
|
||||
/* This part must be outside protection */
|
||||
|
|
|
|||
|
|
@ -27,6 +27,9 @@
|
|||
#undef CREATE_TRACE_POINTS
|
||||
#include <trace/hooks/dtask.h>
|
||||
|
||||
#undef CREATE_TRACE_POINTS
|
||||
#include <trace/hooks/sched.h>
|
||||
|
||||
/*
|
||||
* Export tracepoints that act as a bare tracehook (ie: have no trace event
|
||||
* associated with them) to allow external modules to probe them.
|
||||
|
|
@ -2863,6 +2866,7 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p)
|
|||
* Make sure we do not leak PI boosting priority to the child.
|
||||
*/
|
||||
p->prio = current->normal_prio;
|
||||
trace_android_rvh_prepare_prio_fork(p);
|
||||
|
||||
uclamp_fork(p);
|
||||
|
||||
|
|
@ -2895,6 +2899,7 @@ int sched_fork(unsigned long clone_flags, struct task_struct *p)
|
|||
p->sched_class = &fair_sched_class;
|
||||
|
||||
init_entity_runnable_average(&p->se);
|
||||
trace_android_rvh_finish_prio_fork(p);
|
||||
|
||||
/*
|
||||
* The child is not yet in the pid-hash so no cgroup attach races,
|
||||
|
|
@ -4392,6 +4397,7 @@ void rt_mutex_setprio(struct task_struct *p, struct task_struct *pi_task)
|
|||
struct rq_flags rf;
|
||||
struct rq *rq;
|
||||
|
||||
trace_android_rvh_rtmutex_prepare_setprio(p, pi_task);
|
||||
/* XXX used to be waiter->prio, not waiter->task->prio */
|
||||
prio = __rt_effective_prio(pi_task, p->normal_prio);
|
||||
|
||||
|
|
@ -4523,6 +4529,7 @@ void set_user_nice(struct task_struct *p, long nice)
|
|||
*/
|
||||
rq = task_rq_lock(p, &rf);
|
||||
update_rq_clock(rq);
|
||||
trace_android_rvh_set_user_nice(p, &nice);
|
||||
|
||||
/*
|
||||
* The RT priorities are set via sched_setscheduler(), but we still
|
||||
|
|
@ -4746,6 +4753,8 @@ static void __setscheduler(struct rq *rq, struct task_struct *p,
|
|||
p->sched_class = &rt_sched_class;
|
||||
else
|
||||
p->sched_class = &fair_sched_class;
|
||||
|
||||
trace_android_rvh_setscheduler(p);
|
||||
}
|
||||
|
||||
/*
|
||||
|
|
|
|||
Loading…
Reference in a new issue