From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Evans Subject: [PATCH 06/28] kvm tools: Add arch-specific KVM_RUN exit handling via kvm_cpu__handle_exit() Date: Tue, 06 Dec 2011 14:39:08 +1100 Message-ID: <4EDD8E5C.1090207@ozlabs.org> References: Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit To: kvm@vger.kernel.org, kvm-ppc@vger.kernel.org Return-path: Received: from ozlabs.org ([203.10.76.45]:37108 "EHLO ozlabs.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756523Ab1LFDiW (ORCPT ); Mon, 5 Dec 2011 22:38:22 -0500 In-Reply-To: Sender: kvm-owner@vger.kernel.org List-ID: This patch creates a new function in x86/kvm-cpu.c, kvm_cpu__handle_exit(), in which arch-specific exit reasons can be handled outside of the common runloop. Signed-off-by: Matt Evans --- tools/kvm/include/kvm/kvm-cpu.h | 2 ++ tools/kvm/kvm-cpu.c | 10 ++++++++-- tools/kvm/x86/kvm-cpu.c | 5 +++++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/tools/kvm/include/kvm/kvm-cpu.h b/tools/kvm/include/kvm/kvm-cpu.h index 719e286..15618f1 100644 --- a/tools/kvm/include/kvm/kvm-cpu.h +++ b/tools/kvm/include/kvm/kvm-cpu.h @@ -2,6 +2,7 @@ #define KVM__KVM_CPU_H #include "kvm/kvm-cpu-arch.h" +#include struct kvm_cpu *kvm_cpu__init(struct kvm *kvm, unsigned long cpu_id); void kvm_cpu__delete(struct kvm_cpu *vcpu); @@ -11,6 +12,7 @@ void kvm_cpu__enable_singlestep(struct kvm_cpu *vcpu); void kvm_cpu__run(struct kvm_cpu *vcpu); void kvm_cpu__reboot(void); int kvm_cpu__start(struct kvm_cpu *cpu); +bool kvm_cpu__handle_exit(struct kvm_cpu *vcpu); int kvm_cpu__get_debug_fd(void); void kvm_cpu__set_debug_fd(int fd); diff --git a/tools/kvm/kvm-cpu.c b/tools/kvm/kvm-cpu.c index 5aba3bb..9bc0796 100644 --- a/tools/kvm/kvm-cpu.c +++ b/tools/kvm/kvm-cpu.c @@ -137,8 +137,14 @@ int kvm_cpu__start(struct kvm_cpu *cpu) goto exit_kvm; case KVM_EXIT_SHUTDOWN: goto exit_kvm; - default: - goto panic_kvm; + default: { + bool ret; + + ret = kvm_cpu__handle_exit(cpu); + if (!ret) + goto panic_kvm; + break; + } } kvm_cpu__handle_coalesced_mmio(cpu); } diff --git a/tools/kvm/x86/kvm-cpu.c b/tools/kvm/x86/kvm-cpu.c index b26b208..a0d10cc 100644 --- a/tools/kvm/x86/kvm-cpu.c +++ b/tools/kvm/x86/kvm-cpu.c @@ -212,6 +212,11 @@ void kvm_cpu__reset_vcpu(struct kvm_cpu *vcpu) kvm_cpu__setup_msrs(vcpu); } +bool kvm_cpu__handle_exit(struct kvm_cpu *vcpu) +{ + return false; +} + static void print_dtable(const char *name, struct kvm_dtable *dtable) { dprintf(debug_fd, " %s %016llx %08hx\n",