diff options
Diffstat (limited to 'cpu-exec.c')
-rw-r--r-- | cpu-exec.c | 26 |
1 files changed, 6 insertions, 20 deletions
diff --git a/cpu-exec.c b/cpu-exec.c index 634f1ba875..d124c4059b 100644 --- a/cpu-exec.c +++ b/cpu-exec.c @@ -256,8 +256,7 @@ int cpu_exec(CPUState *env1) #elif defined(TARGET_PPC) if (env1->halted) { if (env1->msr[MSR_EE] && - (env1->interrupt_request & - (CPU_INTERRUPT_HARD | CPU_INTERRUPT_TIMER))) { + (env1->interrupt_request & CPU_INTERRUPT_HARD)) { env1->halted = 0; } else { return EXCP_HALTED; @@ -448,24 +447,11 @@ int cpu_exec(CPUState *env1) cpu_ppc_reset(env); } #endif - if (msr_ee != 0) { - if ((interrupt_request & CPU_INTERRUPT_HARD)) { - /* Raise it */ - env->exception_index = EXCP_EXTERNAL; - env->error_code = 0; - do_interrupt(env); - env->interrupt_request &= ~CPU_INTERRUPT_HARD; -#if defined(__sparc__) && !defined(HOST_SOLARIS) - tmp_T0 = 0; -#else - T0 = 0; -#endif - } else if ((interrupt_request & CPU_INTERRUPT_TIMER)) { - /* Raise it */ - env->exception_index = EXCP_DECR; - env->error_code = 0; - do_interrupt(env); - env->interrupt_request &= ~CPU_INTERRUPT_TIMER; + if (interrupt_request & CPU_INTERRUPT_HARD) { + if (ppc_hw_interrupt(env) == 1) { + /* Some exception was raised */ + if (env->pending_interrupts == 0) + env->interrupt_request &= ~CPU_INTERRUPT_HARD; #if defined(__sparc__) && !defined(HOST_SOLARIS) tmp_T0 = 0; #else |