Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 09dca5ae authored by Fabio Baltieri's avatar Fabio Baltieri Committed by Rafael J. Wysocki
Browse files

cpufreq: governors: fix misuse of cdbs.cpu



Fix governors code to set all cpu's cdbs->cpu to the the actual cpu id
and use cur_policy->cpu istead of cdbs->cpu to track current governor's
leader cpu.

Reported-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarFabio Baltieri <fabio.baltieri@linaro.org>
Acked-by: default avatarViresh Kumar <viresh.kumar@linaro.org>
Signed-off-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
parent 2624f90c
Loading
Loading
Loading
Loading
+3 −2
Original line number Original line Diff line number Diff line
@@ -114,7 +114,7 @@ static void cs_check_cpu(int cpu, unsigned int load)
static void cs_timer_update(struct cs_cpu_dbs_info_s *dbs_info, bool sample,
static void cs_timer_update(struct cs_cpu_dbs_info_s *dbs_info, bool sample,
			    struct delayed_work *dw)
			    struct delayed_work *dw)
{
{
	unsigned int cpu = dbs_info->cdbs.cpu;
	unsigned int cpu = dbs_info->cdbs.cur_policy->cpu;
	int delay = delay_for_sampling_rate(cs_tuners.sampling_rate);
	int delay = delay_for_sampling_rate(cs_tuners.sampling_rate);


	if (sample)
	if (sample)
@@ -132,7 +132,8 @@ static void cs_timer_coordinated(struct cs_cpu_dbs_info_s *dbs_info_local,
	bool sample = true;
	bool sample = true;


	/* use leader CPU's dbs_info */
	/* use leader CPU's dbs_info */
	dbs_info = &per_cpu(cs_cpu_dbs_info, dbs_info_local->cdbs.cpu);
	dbs_info = &per_cpu(cs_cpu_dbs_info,
			    dbs_info_local->cdbs.cur_policy->cpu);
	mutex_lock(&dbs_info->cdbs.timer_mutex);
	mutex_lock(&dbs_info->cdbs.timer_mutex);


	time_now = ktime_get();
	time_now = ktime_get();
+1 −1
Original line number Original line Diff line number Diff line
@@ -208,11 +208,11 @@ int cpufreq_governor_dbs(struct dbs_data *dbs_data,
		mutex_lock(&dbs_data->mutex);
		mutex_lock(&dbs_data->mutex);


		dbs_data->enable++;
		dbs_data->enable++;
		cpu_cdbs->cpu = cpu;
		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);
			j_cdbs = dbs_data->get_cpu_cdbs(j);


			j_cdbs->cpu = j;
			j_cdbs->cur_policy = policy;
			j_cdbs->cur_policy = policy;
			j_cdbs->prev_cpu_idle = get_cpu_idle_time(j,
			j_cdbs->prev_cpu_idle = get_cpu_idle_time(j,
					&j_cdbs->prev_cpu_wall);
					&j_cdbs->prev_cpu_wall);
+3 −2
Original line number Original line Diff line number Diff line
@@ -219,7 +219,7 @@ static void od_check_cpu(int cpu, unsigned int load_freq)
static void od_timer_update(struct od_cpu_dbs_info_s *dbs_info, bool sample,
static void od_timer_update(struct od_cpu_dbs_info_s *dbs_info, bool sample,
			    struct delayed_work *dw)
			    struct delayed_work *dw)
{
{
	unsigned int cpu = dbs_info->cdbs.cpu;
	unsigned int cpu = dbs_info->cdbs.cur_policy->cpu;
	int delay, sample_type = dbs_info->sample_type;
	int delay, sample_type = dbs_info->sample_type;


	/* Common NORMAL_SAMPLE setup */
	/* Common NORMAL_SAMPLE setup */
@@ -255,7 +255,8 @@ static void od_timer_coordinated(struct od_cpu_dbs_info_s *dbs_info_local,
	bool sample = true;
	bool sample = true;


	/* use leader CPU's dbs_info */
	/* use leader CPU's dbs_info */
	dbs_info = &per_cpu(od_cpu_dbs_info, dbs_info_local->cdbs.cpu);
	dbs_info = &per_cpu(od_cpu_dbs_info,
			    dbs_info_local->cdbs.cur_policy->cpu);
	mutex_lock(&dbs_info->cdbs.timer_mutex);
	mutex_lock(&dbs_info->cdbs.timer_mutex);


	time_now = ktime_get();
	time_now = ktime_get();