| From 90ee26967bc6da790e8bae141a48a19f3c7b00ee Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Wed, 7 Aug 2019 16:33:40 +0100 |
| Subject: sched/cpufreq: Align trace event behavior of fast switching |
| |
| From: Douglas RAILLARD <douglas.raillard@arm.com> |
| |
| [ Upstream commit 77c84dd1881d0f0176cb678d770bfbda26c54390 ] |
| |
| Fast switching path only emits an event for the CPU of interest, whereas the |
| regular path emits an event for all the CPUs that had their frequency changed, |
| i.e. all the CPUs sharing the same policy. |
| |
| With the current behavior, looking at cpu_frequency event for a given CPU that |
| is using the fast switching path will not give the correct frequency signal. |
| |
| Signed-off-by: Douglas RAILLARD <douglas.raillard@arm.com> |
| Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> |
| Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| kernel/sched/cpufreq_schedutil.c | 7 ++++++- |
| 1 file changed, 6 insertions(+), 1 deletion(-) |
| |
| diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c |
| index 867b4bb6d4beb..b03ca2f73713d 100644 |
| --- a/kernel/sched/cpufreq_schedutil.c |
| +++ b/kernel/sched/cpufreq_schedutil.c |
| @@ -117,6 +117,7 @@ static void sugov_fast_switch(struct sugov_policy *sg_policy, u64 time, |
| unsigned int next_freq) |
| { |
| struct cpufreq_policy *policy = sg_policy->policy; |
| + int cpu; |
| |
| if (!sugov_update_next_freq(sg_policy, time, next_freq)) |
| return; |
| @@ -126,7 +127,11 @@ static void sugov_fast_switch(struct sugov_policy *sg_policy, u64 time, |
| return; |
| |
| policy->cur = next_freq; |
| - trace_cpu_frequency(next_freq, smp_processor_id()); |
| + |
| + if (trace_cpu_frequency_enabled()) { |
| + for_each_cpu(cpu, policy->cpus) |
| + trace_cpu_frequency(next_freq, cpu); |
| + } |
| } |
| |
| static void sugov_deferred_update(struct sugov_policy *sg_policy, u64 time, |
| -- |
| 2.20.1 |
| |