diff --git a/drivers/android/vendor_hooks.c b/drivers/android/vendor_hooks.c index fe86a814b1b7..b37c4904b1a6 100644 --- a/drivers/android/vendor_hooks.c +++ b/drivers/android/vendor_hooks.c @@ -81,3 +81,5 @@ EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_sched_nohz_balancer_kick); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_busiest_queue); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_migrate_queued_task); EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_find_energy_efficient_cpu); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_vh_set_sugov_sched_attr); +EXPORT_TRACEPOINT_SYMBOL_GPL(android_rvh_set_iowait); \ No newline at end of file diff --git a/include/trace/hooks/sched.h b/include/trace/hooks/sched.h index b914f53f216f..232ad3a6f87b 100644 --- a/include/trace/hooks/sched.h +++ b/include/trace/hooks/sched.h @@ -105,6 +105,13 @@ DECLARE_RESTRICTED_HOOK(android_rvh_migrate_queued_task, DECLARE_RESTRICTED_HOOK(android_rvh_find_energy_efficient_cpu, TP_PROTO(struct task_struct *p, int prev_cpu, int sync, int *new_cpu), TP_ARGS(p, prev_cpu, sync, new_cpu), 1); +struct sched_attr; +DECLARE_HOOK(android_vh_set_sugov_sched_attr, + TP_PROTO(struct sched_attr *attr), + TP_ARGS(attr)); +DECLARE_RESTRICTED_HOOK(android_rvh_set_iowait, + TP_PROTO(struct task_struct *p, int *should_iowait_boost), + TP_ARGS(p, should_iowait_boost), 1); #else #define trace_android_rvh_select_task_rq_fair(p, prev_cpu, sd_flag, wake_flags, new_cpu) #define trace_android_rvh_select_task_rq_rt(p, prev_cpu, sd_flag, wake_flags, new_cpu) @@ -127,6 +134,8 @@ DECLARE_RESTRICTED_HOOK(android_rvh_find_energy_efficient_cpu, #define trace_android_rvh_find_busiest_queue(dst_cpu, group, env_cpus, busiest, done) #define trace_android_rvh_migrate_queued_task(rq, rf, p, new_cpu, detached) #define trace_android_rvh_find_energy_efficient_cpu(p, prev_cpu, sync, new_cpu) +#define trace_android_vh_set_sugov_sched_attr(attr) +#define trace_android_rvh_set_iowait(p, should_iowait_boost) #endif #endif /* _TRACE_HOOK_SCHED_H */ /* This part must be outside protection */ diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c index 1724dedfd795..f360a3bf124d 100644 --- a/kernel/sched/cpufreq_schedutil.c +++ b/kernel/sched/cpufreq_schedutil.c @@ -12,6 +12,7 @@ #include #include +#include #define IOWAIT_BOOST_MIN (SCHED_CAPACITY_SCALE / 8) @@ -661,6 +662,7 @@ static int sugov_kthread_create(struct sugov_policy *sg_policy) if (policy->fast_switch_enabled) return 0; + trace_android_vh_set_sugov_sched_attr(&attr); kthread_init_work(&sg_policy->work, sugov_work); kthread_init_worker(&sg_policy->worker); thread = kthread_create(kthread_worker_fn, &sg_policy->worker, diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index 78a2892bc4fc..0b739c622b2d 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -5481,6 +5481,7 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags) struct sched_entity *se = &p->se; int idle_h_nr_running = task_has_idle_policy(p); int task_new = !(flags & ENQUEUE_WAKEUP); + int should_iowait_boost; /* * The code below (indirectly) updates schedutil which looks at @@ -5495,7 +5496,9 @@ enqueue_task_fair(struct rq *rq, struct task_struct *p, int flags) * utilization updates, so do it here explicitly with the IOWAIT flag * passed. */ - if (p->in_iowait) + should_iowait_boost = p->in_iowait; + trace_android_rvh_set_iowait(p, &should_iowait_boost); + if (should_iowait_boost) cpufreq_update_util(rq, SCHED_CPUFREQ_IOWAIT); for_each_sched_entity(se) {