forked from luck/tmp_suning_uos_patched
[S390] idle: Fix machine check handling in idle loop.
If a machine check handling is pending when the idle loop is entered default_idle will be left with timer ticks and virtual timer disabled. Fix this by "calling" the idle_chain. Also a BUG_ON(!in_interrupt) in start_hz_timer must be removed since the function now gets called from non interrupt context as well. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com> Signed-off-by: Martin Schwidefsky <schwidefsky@de.ibm.com>
This commit is contained in:
parent
9361a492cd
commit
5ccd0e43bb
|
@ -152,6 +152,10 @@ static void default_idle(void)
|
||||||
local_mcck_disable();
|
local_mcck_disable();
|
||||||
if (test_thread_flag(TIF_MCCK_PENDING)) {
|
if (test_thread_flag(TIF_MCCK_PENDING)) {
|
||||||
local_mcck_enable();
|
local_mcck_enable();
|
||||||
|
/* disable monitor call class 0 */
|
||||||
|
__ctl_clear_bit(8, 15);
|
||||||
|
atomic_notifier_call_chain(&idle_chain, S390_CPU_NOT_IDLE,
|
||||||
|
hcpu);
|
||||||
local_irq_enable();
|
local_irq_enable();
|
||||||
s390_handle_mcck();
|
s390_handle_mcck();
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -209,8 +209,6 @@ static void stop_hz_timer(void)
|
||||||
*/
|
*/
|
||||||
static void start_hz_timer(void)
|
static void start_hz_timer(void)
|
||||||
{
|
{
|
||||||
BUG_ON(!in_interrupt());
|
|
||||||
|
|
||||||
if (!cpu_isset(smp_processor_id(), nohz_cpu_mask))
|
if (!cpu_isset(smp_processor_id(), nohz_cpu_mask))
|
||||||
return;
|
return;
|
||||||
account_ticks(get_clock());
|
account_ticks(get_clock());
|
||||||
|
|
Loading…
Reference in New Issue
Block a user