@@ -199,6 +199,9 @@ int kvm_arch_run(CPUState *env)
r = kvm_handle_tpr_access(env);
break;
#endif
+ case KVM_EXIT_HLT:
+ r = kvm_handle_halt(env);
+ break;
default:
r = 1;
break;
@@ -1377,17 +1380,6 @@ int kvm_arch_init_vcpu(CPUState *cenv)
return 0;
}
-int kvm_arch_halt(CPUState *env)
-{
-
- if (!((env->interrupt_request & CPU_INTERRUPT_HARD) &&
- (env->eflags & IF_MASK)) &&
- !(env->interrupt_request & CPU_INTERRUPT_NMI)) {
- env->halted = 1;
- }
- return 1;
-}
-
void kvm_arch_pre_kvm_run(void *opaque, CPUState *env)
{
if (!kvm_irqchip_in_kernel())
@@ -1002,9 +1002,6 @@ int kvm_run(CPUState *env)
case KVM_EXIT_MMIO:
r = handle_mmio(env);
break;
- case KVM_EXIT_HLT:
- r = kvm_arch_halt(env);
- break;
case KVM_EXIT_IRQ_WINDOW_OPEN:
break;
case KVM_EXIT_SHUTDOWN:
@@ -761,6 +761,7 @@ int kvm_arch_post_run(CPUState *env, struct kvm_run *run)
return 0;
}
+#endif
static int kvm_handle_halt(CPUState *env)
{
@@ -775,6 +776,7 @@ static int kvm_handle_halt(CPUState *env)
return 1;
}
+#ifdef KVM_UPSTREAM
int kvm_arch_handle_exit(CPUState *env, struct kvm_run *run)
{
int ret = 0;