aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/cpufreq/cpufreq_stats.c22
1 files changed, 9 insertions, 13 deletions
diff --git a/drivers/cpufreq/cpufreq_stats.c b/drivers/cpufreq/cpufreq_stats.c
index c52b44071100..eb214d83ad6b 100644
--- a/drivers/cpufreq/cpufreq_stats.c
+++ b/drivers/cpufreq/cpufreq_stats.c
@@ -180,13 +180,18 @@ static void cpufreq_stats_free_table(unsigned int cpu)
180 cpufreq_cpu_put(policy); 180 cpufreq_cpu_put(policy);
181} 181}
182 182
183static int __cpufreq_stats_create_table(struct cpufreq_policy *policy, 183static int __cpufreq_stats_create_table(struct cpufreq_policy *policy)
184 struct cpufreq_frequency_table *table)
185{ 184{
186 unsigned int i, j, count = 0, ret = 0; 185 unsigned int i, j, count = 0, ret = 0;
187 struct cpufreq_stats *stat; 186 struct cpufreq_stats *stat;
188 unsigned int alloc_size; 187 unsigned int alloc_size;
189 unsigned int cpu = policy->cpu; 188 unsigned int cpu = policy->cpu;
189 struct cpufreq_frequency_table *table;
190
191 table = cpufreq_frequency_get_table(cpu);
192 if (unlikely(!table))
193 return 0;
194
190 if (per_cpu(cpufreq_stats_table, cpu)) 195 if (per_cpu(cpufreq_stats_table, cpu))
191 return -EBUSY; 196 return -EBUSY;
192 stat = kzalloc(sizeof(*stat), GFP_KERNEL); 197 stat = kzalloc(sizeof(*stat), GFP_KERNEL);
@@ -248,7 +253,6 @@ error_out:
248static void cpufreq_stats_create_table(unsigned int cpu) 253static void cpufreq_stats_create_table(unsigned int cpu)
249{ 254{
250 struct cpufreq_policy *policy; 255 struct cpufreq_policy *policy;
251 struct cpufreq_frequency_table *table;
252 256
253 /* 257 /*
254 * "likely(!policy)" because normally cpufreq_stats will be registered 258 * "likely(!policy)" because normally cpufreq_stats will be registered
@@ -258,9 +262,7 @@ static void cpufreq_stats_create_table(unsigned int cpu)
258 if (likely(!policy)) 262 if (likely(!policy))
259 return; 263 return;
260 264
261 table = cpufreq_frequency_get_table(policy->cpu); 265 __cpufreq_stats_create_table(policy);
262 if (likely(table))
263 __cpufreq_stats_create_table(policy, table);
264 266
265 cpufreq_cpu_put(policy); 267 cpufreq_cpu_put(policy);
266} 268}
@@ -283,20 +285,14 @@ static int cpufreq_stat_notifier_policy(struct notifier_block *nb,
283{ 285{
284 int ret = 0; 286 int ret = 0;
285 struct cpufreq_policy *policy = data; 287 struct cpufreq_policy *policy = data;
286 struct cpufreq_frequency_table *table;
287 unsigned int cpu = policy->cpu;
288 288
289 if (val == CPUFREQ_UPDATE_POLICY_CPU) { 289 if (val == CPUFREQ_UPDATE_POLICY_CPU) {
290 cpufreq_stats_update_policy_cpu(policy); 290 cpufreq_stats_update_policy_cpu(policy);
291 return 0; 291 return 0;
292 } 292 }
293 293
294 table = cpufreq_frequency_get_table(cpu);
295 if (!table)
296 return 0;
297
298 if (val == CPUFREQ_CREATE_POLICY) 294 if (val == CPUFREQ_CREATE_POLICY)
299 ret = __cpufreq_stats_create_table(policy, table); 295 ret = __cpufreq_stats_create_table(policy);
300 else if (val == CPUFREQ_REMOVE_POLICY) 296 else if (val == CPUFREQ_REMOVE_POLICY)
301 __cpufreq_stats_free_table(policy); 297 __cpufreq_stats_free_table(policy);
302 298