forked from mirrors/linux
		
	cpufreq: governors: Get rid of dbs_data->enable field
CPUFREQ_GOV_START/STOP are called only once for all policy->cpus and hence we don't need to adapt cpufreq_governor_dbs() routine for multiple calls. So, this patch removes dbs_data->enable field entirely. And rearrange code a bit. Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Tested-by: Fabio Baltieri <fabio.baltieri@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
This commit is contained in:
		
							parent
							
								
									09dca5ae75
								
							
						
					
					
						commit
						8eeed09566
					
				
					 2 changed files with 19 additions and 38 deletions
				
			
		| 
						 | 
					@ -182,6 +182,8 @@ int cpufreq_governor_dbs(struct dbs_data *dbs_data,
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	struct od_cpu_dbs_info_s *od_dbs_info = NULL;
 | 
						struct od_cpu_dbs_info_s *od_dbs_info = NULL;
 | 
				
			||||||
	struct cs_cpu_dbs_info_s *cs_dbs_info = NULL;
 | 
						struct cs_cpu_dbs_info_s *cs_dbs_info = NULL;
 | 
				
			||||||
 | 
						struct cs_ops *cs_ops = NULL;
 | 
				
			||||||
 | 
						struct od_ops *od_ops = NULL;
 | 
				
			||||||
	struct od_dbs_tuners *od_tuners = dbs_data->tuners;
 | 
						struct od_dbs_tuners *od_tuners = dbs_data->tuners;
 | 
				
			||||||
	struct cs_dbs_tuners *cs_tuners = dbs_data->tuners;
 | 
						struct cs_dbs_tuners *cs_tuners = dbs_data->tuners;
 | 
				
			||||||
	struct cpu_dbs_common_info *cpu_cdbs;
 | 
						struct cpu_dbs_common_info *cpu_cdbs;
 | 
				
			||||||
| 
						 | 
					@ -194,10 +196,12 @@ int cpufreq_governor_dbs(struct dbs_data *dbs_data,
 | 
				
			||||||
		cs_dbs_info = dbs_data->get_cpu_dbs_info_s(cpu);
 | 
							cs_dbs_info = dbs_data->get_cpu_dbs_info_s(cpu);
 | 
				
			||||||
		sampling_rate = &cs_tuners->sampling_rate;
 | 
							sampling_rate = &cs_tuners->sampling_rate;
 | 
				
			||||||
		ignore_nice = cs_tuners->ignore_nice;
 | 
							ignore_nice = cs_tuners->ignore_nice;
 | 
				
			||||||
 | 
							cs_ops = dbs_data->gov_ops;
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		od_dbs_info = dbs_data->get_cpu_dbs_info_s(cpu);
 | 
							od_dbs_info = dbs_data->get_cpu_dbs_info_s(cpu);
 | 
				
			||||||
		sampling_rate = &od_tuners->sampling_rate;
 | 
							sampling_rate = &od_tuners->sampling_rate;
 | 
				
			||||||
		ignore_nice = od_tuners->ignore_nice;
 | 
							ignore_nice = od_tuners->ignore_nice;
 | 
				
			||||||
 | 
							od_ops = dbs_data->gov_ops;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	switch (event) {
 | 
						switch (event) {
 | 
				
			||||||
| 
						 | 
					@ -207,10 +211,9 @@ int cpufreq_governor_dbs(struct dbs_data *dbs_data,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		mutex_lock(&dbs_data->mutex);
 | 
							mutex_lock(&dbs_data->mutex);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		dbs_data->enable++;
 | 
					 | 
				
			||||||
		for_each_cpu(j, policy->cpus) {
 | 
							for_each_cpu(j, policy->cpus) {
 | 
				
			||||||
			struct cpu_dbs_common_info *j_cdbs;
 | 
								struct cpu_dbs_common_info *j_cdbs =
 | 
				
			||||||
			j_cdbs = dbs_data->get_cpu_cdbs(j);
 | 
									dbs_data->get_cpu_cdbs(j);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			j_cdbs->cpu = j;
 | 
								j_cdbs->cpu = j;
 | 
				
			||||||
			j_cdbs->cur_policy = policy;
 | 
								j_cdbs->cur_policy = policy;
 | 
				
			||||||
| 
						 | 
					@ -225,13 +228,6 @@ int cpufreq_governor_dbs(struct dbs_data *dbs_data,
 | 
				
			||||||
					     dbs_data->gov_dbs_timer);
 | 
										     dbs_data->gov_dbs_timer);
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/*
 | 
					 | 
				
			||||||
		 * Start the timerschedule work, when this governor is used for
 | 
					 | 
				
			||||||
		 * first time
 | 
					 | 
				
			||||||
		 */
 | 
					 | 
				
			||||||
		if (dbs_data->enable != 1)
 | 
					 | 
				
			||||||
			goto second_time;
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		rc = sysfs_create_group(cpufreq_global_kobject,
 | 
							rc = sysfs_create_group(cpufreq_global_kobject,
 | 
				
			||||||
				dbs_data->attr_group);
 | 
									dbs_data->attr_group);
 | 
				
			||||||
		if (rc) {
 | 
							if (rc) {
 | 
				
			||||||
| 
						 | 
					@ -249,17 +245,19 @@ int cpufreq_governor_dbs(struct dbs_data *dbs_data,
 | 
				
			||||||
		 * governor, thus we are bound to jiffes/HZ
 | 
							 * governor, thus we are bound to jiffes/HZ
 | 
				
			||||||
		 */
 | 
							 */
 | 
				
			||||||
		if (dbs_data->governor == GOV_CONSERVATIVE) {
 | 
							if (dbs_data->governor == GOV_CONSERVATIVE) {
 | 
				
			||||||
			struct cs_ops *ops = dbs_data->gov_ops;
 | 
								cs_dbs_info->down_skip = 0;
 | 
				
			||||||
 | 
								cs_dbs_info->enable = 1;
 | 
				
			||||||
			cpufreq_register_notifier(ops->notifier_block,
 | 
								cs_dbs_info->requested_freq = policy->cur;
 | 
				
			||||||
 | 
								cpufreq_register_notifier(cs_ops->notifier_block,
 | 
				
			||||||
					CPUFREQ_TRANSITION_NOTIFIER);
 | 
										CPUFREQ_TRANSITION_NOTIFIER);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
			dbs_data->min_sampling_rate = MIN_SAMPLING_RATE_RATIO *
 | 
								dbs_data->min_sampling_rate = MIN_SAMPLING_RATE_RATIO *
 | 
				
			||||||
				jiffies_to_usecs(10);
 | 
									jiffies_to_usecs(10);
 | 
				
			||||||
		} else {
 | 
							} else {
 | 
				
			||||||
			struct od_ops *ops = dbs_data->gov_ops;
 | 
								od_dbs_info->rate_mult = 1;
 | 
				
			||||||
 | 
								od_dbs_info->sample_type = OD_NORMAL_SAMPLE;
 | 
				
			||||||
			od_tuners->io_is_busy = ops->io_busy();
 | 
								od_ops->powersave_bias_init_cpu(cpu);
 | 
				
			||||||
 | 
								od_tuners->io_is_busy = od_ops->io_busy();
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Bring kernel and HW constraints together */
 | 
							/* Bring kernel and HW constraints together */
 | 
				
			||||||
| 
						 | 
					@ -267,18 +265,6 @@ int cpufreq_governor_dbs(struct dbs_data *dbs_data,
 | 
				
			||||||
				MIN_LATENCY_MULTIPLIER * latency);
 | 
									MIN_LATENCY_MULTIPLIER * latency);
 | 
				
			||||||
		*sampling_rate = max(dbs_data->min_sampling_rate, latency *
 | 
							*sampling_rate = max(dbs_data->min_sampling_rate, latency *
 | 
				
			||||||
				LATENCY_MULTIPLIER);
 | 
									LATENCY_MULTIPLIER);
 | 
				
			||||||
 | 
					 | 
				
			||||||
second_time:
 | 
					 | 
				
			||||||
		if (dbs_data->governor == GOV_CONSERVATIVE) {
 | 
					 | 
				
			||||||
			cs_dbs_info->down_skip = 0;
 | 
					 | 
				
			||||||
			cs_dbs_info->enable = 1;
 | 
					 | 
				
			||||||
			cs_dbs_info->requested_freq = policy->cur;
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			struct od_ops *ops = dbs_data->gov_ops;
 | 
					 | 
				
			||||||
			od_dbs_info->rate_mult = 1;
 | 
					 | 
				
			||||||
			od_dbs_info->sample_type = OD_NORMAL_SAMPLE;
 | 
					 | 
				
			||||||
			ops->powersave_bias_init_cpu(cpu);
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		mutex_unlock(&dbs_data->mutex);
 | 
							mutex_unlock(&dbs_data->mutex);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		/* Initiate timer time stamp */
 | 
							/* Initiate timer time stamp */
 | 
				
			||||||
| 
						 | 
					@ -297,16 +283,12 @@ int cpufreq_governor_dbs(struct dbs_data *dbs_data,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		mutex_lock(&dbs_data->mutex);
 | 
							mutex_lock(&dbs_data->mutex);
 | 
				
			||||||
		mutex_destroy(&cpu_cdbs->timer_mutex);
 | 
							mutex_destroy(&cpu_cdbs->timer_mutex);
 | 
				
			||||||
		dbs_data->enable--;
 | 
					 | 
				
			||||||
		if (!dbs_data->enable) {
 | 
					 | 
				
			||||||
			struct cs_ops *ops = dbs_data->gov_ops;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		sysfs_remove_group(cpufreq_global_kobject,
 | 
							sysfs_remove_group(cpufreq_global_kobject,
 | 
				
			||||||
				dbs_data->attr_group);
 | 
									dbs_data->attr_group);
 | 
				
			||||||
		if (dbs_data->governor == GOV_CONSERVATIVE)
 | 
							if (dbs_data->governor == GOV_CONSERVATIVE)
 | 
				
			||||||
				cpufreq_unregister_notifier(ops->notifier_block,
 | 
								cpufreq_unregister_notifier(cs_ops->notifier_block,
 | 
				
			||||||
					CPUFREQ_TRANSITION_NOTIFIER);
 | 
										CPUFREQ_TRANSITION_NOTIFIER);
 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		mutex_unlock(&dbs_data->mutex);
 | 
							mutex_unlock(&dbs_data->mutex);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		break;
 | 
							break;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -130,7 +130,6 @@ struct dbs_data {
 | 
				
			||||||
	#define GOV_CONSERVATIVE	1
 | 
						#define GOV_CONSERVATIVE	1
 | 
				
			||||||
	int governor;
 | 
						int governor;
 | 
				
			||||||
	unsigned int min_sampling_rate;
 | 
						unsigned int min_sampling_rate;
 | 
				
			||||||
	unsigned int enable; /* number of CPUs using this policy */
 | 
					 | 
				
			||||||
	struct attribute_group *attr_group;
 | 
						struct attribute_group *attr_group;
 | 
				
			||||||
	void *tuners;
 | 
						void *tuners;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue