diff --git a/kernel/sched/walt/trace.h b/kernel/sched/walt/trace.h index 26c38c06214c..98e87c5c43d6 100644 --- a/kernel/sched/walt/trace.h +++ b/kernel/sched/walt/trace.h @@ -1371,7 +1371,42 @@ TRACE_EVENT(halt_cpus, TP_printk("req_cpus=0x%x halt_cpus=0x%x time=%u us halt=%d success=%d", __entry->cpus, __entry->halted_cpus, __entry->time, __entry->halt, __entry->success) +); +TRACE_EVENT(update_cpu_capacity, + + TP_PROTO(int cpu, unsigned long rt_pressure, unsigned long capacity), + + TP_ARGS(cpu, rt_pressure, capacity), + + TP_STRUCT__entry( + __field(int, cpu) + __field(unsigned long, rt_pressure) + __field(unsigned long, capacity) + __field(unsigned long, arch_capacity) + __field(unsigned long, thermal_cap) + __field(unsigned long, max_possible_freq) + __field(unsigned long, max_freq) + ), + + TP_fast_assign( + struct walt_sched_cluster *cluster = cpu_cluster(cpu); + + __entry->cpu = cpu; + __entry->rt_pressure = rt_pressure; + __entry->capacity = capacity; + __entry->arch_capacity = arch_scale_cpu_capacity(cpu); + __entry->thermal_cap = arch_scale_cpu_capacity(cpu) - + arch_scale_thermal_pressure(cpu); + __entry->max_freq = cluster->max_freq; + __entry->max_possible_freq = cluster->max_possible_freq; + ), + + TP_printk("cpu=%d arch_capacity=%lu thermal_cap=%lu rt_pressure=%lu max_freq=%lu max_possible_freq=%lu capacity=%lu", + __entry->cpu, __entry->arch_capacity, + __entry->thermal_cap, __entry->rt_pressure, + __entry->max_freq, __entry->max_possible_freq, + __entry->capacity) ); #endif /* _TRACE_WALT_H */ diff --git a/kernel/sched/walt/walt.c b/kernel/sched/walt/walt.c index 4cc53c862870..8ce20759a5d6 100644 --- a/kernel/sched/walt/walt.c +++ b/kernel/sched/walt/walt.c @@ -3823,9 +3823,9 @@ static void android_rvh_update_cpu_capacity(void *unused, int cpu, unsigned long { unsigned long fmax_capacity = arch_scale_cpu_capacity(cpu); unsigned long thermal_pressure = arch_scale_thermal_pressure(cpu); - unsigned long thermal_cap; - struct walt_sched_cluster *cluster; + unsigned long thermal_cap, old; unsigned long rt_pressure = fmax_capacity - *capacity; + struct walt_sched_cluster *cluster; struct rq *rq = cpu_rq(cpu); if (unlikely(walt_disabled)) @@ -3845,7 +3845,12 @@ static void android_rvh_update_cpu_capacity(void *unused, int cpu, unsigned long fmax_capacity = mult_frac(fmax_capacity, cluster->max_freq, cluster->max_possible_freq); + old = rq->cpu_capacity_orig; rq->cpu_capacity_orig = min(fmax_capacity, thermal_cap); + + if (old != rq->cpu_capacity_orig) + trace_update_cpu_capacity(cpu, rt_pressure, *capacity); + *capacity = max(rq->cpu_capacity_orig - rt_pressure, 1UL); }