|
@@ -76,7 +76,6 @@ static void default_idle(void)
|
|
|
if (test_thread_flag(TIF_MCCK_PENDING)) {
|
|
|
local_mcck_enable();
|
|
|
local_irq_enable();
|
|
|
- s390_handle_mcck();
|
|
|
return;
|
|
|
}
|
|
|
trace_hardirqs_on();
|
|
@@ -93,10 +92,12 @@ void cpu_idle(void)
|
|
|
for (;;) {
|
|
|
tick_nohz_idle_enter();
|
|
|
rcu_idle_enter();
|
|
|
- while (!need_resched())
|
|
|
+ while (!need_resched() && !test_thread_flag(TIF_MCCK_PENDING))
|
|
|
default_idle();
|
|
|
rcu_idle_exit();
|
|
|
tick_nohz_idle_exit();
|
|
|
+ if (test_thread_flag(TIF_MCCK_PENDING))
|
|
|
+ s390_handle_mcck();
|
|
|
preempt_enable_no_resched();
|
|
|
schedule();
|
|
|
preempt_disable();
|