aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/platforms/pseries
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com>2013-12-20 13:47:25 -0500
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>2014-01-10 19:26:48 -0500
commit7f74dc0f4f5fdb745d62ab2e8f6c60cd9e59a1ac (patch)
tree2cd3ed4e2dc6dd8de95c7af7c4534fa6379cc312 /arch/powerpc/platforms/pseries
parent33e7312529f4208831938f30ead67a7c2251560d (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.c57
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
30static int max_idle_state = MAX_IDLE_STATE_COUNT - 1; 30static int max_idle_state = MAX_IDLE_STATE_COUNT - 1;
31static struct cpuidle_device __percpu *pseries_cpuidle_devices;
32static struct cpuidle_state *cpuidle_state_table; 31static struct cpuidle_state *cpuidle_state_table;
33 32
34static inline void idle_loop_prolog(unsigned long *in_purr) 33static 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 */
254static 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 */
271static 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}