cpufreq: Move common part from governors to separate file, v2
Multiple cpufreq governers have defined similar get_cpu_idle_time_***() routines. These routines must be moved to some common place, so that all governors can use them. So moving them to cpufreq_governor.c, which seems to be a better place for keeping these routines. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
		
					parent
					
						
							
								4b972f0b04
							
						
					
				
			
			
				commit
				
					
						2aacdfff9c
					
				
			
		
					 5 changed files with 59 additions and 70 deletions
				
			
		|  | @ -7,8 +7,8 @@ obj-$(CONFIG_CPU_FREQ_STAT)             += cpufreq_stats.o | |||
| obj-$(CONFIG_CPU_FREQ_GOV_PERFORMANCE)	+= cpufreq_performance.o | ||||
| obj-$(CONFIG_CPU_FREQ_GOV_POWERSAVE)	+= cpufreq_powersave.o | ||||
| obj-$(CONFIG_CPU_FREQ_GOV_USERSPACE)	+= cpufreq_userspace.o | ||||
| obj-$(CONFIG_CPU_FREQ_GOV_ONDEMAND)	+= cpufreq_ondemand.o | ||||
| obj-$(CONFIG_CPU_FREQ_GOV_CONSERVATIVE)	+= cpufreq_conservative.o | ||||
| obj-$(CONFIG_CPU_FREQ_GOV_ONDEMAND)	+= cpufreq_ondemand.o cpufreq_governor.o | ||||
| obj-$(CONFIG_CPU_FREQ_GOV_CONSERVATIVE)	+= cpufreq_conservative.o cpufreq_governor.o | ||||
| 
 | ||||
| # CPUfreq cross-arch helpers
 | ||||
| obj-$(CONFIG_CPU_FREQ_TABLE)		+= freq_table.o | ||||
|  |  | |||
|  | @ -95,40 +95,6 @@ static struct dbs_tuners { | |||
| 	.freq_step = 5, | ||||
| }; | ||||
| 
 | ||||
| static inline u64 get_cpu_idle_time_jiffy(unsigned int cpu, u64 *wall) | ||||
| { | ||||
| 	u64 idle_time; | ||||
| 	u64 cur_wall_time; | ||||
| 	u64 busy_time; | ||||
| 
 | ||||
| 	cur_wall_time = jiffies64_to_cputime64(get_jiffies_64()); | ||||
| 
 | ||||
| 	busy_time  = kcpustat_cpu(cpu).cpustat[CPUTIME_USER]; | ||||
| 	busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_SYSTEM]; | ||||
| 	busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_IRQ]; | ||||
| 	busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_SOFTIRQ]; | ||||
| 	busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_STEAL]; | ||||
| 	busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_NICE]; | ||||
| 
 | ||||
| 	idle_time = cur_wall_time - busy_time; | ||||
| 	if (wall) | ||||
| 		*wall = jiffies_to_usecs(cur_wall_time); | ||||
| 
 | ||||
| 	return jiffies_to_usecs(idle_time); | ||||
| } | ||||
| 
 | ||||
| static inline cputime64_t get_cpu_idle_time(unsigned int cpu, cputime64_t *wall) | ||||
| { | ||||
| 	u64 idle_time = get_cpu_idle_time_us(cpu, NULL); | ||||
| 
 | ||||
| 	if (idle_time == -1ULL) | ||||
| 		return get_cpu_idle_time_jiffy(cpu, wall); | ||||
| 	else | ||||
| 		idle_time += get_cpu_iowait_time_us(cpu, wall); | ||||
| 
 | ||||
| 	return idle_time; | ||||
| } | ||||
| 
 | ||||
| /* keep track of frequency transitions */ | ||||
| static int | ||||
| dbs_cpufreq_notifier(struct notifier_block *nb, unsigned long val, | ||||
|  |  | |||
							
								
								
									
										52
									
								
								drivers/cpufreq/cpufreq_governor.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										52
									
								
								drivers/cpufreq/cpufreq_governor.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,52 @@ | |||
| /*
 | ||||
|  * drivers/cpufreq/cpufreq_governor.c | ||||
|  * | ||||
|  * CPUFREQ governors common code | ||||
|  * | ||||
|  * This program is free software; you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU General Public License version 2 as | ||||
|  * published by the Free Software Foundation. | ||||
|  */ | ||||
| 
 | ||||
| #include <asm/cputime.h> | ||||
| #include <linux/export.h> | ||||
| #include <linux/kernel_stat.h> | ||||
| #include <linux/tick.h> | ||||
| #include <linux/types.h> | ||||
| /*
 | ||||
|  * Code picked from earlier governer implementations | ||||
|  */ | ||||
| static inline u64 get_cpu_idle_time_jiffy(unsigned int cpu, u64 *wall) | ||||
| { | ||||
| 	u64 idle_time; | ||||
| 	u64 cur_wall_time; | ||||
| 	u64 busy_time; | ||||
| 
 | ||||
| 	cur_wall_time = jiffies64_to_cputime64(get_jiffies_64()); | ||||
| 
 | ||||
| 	busy_time = kcpustat_cpu(cpu).cpustat[CPUTIME_USER]; | ||||
| 	busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_SYSTEM]; | ||||
| 	busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_IRQ]; | ||||
| 	busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_SOFTIRQ]; | ||||
| 	busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_STEAL]; | ||||
| 	busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_NICE]; | ||||
| 
 | ||||
| 	idle_time = cur_wall_time - busy_time; | ||||
| 	if (wall) | ||||
| 		*wall = jiffies_to_usecs(cur_wall_time); | ||||
| 
 | ||||
| 	return jiffies_to_usecs(idle_time); | ||||
| } | ||||
| 
 | ||||
| cputime64_t get_cpu_idle_time(unsigned int cpu, cputime64_t *wall) | ||||
| { | ||||
| 	u64 idle_time = get_cpu_idle_time_us(cpu, NULL); | ||||
| 
 | ||||
| 	if (idle_time == -1ULL) | ||||
| 		return get_cpu_idle_time_jiffy(cpu, wall); | ||||
| 	else | ||||
| 		idle_time += get_cpu_iowait_time_us(cpu, wall); | ||||
| 
 | ||||
| 	return idle_time; | ||||
| } | ||||
| EXPORT_SYMBOL_GPL(get_cpu_idle_time); | ||||
|  | @ -119,40 +119,6 @@ static struct dbs_tuners { | |||
| 	.powersave_bias = 0, | ||||
| }; | ||||
| 
 | ||||
| static inline u64 get_cpu_idle_time_jiffy(unsigned int cpu, u64 *wall) | ||||
| { | ||||
| 	u64 idle_time; | ||||
| 	u64 cur_wall_time; | ||||
| 	u64 busy_time; | ||||
| 
 | ||||
| 	cur_wall_time = jiffies64_to_cputime64(get_jiffies_64()); | ||||
| 
 | ||||
| 	busy_time  = kcpustat_cpu(cpu).cpustat[CPUTIME_USER]; | ||||
| 	busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_SYSTEM]; | ||||
| 	busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_IRQ]; | ||||
| 	busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_SOFTIRQ]; | ||||
| 	busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_STEAL]; | ||||
| 	busy_time += kcpustat_cpu(cpu).cpustat[CPUTIME_NICE]; | ||||
| 
 | ||||
| 	idle_time = cur_wall_time - busy_time; | ||||
| 	if (wall) | ||||
| 		*wall = jiffies_to_usecs(cur_wall_time); | ||||
| 
 | ||||
| 	return jiffies_to_usecs(idle_time); | ||||
| } | ||||
| 
 | ||||
| static inline cputime64_t get_cpu_idle_time(unsigned int cpu, cputime64_t *wall) | ||||
| { | ||||
| 	u64 idle_time = get_cpu_idle_time_us(cpu, NULL); | ||||
| 
 | ||||
| 	if (idle_time == -1ULL) | ||||
| 		return get_cpu_idle_time_jiffy(cpu, wall); | ||||
| 	else | ||||
| 		idle_time += get_cpu_iowait_time_us(cpu, wall); | ||||
| 
 | ||||
| 	return idle_time; | ||||
| } | ||||
| 
 | ||||
| static inline cputime64_t get_cpu_iowait_time(unsigned int cpu, cputime64_t *wall) | ||||
| { | ||||
| 	u64 iowait_time = get_cpu_iowait_time_us(cpu, wall); | ||||
|  |  | |||
|  | @ -11,6 +11,7 @@ | |||
| #ifndef _LINUX_CPUFREQ_H | ||||
| #define _LINUX_CPUFREQ_H | ||||
| 
 | ||||
| #include <asm/cputime.h> | ||||
| #include <linux/mutex.h> | ||||
| #include <linux/notifier.h> | ||||
| #include <linux/threads.h> | ||||
|  | @ -407,5 +408,9 @@ void cpufreq_frequency_table_get_attr(struct cpufreq_frequency_table *table, | |||
| 
 | ||||
| void cpufreq_frequency_table_put_attr(unsigned int cpu); | ||||
| 
 | ||||
| /*********************************************************************
 | ||||
|  *                     Governor Helpers				     * | ||||
|  *********************************************************************/ | ||||
| cputime64_t get_cpu_idle_time(unsigned int cpu, cputime64_t *wall); | ||||
| 
 | ||||
| #endif /* _LINUX_CPUFREQ_H */ | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 viresh kumar
				viresh kumar