diff options
-rw-r--r-- | drivers/cpuidle/cpuidle.c | 20 |
1 files changed, 13 insertions, 7 deletions
diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c index d78c6d89272f..5b63185da59b 100644 --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c | |||
@@ -276,7 +276,7 @@ static void poll_idle_init(struct cpuidle_driver *drv) {} | |||
276 | */ | 276 | */ |
277 | int cpuidle_enable_device(struct cpuidle_device *dev) | 277 | int cpuidle_enable_device(struct cpuidle_device *dev) |
278 | { | 278 | { |
279 | int ret, i; | 279 | int ret; |
280 | struct cpuidle_driver *drv; | 280 | struct cpuidle_driver *drv; |
281 | 281 | ||
282 | if (!dev) | 282 | if (!dev) |
@@ -306,12 +306,6 @@ int cpuidle_enable_device(struct cpuidle_device *dev) | |||
306 | (ret = cpuidle_curr_governor->enable(drv, dev))) | 306 | (ret = cpuidle_curr_governor->enable(drv, dev))) |
307 | goto fail_sysfs; | 307 | goto fail_sysfs; |
308 | 308 | ||
309 | for (i = 0; i < dev->state_count; i++) { | ||
310 | dev->states_usage[i].usage = 0; | ||
311 | dev->states_usage[i].time = 0; | ||
312 | } | ||
313 | dev->last_residency = 0; | ||
314 | |||
315 | smp_wmb(); | 309 | smp_wmb(); |
316 | 310 | ||
317 | dev->enabled = 1; | 311 | dev->enabled = 1; |
@@ -364,6 +358,14 @@ static void __cpuidle_unregister_device(struct cpuidle_device *dev) | |||
364 | module_put(drv->owner); | 358 | module_put(drv->owner); |
365 | } | 359 | } |
366 | 360 | ||
361 | static int __cpuidle_device_init(struct cpuidle_device *dev) | ||
362 | { | ||
363 | memset(dev->states_usage, 0, sizeof(dev->states_usage)); | ||
364 | dev->last_residency = 0; | ||
365 | |||
366 | return 0; | ||
367 | } | ||
368 | |||
367 | /** | 369 | /** |
368 | * __cpuidle_register_device - internal register function called before register | 370 | * __cpuidle_register_device - internal register function called before register |
369 | * and enable routines | 371 | * and enable routines |
@@ -405,6 +407,10 @@ int cpuidle_register_device(struct cpuidle_device *dev) | |||
405 | 407 | ||
406 | mutex_lock(&cpuidle_lock); | 408 | mutex_lock(&cpuidle_lock); |
407 | 409 | ||
410 | ret = __cpuidle_device_init(dev); | ||
411 | if (ret) | ||
412 | goto out_unlock; | ||
413 | |||
408 | ret = __cpuidle_register_device(dev); | 414 | ret = __cpuidle_register_device(dev); |
409 | if (ret) | 415 | if (ret) |
410 | goto out_unlock; | 416 | goto out_unlock; |