mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
* [PATCH 1/3] cpufreq: schedutil: Use idle_calls counter of the remote CPU
@ 2017-12-15 15:39 Joel Fernandes
  2017-12-15 15:39 ` [PATCH 2/3] sched/fair: Correct obsolete comment about cpufreq_update_util Joel Fernandes
  2017-12-15 15:39 ` [PATCH 3/3] sched/fair: remove impossible condition from find_idlest_group_cpu Joel Fernandes
  0 siblings, 2 replies; 6+ messages in thread
From: Joel Fernandes @ 2017-12-15 15:39 UTC (permalink / raw)
  To: linux-kernel
  Cc: Joel Fernandes, Srinivas Pandruvada, Len Brown,
	Rafael J. Wysocki, Viresh Kumar, Ingo Molnar, Peter Zijlstra,
	Juri Lelli, Patrick Bellasi, Chris Redpath, Steve Muckle,
	Dietmar Eggemann, Vincent Guittot, Morten Ramussen,
	Frederic Weisbecker, Thomas Gleixner, Steven Rostedt,
	Saravana Kannan, Vikram Mulukutla, Rohit Jain, Atish Patra,
	Josef Bacik, EAS Dev, Android Kernel

Since the recent remote cpufreq callback work, its possible that a cpufreq
update is triggered from a remote CPU. For single policies however, the current
code uses the local CPU when trying to determine if the remote sg_cpu entered
idle or is busy. This is incorrect. To remedy this, compare with the nohz tick
idle_calls counter of the remote CPU.

Acked-by: Viresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: Joel Fernandes <joelaf@google.com>
---
 include/linux/tick.h             |  1 +
 kernel/sched/cpufreq_schedutil.c |  2 +-
 kernel/time/tick-sched.c         | 13 +++++++++++++
 3 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/include/linux/tick.h b/include/linux/tick.h
index f442d1a42025..7cc35921218e 100644
--- a/include/linux/tick.h
+++ b/include/linux/tick.h
@@ -119,6 +119,7 @@ extern void tick_nohz_idle_exit(void);
 extern void tick_nohz_irq_exit(void);
 extern ktime_t tick_nohz_get_sleep_length(void);
 extern unsigned long tick_nohz_get_idle_calls(void);
+extern unsigned long tick_nohz_get_idle_calls_cpu(int cpu);
 extern u64 get_cpu_idle_time_us(int cpu, u64 *last_update_time);
 extern u64 get_cpu_iowait_time_us(int cpu, u64 *last_update_time);
 #else /* !CONFIG_NO_HZ_COMMON */
diff --git a/kernel/sched/cpufreq_schedutil.c b/kernel/sched/cpufreq_schedutil.c
index 2f52ec0f1539..d6717a3331a1 100644
--- a/kernel/sched/cpufreq_schedutil.c
+++ b/kernel/sched/cpufreq_schedutil.c
@@ -244,7 +244,7 @@ static void sugov_iowait_boost(struct sugov_cpu *sg_cpu, unsigned long *util,
 #ifdef CONFIG_NO_HZ_COMMON
 static bool sugov_cpu_is_busy(struct sugov_cpu *sg_cpu)
 {
-	unsigned long idle_calls = tick_nohz_get_idle_calls();
+	unsigned long idle_calls = tick_nohz_get_idle_calls_cpu(sg_cpu->cpu);
 	bool ret = idle_calls == sg_cpu->saved_idle_calls;
 
 	sg_cpu->saved_idle_calls = idle_calls;
diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c
index 99578f06c8d4..77555faf6fbc 100644
--- a/kernel/time/tick-sched.c
+++ b/kernel/time/tick-sched.c
@@ -985,6 +985,19 @@ ktime_t tick_nohz_get_sleep_length(void)
 	return ts->sleep_length;
 }
 
+/**
+ * tick_nohz_get_idle_calls_cpu - return the current idle calls counter value
+ * for a particular CPU.
+ *
+ * Called from the schedutil frequency scaling governor in scheduler context.
+ */
+unsigned long tick_nohz_get_idle_calls_cpu(int cpu)
+{
+	struct tick_sched *ts = tick_get_tick_sched(cpu);
+
+	return ts->idle_calls;
+}
+
 /**
  * tick_nohz_get_idle_calls - return the current idle calls counter value
  *
-- 
2.15.1.504.g5279b80103-goog

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2018-01-10 12:29 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-12-15 15:39 [PATCH 1/3] cpufreq: schedutil: Use idle_calls counter of the remote CPU Joel Fernandes
2017-12-15 15:39 ` [PATCH 2/3] sched/fair: Correct obsolete comment about cpufreq_update_util Joel Fernandes
2017-12-19 18:02   ` Peter Zijlstra
2018-01-10 12:16   ` [tip:sched/core] sched/fair: Correct obsolete comment about cpufreq_update_util() tip-bot for Joel Fernandes
2017-12-15 15:39 ` [PATCH 3/3] sched/fair: remove impossible condition from find_idlest_group_cpu Joel Fernandes
2018-01-10 12:16   ` [tip:sched/core] sched/fair: Remove impossible condition from find_idlest_group_cpu() tip-bot for Joel Fernandes

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

Powered by JetHome