diff options
-rw-r--r-- | arch/s390/kernel/process.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/s390/kernel/process.c b/arch/s390/kernel/process.c index 3201ae447990..4261aa799774 100644 --- a/arch/s390/kernel/process.c +++ b/arch/s390/kernel/process.c | |||
@@ -76,7 +76,6 @@ static void default_idle(void) | |||
76 | if (test_thread_flag(TIF_MCCK_PENDING)) { | 76 | if (test_thread_flag(TIF_MCCK_PENDING)) { |
77 | local_mcck_enable(); | 77 | local_mcck_enable(); |
78 | local_irq_enable(); | 78 | local_irq_enable(); |
79 | s390_handle_mcck(); | ||
80 | return; | 79 | return; |
81 | } | 80 | } |
82 | trace_hardirqs_on(); | 81 | trace_hardirqs_on(); |
@@ -93,10 +92,12 @@ void cpu_idle(void) | |||
93 | for (;;) { | 92 | for (;;) { |
94 | tick_nohz_idle_enter(); | 93 | tick_nohz_idle_enter(); |
95 | rcu_idle_enter(); | 94 | rcu_idle_enter(); |
96 | while (!need_resched()) | 95 | while (!need_resched() && !test_thread_flag(TIF_MCCK_PENDING)) |
97 | default_idle(); | 96 | default_idle(); |
98 | rcu_idle_exit(); | 97 | rcu_idle_exit(); |
99 | tick_nohz_idle_exit(); | 98 | tick_nohz_idle_exit(); |
99 | if (test_thread_flag(TIF_MCCK_PENDING)) | ||
100 | s390_handle_mcck(); | ||
100 | preempt_enable_no_resched(); | 101 | preempt_enable_no_resched(); |
101 | schedule(); | 102 | schedule(); |
102 | preempt_disable(); | 103 | preempt_disable(); |