diff --git a/cpu-exec.c b/cpu-exec.c index c6db5adf5e6eb523fe38a5878ca813e0fe0afe6c..2c77b923fd67eeec738db84c7a4f2f44974ee38e 100644 --- a/cpu-exec.c +++ b/cpu-exec.c @@ -369,16 +369,8 @@ int cpu_exec(CPUState *env1) #endif if (kvm_enabled()) { - int ret; - ret = kvm_cpu_exec(env); - if ((env->interrupt_request & CPU_INTERRUPT_EXIT)) { - env->interrupt_request &= ~CPU_INTERRUPT_EXIT; - env->exception_index = EXCP_INTERRUPT; - cpu_loop_exit(); - } else if (env->halted) { - cpu_loop_exit(); - } else - longjmp(env->jmp_env, 1); + kvm_cpu_exec(env); + longjmp(env->jmp_env, 1); } next_tb = 0; /* force lookup of first TB */ diff --git a/kvm-all.c b/kvm-all.c index c3a46e2438b40ef9dd29736ef32fca721661d23b..8575a4dee222aaf20224c06b4f5196f4baaab4cc 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -298,6 +298,11 @@ int kvm_cpu_exec(CPUState *env) } } while (ret > 0); + if ((env->interrupt_request & CPU_INTERRUPT_EXIT)) { + env->interrupt_request &= ~CPU_INTERRUPT_EXIT; + env->exception_index = EXCP_INTERRUPT; + } + return ret; }