diff mbox

[08/10] qemu-kvm: Use upstream kvm_arch_process_async_events

Message ID 9fc660ac678a2c642c6fe0e78c1c223d645fdbaa.1305911554.git.jan.kiszka@siemens.com (mailing list archive)
State New, archived
Headers show

Commit Message

Jan Kiszka May 20, 2011, 5:12 p.m. UTC
Upstream's kvm_arch_process_async_events is now identical to qemu-kvm's
combination of kvm_arch_process_async_events and process_irqchip_events.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---
 qemu-kvm-x86.c    |   49 -------------------------------------------------
 qemu-kvm.c        |   13 +------------
 qemu-kvm.h        |    2 --
 target-i386/kvm.c |    2 --
 4 files changed, 1 insertions(+), 65 deletions(-)
diff mbox

Patch

diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c
index b009251..18f7c3a 100644
--- a/qemu-kvm-x86.c
+++ b/qemu-kvm-x86.c
@@ -225,16 +225,6 @@  void kvm_arch_pre_run(CPUState *env, struct kvm_run *run)
     }
 }
 
-int kvm_arch_has_work(CPUState *env)
-{
-    if (((env->interrupt_request & CPU_INTERRUPT_HARD) &&
-         (env->eflags & IF_MASK)) ||
-        (env->interrupt_request & CPU_INTERRUPT_NMI)) {
-        return 1;
-    }
-    return 0;
-}
-
 int kvm_arch_try_push_interrupts(void *opaque)
 {
     CPUState *env = cpu_single_env;
@@ -331,42 +321,3 @@  int kvm_arch_init_irq_routing(void)
 
     return 0;
 }
-
-void kvm_arch_process_irqchip_events(CPUState *env)
-{
-    if (env->interrupt_request & CPU_INTERRUPT_INIT) {
-        kvm_cpu_synchronize_state(env);
-        do_cpu_init(env);
-    }
-    if (env->interrupt_request & CPU_INTERRUPT_SIPI) {
-        kvm_cpu_synchronize_state(env);
-        do_cpu_sipi(env);
-    }
-}
-
-int kvm_arch_process_async_events(CPUState *env)
-{
-    if (env->interrupt_request & CPU_INTERRUPT_MCE) {
-        /* We must not raise CPU_INTERRUPT_MCE if it's not supported. */
-        assert(env->mcg_cap);
-
-        env->interrupt_request &= ~CPU_INTERRUPT_MCE;
-
-        kvm_cpu_synchronize_state(env);
-
-        if (env->exception_injected == EXCP08_DBLE) {
-            /* this means triple fault */
-            qemu_system_reset_request();
-            env->exit_request = 1;
-            return 0;
-        }
-        env->exception_injected = EXCP12_MCHK;
-        env->has_error_code = 0;
-
-        env->halted = 0;
-        if (kvm_irqchip_in_kernel() && env->mp_state == KVM_MP_STATE_HALTED) {
-            env->mp_state = KVM_MP_STATE_RUNNABLE;
-        }
-    }
-    return 0;
-}
diff --git a/qemu-kvm.c b/qemu-kvm.c
index 24c667c..41c4219 100644
--- a/qemu-kvm.c
+++ b/qemu-kvm.c
@@ -1032,23 +1032,12 @@  static void qemu_kvm_system_reset(void)
     resume_all_threads();
 }
 
-static void process_irqchip_events(CPUState *env)
-{
-    kvm_arch_process_irqchip_events(env);
-    if (kvm_arch_has_work(env))
-        env->halted = 0;
-}
-
 static int kvm_main_loop_cpu(CPUState *env)
 {
     while (1) {
         int run_cpu = !kvm_cpu_is_stopped(env);
         if (run_cpu) {
-            kvm_arch_process_async_events(env);
-            if (!kvm_irqchip_in_kernel()) {
-                process_irqchip_events(env);
-                run_cpu = !env->halted;
-            }
+            run_cpu = !kvm_arch_process_async_events(env);
         }
         if (run_cpu) {
             kvm_cpu_exec(env);
diff --git a/qemu-kvm.h b/qemu-kvm.h
index 8ff773a..5621cfa 100644
--- a/qemu-kvm.h
+++ b/qemu-kvm.h
@@ -314,8 +314,6 @@  void kvm_hpet_disable_kpit(void);
 void on_vcpu(CPUState *env, void (*func)(void *data), void *data);
 void kvm_update_interrupt_request(CPUState *env);
 
-int kvm_arch_has_work(CPUState *env);
-void kvm_arch_process_irqchip_events(CPUState *env);
 int kvm_arch_try_push_interrupts(void *opaque);
 void kvm_arch_push_nmi(void);
 int kvm_set_boot_cpu_id(KVMState *s, uint32_t id);
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index a4365bf..e98eccf 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -1636,7 +1636,6 @@  void kvm_arch_post_run(CPUState *env, struct kvm_run *run)
     cpu_set_apic_base(env->apic_state, run->apic_base);
 }
 
-#ifdef OBSOLETE_KVM_IMPL
 int kvm_arch_process_async_events(CPUState *env)
 {
     if (env->interrupt_request & CPU_INTERRUPT_MCE) {
@@ -1682,7 +1681,6 @@  int kvm_arch_process_async_events(CPUState *env)
 
     return env->halted;
 }
-#endif
 
 static int kvm_handle_halt(CPUState *env)
 {