Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3b773b24 authored by JianMin Liu's avatar JianMin Liu Committed by Todd Kjos
Browse files

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: default avatarJianMin Liu <jian-min.liu@mediatek.com>
Change-Id: Ic85835852690d0060666107d9108560f5023496b
parent cfde7b83
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -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);
+25 −0
Original line number Diff line number Diff line
@@ -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 */
+9 −0
Original line number Diff line number Diff line
@@ -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);
}

/*