mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 02:30:34 +02:00 
			
		
		
		
	cpufreq: Avoid unnecessary frequency updates due to mismatch
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> Tested-by: Jia-wei Chang <jia-wei.chang@mediatek.com> Reviewed-by: Matthias Brugger <matthias.bgg@gmail.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
		
							parent
							
								
									02678c0882
								
							
						
					
					
						commit
						f55ae08c89
					
				
					 1 changed files with 11 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue