History

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.

Len Brown committed 16 years ago

Commit 752138d1 parent c0d64cb5 files · +22 −9Browse files

Unified · Split

5 files
  1. drivers/cpuidle/cpuidle.c +7 −5
  2. drivers/cpuidle/cpuidle.h +0 −1
  3. drivers/cpuidle/driver.c +10 −1
  4. drivers/cpuidle/sysfs.c +3 −2
  5. include/linux/cpuidle.h +2 −0
drivers/cpuidle/cpuidle.c+7−5
@@ -156,7 +156,7 @@ int cpuidle_enable_device(struct cpuidle_device *dev) · 155 unmodified lines
156156
157157 if (dev->enabled)
158158 return 0;
159− if (!cpuidle_curr_driver || !cpuidle_curr_governor)
159+ if (!cpuidle_get_driver() || !cpuidle_curr_governor)
160160 return -EIO;
161161 if (!dev->state_count)
162162 return -EINVAL;
@@ -207,7 +207,7 @@ void cpuidle_disable_device(struct cpuidle_device *dev) · 44 unmodified lines
207207 {
208208 if (!dev->enabled)
209209 return;
210− if (!cpuidle_curr_driver || !cpuidle_curr_governor)
210+ if (!cpuidle_get_driver() || !cpuidle_curr_governor)
211211 return;
212212
213213 dev->enabled = 0;
@@ -271,10 +271,11 @@ static int __cpuidle_register_device(struct cpuidle_device *dev) · 57 unmodified lines
271271 {
272272 int ret;
273273 struct sys_device *sys_dev = get_cpu_sysdev((unsigned long)dev->cpu);
274+ struct cpuidle_driver *cpuidle_driver = cpuidle_get_driver();
274275
275276 if (!sys_dev)
276277 return -EINVAL;
277− if (!try_module_get(cpuidle_curr_driver->owner))
278+ if (!try_module_get(cpuidle_driver->owner))
278279 return -EINVAL;
279280
280281 init_completion(&dev->kobj_unregister);
@@ -284,7 +285,7 @@ static int __cpuidle_register_device(struct cpuidle_device *dev) · 3 unmodified lines
284285 per_cpu(cpuidle_devices, dev->cpu) = dev;
285286 list_add(&dev->device_list, &cpuidle_detected_devices);
286287 if ((ret = cpuidle_add_sysfs(sys_dev))) {
287− module_put(cpuidle_curr_driver->owner);
288+ module_put(cpuidle_driver->owner);
288289 return ret;
289290 }
290291
@@ -325,6 +326,7 @@ EXPORT_SYMBOL_GPL(cpuidle_register_device); · 34 unmodified lines
325326 void cpuidle_unregister_device(struct cpuidle_device *dev)
326327 {
327328 struct sys_device *sys_dev = get_cpu_sysdev((unsigned long)dev->cpu);
329+ struct cpuidle_driver *cpuidle_driver = cpuidle_get_driver();
328330
329331 if (dev->registered == 0)
330332 return;
@@ -340,7 +342,7 @@ void cpuidle_unregister_device(struct cpuidle_device *dev) · 9 unmodified lines
340342
341343 cpuidle_resume_and_unlock();
342344
343− module_put(cpuidle_curr_driver->owner);
345+ module_put(cpuidle_driver->owner);
344346 }
345347
346348 EXPORT_SYMBOL_GPL(cpuidle_unregister_device);
drivers/cpuidle/cpuidle.h+0−1
@@ -9,7 +9,6 @@ · 8 unmodified lines
99
1010 /* For internal use only */
1111 extern struct cpuidle_governor *cpuidle_curr_governor;
12−extern struct cpuidle_driver *cpuidle_curr_driver;
1312 extern struct list_head cpuidle_governors;
1413 extern struct list_head cpuidle_detected_devices;
1514 extern struct mutex cpuidle_lock;
drivers/cpuidle/driver.c+10−1
@@ -14,7 +14,7 @@ · 13 unmodified lines
1414
1515 #include "cpuidle.h"
1616
17−struct cpuidle_driver *cpuidle_curr_driver;
17+static struct cpuidle_driver *cpuidle_curr_driver;
1818 DEFINE_SPINLOCK(cpuidle_driver_lock);
1919
2020 /**
@@ -39,6 +39,15 @@ int cpuidle_register_driver(struct cpuidle_driver *drv) · 18 unmodified lines
3939
4040 EXPORT_SYMBOL_GPL(cpuidle_register_driver);
4141
42+/**
43+ * cpuidle_get_driver - return the current driver
44+ */
45+struct cpuidle_driver *cpuidle_get_driver(void)
46+{
47+ return cpuidle_curr_driver;
48+}
49+EXPORT_SYMBOL_GPL(cpuidle_get_driver);
50+
4251 /**
4352 * cpuidle_unregister_driver - unregisters a driver
4453 * @drv: the driver
drivers/cpuidle/sysfs.c+3−2
@@ -47,10 +47,11 @@ static ssize_t show_current_driver(struct sysdev_class *class, · 46 unmodified lines
4747 char *buf)
4848 {
4949 ssize_t ret;
50+ struct cpuidle_driver *cpuidle_driver = cpuidle_get_driver();
5051
5152 spin_lock(&cpuidle_driver_lock);
52− if (cpuidle_curr_driver)
53− ret = sprintf(buf, "%s\n", cpuidle_curr_driver->name);
53+ if (cpuidle_driver)
54+ ret = sprintf(buf, "%s\n", cpuidle_driver->name);
5455 else
5556 ret = sprintf(buf, "none\n");
5657 spin_unlock(&cpuidle_driver_lock);
include/linux/cpuidle.h+2−0
@@ -125,6 +125,7 @@ struct cpuidle_driver { · 124 unmodified lines
125125 #ifdef CONFIG_CPU_IDLE
126126
127127 extern int cpuidle_register_driver(struct cpuidle_driver *drv);
128+struct cpuidle_driver *cpuidle_get_driver(void);
128129 extern void cpuidle_unregister_driver(struct cpuidle_driver *drv);
129130 extern int cpuidle_register_device(struct cpuidle_device *dev);
130131 extern void cpuidle_unregister_device(struct cpuidle_device *dev);
@@ -138,6 +139,7 @@ extern void cpuidle_disable_device(struct cpuidle_device *dev); · 7 unmodified lines
138139
139140 static inline int cpuidle_register_driver(struct cpuidle_driver *drv)
140141 {return -ENODEV; }
142+static inline struct cpuidle_driver *cpuidle_get_driver(void) {return NULL; }
141143 static inline void cpuidle_unregister_driver(struct cpuidle_driver *drv) { }
142144 static inline int cpuidle_register_device(struct cpuidle_device *dev)
143145 {return -ENODEV; }