All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] cpufreq: Avoid unnecessary frequency updates due to mismatch
@ 2022-05-04  8:21 ` Viresh Kumar
  0 siblings, 0 replies; 30+ messages in thread
From: Viresh Kumar @ 2022-05-04  8:21 UTC (permalink / raw)
  To: Rafael Wysocki, Rafael J. Wysocki, Viresh Kumar, Matthias Brugger
  Cc: linux-pm, Vincent Guittot, Rex-BC Chen, linux-kernel,
	linux-arm-kernel, linux-mediatek

For some platforms, the frequency returned by hardware may be slightly
different from what is provided in the frequency table. For example,
hardware may return 499 MHz instead of 500 MHz. In such cases it is
better to avoid getting into unnecessary frequency updates, as we may
end up switching policy->cur between the two and sending unnecessary
pre/post update notifications, etc.

This patch has chosen allows the hardware frequency and table frequency
to deviate by 1 MHz for now, we may want to increase it a bit later on
if someone still complains.

Reported-by: Rex-BC Chen <rex-bc.chen@mediatek.com>
Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org>
---
 drivers/cpufreq/cpufreq.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index 0d58b0f8f3af..233e8af48848 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -28,6 +28,7 @@
 #include <linux/suspend.h>
 #include <linux/syscore_ops.h>
 #include <linux/tick.h>
+#include <linux/units.h>
 #include <trace/events/power.h>
 
 static LIST_HEAD(cpufreq_policy_list);
@@ -1708,6 +1709,16 @@ static unsigned int cpufreq_verify_current_freq(struct cpufreq_policy *policy, b
 		return new_freq;
 
 	if (policy->cur != new_freq) {
+		/*
+		 * For some platforms, the frequency returned by hardware may be
+		 * slightly different from what is provided in the frequency
+		 * table, for example hardware may return 499 MHz instead of 500
+		 * MHz. In such cases it is better to avoid getting into
+		 * unnecessary frequency updates.
+		 */
+		if (abs(policy->cur - new_freq) < HZ_PER_MHZ)
+			return policy->cur;
+
 		cpufreq_out_of_sync(policy, new_freq);
 		if (update)
 			schedule_work(&policy->update);
-- 
2.31.1.272.g89b43f80a514


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

end of thread, other threads:[~2022-05-06 18:59 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-05-04  8:21 [PATCH] cpufreq: Avoid unnecessary frequency updates due to mismatch Viresh Kumar
2022-05-04  8:21 ` Viresh Kumar
2022-05-04  8:21 ` Viresh Kumar
2022-05-04 12:06 ` Rex-BC Chen
2022-05-04 12:06   ` Rex-BC Chen
2022-05-04 12:06   ` Rex-BC Chen
2022-05-05  7:28 ` Vincent Guittot
2022-05-05  7:28   ` Vincent Guittot
2022-05-05  7:28   ` Vincent Guittot
2022-05-05  7:44   ` Viresh Kumar
2022-05-05  7:44     ` Viresh Kumar
2022-05-05  7:44     ` Viresh Kumar
2022-05-05  8:21     ` Vincent Guittot
2022-05-05  8:21       ` Vincent Guittot
2022-05-05  8:21       ` Vincent Guittot
2022-05-05  8:28       ` Viresh Kumar
2022-05-05  8:28         ` Viresh Kumar
2022-05-05  8:28         ` Viresh Kumar
2022-05-05  9:40         ` Vincent Guittot
2022-05-05  9:40           ` Vincent Guittot
2022-05-05  9:40           ` Vincent Guittot
2022-05-05  9:45           ` Viresh Kumar
2022-05-05  9:45             ` Viresh Kumar
2022-05-05  9:45             ` Viresh Kumar
2022-05-05 13:31 ` Matthias Brugger
2022-05-05 13:31   ` Matthias Brugger
2022-05-05 13:31   ` Matthias Brugger
2022-05-06 18:57   ` Rafael J. Wysocki
2022-05-06 18:57     ` Rafael J. Wysocki
2022-05-06 18:57     ` Rafael J. Wysocki

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.