aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ppc/kernel/idle.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ppc/kernel/idle.c')
-rw-r--r--arch/ppc/kernel/idle.c17
1 files changed, 12 insertions, 5 deletions
diff --git a/arch/ppc/kernel/idle.c b/arch/ppc/kernel/idle.c
index 11e5b44713f7..a6141f05c919 100644
--- a/arch/ppc/kernel/idle.c
+++ b/arch/ppc/kernel/idle.c
@@ -53,10 +53,6 @@ void default_idle(void)
53 } 53 }
54#endif 54#endif
55 } 55 }
56 if (need_resched())
57 schedule();
58 if (cpu_is_offline(cpu) && system_state == SYSTEM_RUNNING)
59 cpu_die();
60} 56}
61 57
62/* 58/*
@@ -64,11 +60,22 @@ void default_idle(void)
64 */ 60 */
65void cpu_idle(void) 61void cpu_idle(void)
66{ 62{
67 for (;;) 63 int cpu = smp_processor_id();
64
65 for (;;) {
68 if (ppc_md.idle != NULL) 66 if (ppc_md.idle != NULL)
69 ppc_md.idle(); 67 ppc_md.idle();
70 else 68 else
71 default_idle(); 69 default_idle();
70 if (cpu_is_offline(cpu) && system_state == SYSTEM_RUNNING)
71 cpu_die();
72 if (need_resched()) {
73 preempt_enable_no_resched();
74 schedule();
75 preempt_disable();
76 }
77
78 }
72} 79}
73 80
74#if defined(CONFIG_SYSCTL) && defined(CONFIG_6xx) 81#if defined(CONFIG_SYSCTL) && defined(CONFIG_6xx)