Skip to content

Commit

Permalink
cpufreq: fix NULL pointer deference at od_set_powersave_bias()
Browse files Browse the repository at this point in the history
When initializing the default powersave_bias value, we need to first
make sure that this policy is running the ondemand governor.

Reported-and-tested-by: Tim Gardner <tim.gardner@canonical.com>
Signed-off-by: Jacob Shin <jacob.shin@amd.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
  • Loading branch information
Jacob Shin authored and Rafael J. Wysocki committed Jun 25, 2013
1 parent 9e895ac commit c283755
Showing 1 changed file with 13 additions and 4 deletions.
17 changes: 13 additions & 4 deletions drivers/cpufreq/cpufreq_ondemand.c
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,8 @@ static struct od_ops od_ops;
static struct cpufreq_governor cpufreq_gov_ondemand;
#endif

static unsigned int default_powersave_bias;

static void ondemand_powersave_bias_init_cpu(int cpu)
{
struct od_cpu_dbs_info_s *dbs_info = &per_cpu(od_cpu_dbs_info, cpu);
Expand Down Expand Up @@ -543,7 +545,7 @@ static int od_init(struct dbs_data *dbs_data)

tuners->sampling_down_factor = DEF_SAMPLING_DOWN_FACTOR;
tuners->ignore_nice = 0;
tuners->powersave_bias = 0;
tuners->powersave_bias = default_powersave_bias;
tuners->io_is_busy = should_io_be_busy();

dbs_data->tuners = tuners;
Expand Down Expand Up @@ -585,6 +587,7 @@ static void od_set_powersave_bias(unsigned int powersave_bias)
unsigned int cpu;
cpumask_t done;

default_powersave_bias = powersave_bias;
cpumask_clear(&done);

get_online_cpus();
Expand All @@ -593,11 +596,17 @@ static void od_set_powersave_bias(unsigned int powersave_bias)
continue;

policy = per_cpu(od_cpu_dbs_info, cpu).cdbs.cur_policy;
dbs_data = policy->governor_data;
od_tuners = dbs_data->tuners;
od_tuners->powersave_bias = powersave_bias;
if (!policy)
continue;

cpumask_or(&done, &done, policy->cpus);

if (policy->governor != &cpufreq_gov_ondemand)
continue;

dbs_data = policy->governor_data;
od_tuners = dbs_data->tuners;
od_tuners->powersave_bias = default_powersave_bias;
}
put_online_cpus();
}
Expand Down

0 comments on commit c283755

Please sign in to comment.