cpuidle: Check cpuidle_enable_device() return value
authorDaniel Lezcano <daniel.lezcano@linaro.org>
Wed, 12 Jun 2013 13:08:49 +0000 (15:08 +0200)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Mon, 15 Jul 2013 00:09:47 +0000 (02:09 +0200)
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>
drivers/cpuidle/cpuidle.c

index fdc432f18022b331f2102dccf13b539e74fae3ec..4deed977f2094db0058cb480f1911e3c38e41b1d 100644 (file)
@@ -292,15 +292,12 @@ int cpuidle_enable_device(struct cpuidle_device *dev)
        if (!drv || !cpuidle_curr_governor)
                return -EIO;
 
+       if (!dev->registered)
+               return -EINVAL;
+
        if (!dev->state_count)
                dev->state_count = drv->state_count;
 
-       if (dev->registered == 0) {
-               ret = __cpuidle_register_device(dev);
-               if (ret)
-                       return ret;
-       }
-
        poll_idle_init(drv);
 
        ret = cpuidle_add_device_sysfs(dev);
@@ -415,13 +412,17 @@ int cpuidle_register_device(struct cpuidle_device *dev)
                return ret;
        }
 
-       cpuidle_enable_device(dev);
+       ret = cpuidle_enable_device(dev);
+       if (ret) {
+               mutex_unlock(&cpuidle_lock);
+               return ret;
+       }
+
        cpuidle_install_idle_handler();
 
        mutex_unlock(&cpuidle_lock);
 
        return 0;
-
 }
 
 EXPORT_SYMBOL_GPL(cpuidle_register_device);