aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Lezcano <daniel.lezcano@linaro.org>2013-06-12 09:08:49 -0400
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2013-07-14 20:09:47 -0400
commit10b9d3f8a4d5c82bff5b232a0063669dc0e0d725 (patch)
treeb92be09e1776a85c6907b7495988c31c7c13865b
parent137b944e100278d696826cf25c83014ac17473fe (diff)
cpuidle: Check cpuidle_enable_device() return value
We previously changed the ordering of the cpuidle framework initialization so that the governors are registered before the drivers which can register their devices right from the start. Now, we can safely remove the __cpuidle_register_device() call hack in cpuidle_enable_device() and check if the driver has been registered before enabling it. Then, cpuidle_register_device() can consistently check the cpuidle_enable_device() return value when enabling the device. [rjw: Changelog] Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
-rw-r--r--drivers/cpuidle/cpuidle.c17
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c
index fdc432f18022..4deed977f209 100644
--- a/drivers/cpuidle/cpuidle.c
+++ b/drivers/cpuidle/cpuidle.c
@@ -292,15 +292,12 @@ int cpuidle_enable_device(struct cpuidle_device *dev)
292 if (!drv || !cpuidle_curr_governor) 292 if (!drv || !cpuidle_curr_governor)
293 return -EIO; 293 return -EIO;
294 294
295 if (!dev->registered)
296 return -EINVAL;
297
295 if (!dev->state_count) 298 if (!dev->state_count)
296 dev->state_count = drv->state_count; 299 dev->state_count = drv->state_count;
297 300
298 if (dev->registered == 0) {
299 ret = __cpuidle_register_device(dev);
300 if (ret)
301 return ret;
302 }
303
304 poll_idle_init(drv); 301 poll_idle_init(drv);
305 302
306 ret = cpuidle_add_device_sysfs(dev); 303 ret = cpuidle_add_device_sysfs(dev);
@@ -415,13 +412,17 @@ int cpuidle_register_device(struct cpuidle_device *dev)
415 return ret; 412 return ret;
416 } 413 }
417 414
418 cpuidle_enable_device(dev); 415 ret = cpuidle_enable_device(dev);
416 if (ret) {
417 mutex_unlock(&cpuidle_lock);
418 return ret;
419 }
420
419 cpuidle_install_idle_handler(); 421 cpuidle_install_idle_handler();
420 422
421 mutex_unlock(&cpuidle_lock); 423 mutex_unlock(&cpuidle_lock);
422 424
423 return 0; 425 return 0;
424
425} 426}
426 427
427EXPORT_SYMBOL_GPL(cpuidle_register_device); 428EXPORT_SYMBOL_GPL(cpuidle_register_device);