From patchwork Fri May 20 17:12:38 2011 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jan Kiszka X-Patchwork-Id: 804312 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter2.kernel.org (8.14.4/8.14.3) with ESMTP id p4KHD1Wj019742 for ; Fri, 20 May 2011 17:13:01 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1757007Ab1ETRMw (ORCPT ); Fri, 20 May 2011 13:12:52 -0400 Received: from david.siemens.de ([192.35.17.14]:20076 "EHLO david.siemens.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756209Ab1ETRMq (ORCPT ); Fri, 20 May 2011 13:12:46 -0400 Received: from mail1.siemens.de (localhost [127.0.0.1]) by david.siemens.de (8.13.6/8.13.6) with ESMTP id p4KHChvM007265; Fri, 20 May 2011 19:12:43 +0200 Received: from mchn199C.mchp.siemens.de ([139.25.109.49]) by mail1.siemens.de (8.13.6/8.13.6) with ESMTP id p4KHCeFC023636; Fri, 20 May 2011 19:12:43 +0200 From: Jan Kiszka To: Avi Kivity , Marcelo Tosatti Cc: kvm@vger.kernel.org Subject: [PATCH 08/10] qemu-kvm: Use upstream kvm_arch_process_async_events Date: Fri, 20 May 2011 19:12:38 +0200 Message-Id: <9fc660ac678a2c642c6fe0e78c1c223d645fdbaa.1305911554.git.jan.kiszka@siemens.com> X-Mailer: git-send-email 1.7.1 In-Reply-To: References: In-Reply-To: References: Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.6 (demeter2.kernel.org [140.211.167.43]); Fri, 20 May 2011 17:13:02 +0000 (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 --- 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 --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) {