diff options
-rw-r--r-- | drivers/cpufreq/cpufreq_stats.c | 22 |
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 | ||
183 | static int __cpufreq_stats_create_table(struct cpufreq_policy *policy, | 183 | static 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: | |||
248 | static void cpufreq_stats_create_table(unsigned int cpu) | 253 | static 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 | ||