forked from Minki/linux
cpuidle: make cpuidle_curr_driver static
cpuidle_register_driver() sets cpuidle_curr_driver cpuidle_unregister_driver() clears cpuidle_curr_driver We should't expose cpuidle_curr_driver to potential modification except via these interfaces. So make it static and create cpuidle_get_driver() to observe it. Signed-off-by: Len Brown <len.brown@intel.com>
This commit is contained in:
parent
c0d64cb031
commit
752138df0d
@ -156,7 +156,7 @@ int cpuidle_enable_device(struct cpuidle_device *dev)
|
||||
|
||||
if (dev->enabled)
|
||||
return 0;
|
||||
if (!cpuidle_curr_driver || !cpuidle_curr_governor)
|
||||
if (!cpuidle_get_driver() || !cpuidle_curr_governor)
|
||||
return -EIO;
|
||||
if (!dev->state_count)
|
||||
return -EINVAL;
|
||||
@ -207,7 +207,7 @@ void cpuidle_disable_device(struct cpuidle_device *dev)
|
||||
{
|
||||
if (!dev->enabled)
|
||||
return;
|
||||
if (!cpuidle_curr_driver || !cpuidle_curr_governor)
|
||||
if (!cpuidle_get_driver() || !cpuidle_curr_governor)
|
||||
return;
|
||||
|
||||
dev->enabled = 0;
|
||||
@ -271,10 +271,11 @@ static int __cpuidle_register_device(struct cpuidle_device *dev)
|
||||
{
|
||||
int ret;
|
||||
struct sys_device *sys_dev = get_cpu_sysdev((unsigned long)dev->cpu);
|
||||
struct cpuidle_driver *cpuidle_driver = cpuidle_get_driver();
|
||||
|
||||
if (!sys_dev)
|
||||
return -EINVAL;
|
||||
if (!try_module_get(cpuidle_curr_driver->owner))
|
||||
if (!try_module_get(cpuidle_driver->owner))
|
||||
return -EINVAL;
|
||||
|
||||
init_completion(&dev->kobj_unregister);
|
||||
@ -284,7 +285,7 @@ static int __cpuidle_register_device(struct cpuidle_device *dev)
|
||||
per_cpu(cpuidle_devices, dev->cpu) = dev;
|
||||
list_add(&dev->device_list, &cpuidle_detected_devices);
|
||||
if ((ret = cpuidle_add_sysfs(sys_dev))) {
|
||||
module_put(cpuidle_curr_driver->owner);
|
||||
module_put(cpuidle_driver->owner);
|
||||
return ret;
|
||||
}
|
||||
|
||||
@ -325,6 +326,7 @@ EXPORT_SYMBOL_GPL(cpuidle_register_device);
|
||||
void cpuidle_unregister_device(struct cpuidle_device *dev)
|
||||
{
|
||||
struct sys_device *sys_dev = get_cpu_sysdev((unsigned long)dev->cpu);
|
||||
struct cpuidle_driver *cpuidle_driver = cpuidle_get_driver();
|
||||
|
||||
if (dev->registered == 0)
|
||||
return;
|
||||
@ -340,7 +342,7 @@ void cpuidle_unregister_device(struct cpuidle_device *dev)
|
||||
|
||||
cpuidle_resume_and_unlock();
|
||||
|
||||
module_put(cpuidle_curr_driver->owner);
|
||||
module_put(cpuidle_driver->owner);
|
||||
}
|
||||
|
||||
EXPORT_SYMBOL_GPL(cpuidle_unregister_device);
|
||||
|
@ -9,7 +9,6 @@
|
||||
|
||||
/* For internal use only */
|
||||
extern struct cpuidle_governor *cpuidle_curr_governor;
|
||||
extern struct cpuidle_driver *cpuidle_curr_driver;
|
||||
extern struct list_head cpuidle_governors;
|
||||
extern struct list_head cpuidle_detected_devices;
|
||||
extern struct mutex cpuidle_lock;
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
#include "cpuidle.h"
|
||||
|
||||
struct cpuidle_driver *cpuidle_curr_driver;
|
||||
static struct cpuidle_driver *cpuidle_curr_driver;
|
||||
DEFINE_SPINLOCK(cpuidle_driver_lock);
|
||||
|
||||
/**
|
||||
@ -39,6 +39,15 @@ int cpuidle_register_driver(struct cpuidle_driver *drv)
|
||||
|
||||
EXPORT_SYMBOL_GPL(cpuidle_register_driver);
|
||||
|
||||
/**
|
||||
* cpuidle_get_driver - return the current driver
|
||||
*/
|
||||
struct cpuidle_driver *cpuidle_get_driver(void)
|
||||
{
|
||||
return cpuidle_curr_driver;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(cpuidle_get_driver);
|
||||
|
||||
/**
|
||||
* cpuidle_unregister_driver - unregisters a driver
|
||||
* @drv: the driver
|
||||
|
@ -47,10 +47,11 @@ static ssize_t show_current_driver(struct sysdev_class *class,
|
||||
char *buf)
|
||||
{
|
||||
ssize_t ret;
|
||||
struct cpuidle_driver *cpuidle_driver = cpuidle_get_driver();
|
||||
|
||||
spin_lock(&cpuidle_driver_lock);
|
||||
if (cpuidle_curr_driver)
|
||||
ret = sprintf(buf, "%s\n", cpuidle_curr_driver->name);
|
||||
if (cpuidle_driver)
|
||||
ret = sprintf(buf, "%s\n", cpuidle_driver->name);
|
||||
else
|
||||
ret = sprintf(buf, "none\n");
|
||||
spin_unlock(&cpuidle_driver_lock);
|
||||
|
@ -125,6 +125,7 @@ struct cpuidle_driver {
|
||||
#ifdef CONFIG_CPU_IDLE
|
||||
|
||||
extern int cpuidle_register_driver(struct cpuidle_driver *drv);
|
||||
struct cpuidle_driver *cpuidle_get_driver(void);
|
||||
extern void cpuidle_unregister_driver(struct cpuidle_driver *drv);
|
||||
extern int cpuidle_register_device(struct cpuidle_device *dev);
|
||||
extern void cpuidle_unregister_device(struct cpuidle_device *dev);
|
||||
@ -138,6 +139,7 @@ extern void cpuidle_disable_device(struct cpuidle_device *dev);
|
||||
|
||||
static inline int cpuidle_register_driver(struct cpuidle_driver *drv)
|
||||
{return -ENODEV; }
|
||||
static inline struct cpuidle_driver *cpuidle_get_driver(void) {return NULL; }
|
||||
static inline void cpuidle_unregister_driver(struct cpuidle_driver *drv) { }
|
||||
static inline int cpuidle_register_device(struct cpuidle_device *dev)
|
||||
{return -ENODEV; }
|
||||
|
Loading…
Reference in New Issue
Block a user