If the state_count is not initialized for the device use the driver's state count as the default. That will prevent to add it manually in the cpuidle driver initialization routine and will save us from duplicate line of code.
Signed-off-by: Daniel Lezcano daniel.lezcano@linaro.org --- drivers/cpuidle/cpuidle.c | 2 +- drivers/cpuidle/driver.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/drivers/cpuidle/cpuidle.c b/drivers/cpuidle/cpuidle.c index 27f77a4..b8a1faf 100644 --- a/drivers/cpuidle/cpuidle.c +++ b/drivers/cpuidle/cpuidle.c @@ -268,7 +268,7 @@ int cpuidle_enable_device(struct cpuidle_device *dev) if (!drv || !cpuidle_curr_governor) return -EIO; if (!dev->state_count) - return -EINVAL; + dev->state_count = drv->state_count;
if (dev->registered == 0) { ret = __cpuidle_register_device(dev); diff --git a/drivers/cpuidle/driver.c b/drivers/cpuidle/driver.c index 284d7af..40cd3f3 100644 --- a/drivers/cpuidle/driver.c +++ b/drivers/cpuidle/driver.c @@ -47,7 +47,7 @@ static void __cpuidle_register_driver(struct cpuidle_driver *drv) */ int cpuidle_register_driver(struct cpuidle_driver *drv) { - if (!drv) + if (!drv || !drv->state_count) return -EINVAL;
if (cpuidle_disabled())
All the modules name are ro-data, it is never copied to the array.
eg.
static struct cpuidle_driver intel_idle_driver = { .name = "intel_idle", .owner = THIS_MODULE, };
It safe to assign the pointer of this ro-data to a const char *. By this way we save 12 bytes.
Signed-off-by: Daniel Lezcano daniel.lezcano@linaro.org Acked-by: Deepthi Dharwar deepthi@linux.vnet.ibm.com Tested-by: Deepthi Dharwar deepthi@linux.vnet.ibm.com --- include/linux/cpuidle.h | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h index ca4e498..f7f1d90 100644 --- a/include/linux/cpuidle.h +++ b/include/linux/cpuidle.h @@ -120,7 +120,7 @@ static inline int cpuidle_get_last_residency(struct cpuidle_device *dev) ****************************/
struct cpuidle_driver { - char name[CPUIDLE_NAME_LEN]; + const char *name; struct module *owner;
unsigned int power_specified:1;
As far as I can see, this field is never used in the code.
Signed-off-by: Daniel Lezcano daniel.lezcano@linaro.org --- include/linux/cpuidle.h | 1 - 1 files changed, 0 insertions(+), 1 deletions(-)
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h index f7f1d90..f3ebbba 100644 --- a/include/linux/cpuidle.h +++ b/include/linux/cpuidle.h @@ -98,7 +98,6 @@ struct cpuidle_device { struct list_head device_list; struct kobject kobj; struct completion kobj_unregister; - void *governor_data; };
DECLARE_PER_CPU(struct cpuidle_device *, cpuidle_devices);