aboutsummaryrefslogtreecommitdiffstats
path: root/arch/s390
diff options
context:
space:
mode:
Diffstat (limited to 'arch/s390')
-rw-r--r--arch/s390/kernel/process.c11
-rw-r--r--arch/s390/kernel/smp.c1
2 files changed, 9 insertions, 3 deletions
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c
index 9f3dff6c0b72..66ca5757e368 100644
--- a/arch/s390/kernel/process.c
+++ b/arch/s390/kernel/process.c
@@ -102,7 +102,6 @@ void default_idle(void)
102 local_irq_disable(); 102 local_irq_disable();
103 if (need_resched()) { 103 if (need_resched()) {
104 local_irq_enable(); 104 local_irq_enable();
105 schedule();
106 return; 105 return;
107 } 106 }
108 107
@@ -139,8 +138,14 @@ void default_idle(void)
139 138
140void cpu_idle(void) 139void cpu_idle(void)
141{ 140{
142 for (;;) 141 for (;;) {
143 default_idle(); 142 while (!need_resched())
143 default_idle();
144
145 preempt_enable_no_resched();
146 schedule();
147 preempt_disable();
148 }
144} 149}
145 150
146void show_regs(struct pt_regs *regs) 151void show_regs(struct pt_regs *regs)
diff --git a/arch/s390/kernel/smp.c b/arch/s390/kernel/smp.c
index e13c87b446b2..5856b3fda6bf 100644
--- a/arch/s390/kernel/smp.c
+++ b/arch/s390/kernel/smp.c
@@ -533,6 +533,7 @@ int __devinit start_secondary(void *cpuvoid)
533{ 533{
534 /* Setup the cpu */ 534 /* Setup the cpu */
535 cpu_init(); 535 cpu_init();
536 preempt_disable();
536 /* init per CPU timer */ 537 /* init per CPU timer */
537 init_cpu_timer(); 538 init_cpu_timer();
538#ifdef CONFIG_VIRT_TIMER 539#ifdef CONFIG_VIRT_TIMER