Signed-off-by: Serge Vakulenko <se...@vak.ru> --- target-mips/op_helper.c | 7 +++++++ 1 file changed, 7 insertions(+)
diff --git a/target-mips/op_helper.c b/target-mips/op_helper.c index 2a9ddff..1b7caeb 100644 --- a/target-mips/op_helper.c +++ b/target-mips/op_helper.c @@ -22,6 +22,7 @@ #include "exec/helper-proto.h" #include "exec/cpu_ldst.h" #include "sysemu/kvm.h" +#include "sysemu/sysemu.h" #ifndef CONFIG_USER_ONLY static inline void cpu_mips_tlb_flush (CPUMIPSState *env, int flush_global); @@ -2235,6 +2236,12 @@ void helper_wait(CPUMIPSState *env) { CPUState *cs = CPU(mips_env_get_cpu(env)); +#ifndef CONFIG_USER_ONLY + if (!(env->CP0_Status & (1 << CP0St_IE))) { + /* WAIT instruction with interrupts disabled - halt the simulation. */ + qemu_system_shutdown_request(); + } +#endif cs->halted = 1; cpu_reset_interrupt(cs, CPU_INTERRUPT_WAKE); helper_raise_exception(env, EXCP_HLT); -- 1.9.1