diff options
author | Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> | 2013-12-20 13:47:25 -0500 |
---|---|---|
committer | Rafael J. Wysocki <rafael.j.wysocki@intel.com> | 2014-01-10 19:26:48 -0500 |
commit | 7f74dc0f4f5fdb745d62ab2e8f6c60cd9e59a1ac (patch) | |
tree | 2cd3ed4e2dc6dd8de95c7af7c4534fa6379cc312 /arch/powerpc/platforms/pseries | |
parent | 33e7312529f4208831938f30ead67a7c2251560d (diff) |
POWERPC: pseries: cpuidle: use the common cpuidle_[un]register() routines
It is now possible to use the common cpuidle_[un]register() routines
(instead of open-coding them) so do it.
Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>
Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com>
Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
Acked-by: Deepthi Dharwar <deepthi@linux.vnet.ibm.com>
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
Diffstat (limited to 'arch/powerpc/platforms/pseries')
-rw-r--r-- | arch/powerpc/platforms/pseries/processor_idle.c | 57 |
1 files changed, 3 insertions, 54 deletions
diff --git a/arch/powerpc/platforms/pseries/processor_idle.c b/arch/powerpc/platforms/pseries/processor_idle.c index 8aa8c40008b3..94134a5aecaa 100644 --- a/arch/powerpc/platforms/pseries/processor_idle.c +++ b/arch/powerpc/platforms/pseries/processor_idle.c | |||
@@ -28,7 +28,6 @@ struct cpuidle_driver pseries_idle_driver = { | |||
28 | #define MAX_IDLE_STATE_COUNT 2 | 28 | #define MAX_IDLE_STATE_COUNT 2 |
29 | 29 | ||
30 | static int max_idle_state = MAX_IDLE_STATE_COUNT - 1; | 30 | static int max_idle_state = MAX_IDLE_STATE_COUNT - 1; |
31 | static struct cpuidle_device __percpu *pseries_cpuidle_devices; | ||
32 | static struct cpuidle_state *cpuidle_state_table; | 31 | static struct cpuidle_state *cpuidle_state_table; |
33 | 32 | ||
34 | static inline void idle_loop_prolog(unsigned long *in_purr) | 33 | static inline void idle_loop_prolog(unsigned long *in_purr) |
@@ -191,7 +190,7 @@ static int pseries_cpuidle_add_cpu_notifier(struct notifier_block *n, | |||
191 | { | 190 | { |
192 | int hotcpu = (unsigned long)hcpu; | 191 | int hotcpu = (unsigned long)hcpu; |
193 | struct cpuidle_device *dev = | 192 | struct cpuidle_device *dev = |
194 | per_cpu_ptr(pseries_cpuidle_devices, hotcpu); | 193 | per_cpu_ptr(cpuidle_devices, hotcpu); |
195 | 194 | ||
196 | if (dev && cpuidle_get_driver()) { | 195 | if (dev && cpuidle_get_driver()) { |
197 | switch (action) { | 196 | switch (action) { |
@@ -248,48 +247,6 @@ static int pseries_cpuidle_driver_init(void) | |||
248 | return 0; | 247 | return 0; |
249 | } | 248 | } |
250 | 249 | ||
251 | /* pseries_idle_devices_uninit(void) | ||
252 | * unregister cpuidle devices and de-allocate memory | ||
253 | */ | ||
254 | static void pseries_idle_devices_uninit(void) | ||
255 | { | ||
256 | int i; | ||
257 | struct cpuidle_device *dev; | ||
258 | |||
259 | for_each_possible_cpu(i) { | ||
260 | dev = per_cpu_ptr(pseries_cpuidle_devices, i); | ||
261 | cpuidle_unregister_device(dev); | ||
262 | } | ||
263 | |||
264 | free_percpu(pseries_cpuidle_devices); | ||
265 | return; | ||
266 | } | ||
267 | |||
268 | /* pseries_idle_devices_init() | ||
269 | * allocate, initialize and register cpuidle device | ||
270 | */ | ||
271 | static int pseries_idle_devices_init(void) | ||
272 | { | ||
273 | int i; | ||
274 | struct cpuidle_device *dev; | ||
275 | |||
276 | pseries_cpuidle_devices = alloc_percpu(struct cpuidle_device); | ||
277 | if (pseries_cpuidle_devices == NULL) | ||
278 | return -ENOMEM; | ||
279 | |||
280 | for_each_possible_cpu(i) { | ||
281 | dev = per_cpu_ptr(pseries_cpuidle_devices, i); | ||
282 | dev->cpu = i; | ||
283 | if (cpuidle_register_device(dev)) { | ||
284 | printk(KERN_DEBUG \ | ||
285 | "cpuidle_register_device %d failed!\n", i); | ||
286 | return -EIO; | ||
287 | } | ||
288 | } | ||
289 | |||
290 | return 0; | ||
291 | } | ||
292 | |||
293 | /* | 250 | /* |
294 | * pseries_idle_probe() | 251 | * pseries_idle_probe() |
295 | * Choose state table for shared versus dedicated partition | 252 | * Choose state table for shared versus dedicated partition |
@@ -325,19 +282,12 @@ static int __init pseries_processor_idle_init(void) | |||
325 | return retval; | 282 | return retval; |
326 | 283 | ||
327 | pseries_cpuidle_driver_init(); | 284 | pseries_cpuidle_driver_init(); |
328 | retval = cpuidle_register_driver(&pseries_idle_driver); | 285 | retval = cpuidle_register(&pseries_idle_driver, NULL); |
329 | if (retval) { | 286 | if (retval) { |
330 | printk(KERN_DEBUG "Registration of pseries driver failed.\n"); | 287 | printk(KERN_DEBUG "Registration of pseries driver failed.\n"); |
331 | return retval; | 288 | return retval; |
332 | } | 289 | } |
333 | 290 | ||
334 | retval = pseries_idle_devices_init(); | ||
335 | if (retval) { | ||
336 | pseries_idle_devices_uninit(); | ||
337 | cpuidle_unregister_driver(&pseries_idle_driver); | ||
338 | return retval; | ||
339 | } | ||
340 | |||
341 | register_cpu_notifier(&setup_hotplug_notifier); | 291 | register_cpu_notifier(&setup_hotplug_notifier); |
342 | printk(KERN_DEBUG "pseries_idle_driver registered\n"); | 292 | printk(KERN_DEBUG "pseries_idle_driver registered\n"); |
343 | 293 | ||
@@ -348,8 +298,7 @@ static void __exit pseries_processor_idle_exit(void) | |||
348 | { | 298 | { |
349 | 299 | ||
350 | unregister_cpu_notifier(&setup_hotplug_notifier); | 300 | unregister_cpu_notifier(&setup_hotplug_notifier); |
351 | pseries_idle_devices_uninit(); | 301 | cpuidle_unregister(&pseries_idle_driver); |
352 | cpuidle_unregister_driver(&pseries_idle_driver); | ||
353 | 302 | ||
354 | return; | 303 | return; |
355 | } | 304 | } |