[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 15/31] kvm: Stop on all fatal exit reasons
From: |
Marcelo Tosatti |
Subject: |
[Qemu-devel] [PATCH 15/31] kvm: Stop on all fatal exit reasons |
Date: |
Mon, 24 Jan 2011 07:02:24 -0200 |
From: Jan Kiszka <address@hidden>
Ensure that we stop the guest whenever we face a fatal or unknown exit
reason. If we stop, we also have to enforce a cpu loop exit.
Signed-off-by: Jan Kiszka <address@hidden>
Signed-off-by: Marcelo Tosatti <address@hidden>
---
kvm-all.c | 15 +++++++++++----
target-i386/kvm.c | 4 ++++
target-ppc/kvm.c | 4 ++++
3 files changed, 19 insertions(+), 4 deletions(-)
diff --git a/kvm-all.c b/kvm-all.c
index 86ddbd6..eaf9272 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -815,7 +815,7 @@ static int kvm_handle_io(uint16_t port, void *data, int
direction, int size,
}
#ifdef KVM_CAP_INTERNAL_ERROR_DATA
-static void kvm_handle_internal_error(CPUState *env, struct kvm_run *run)
+static int kvm_handle_internal_error(CPUState *env, struct kvm_run *run)
{
if (kvm_check_extension(kvm_state, KVM_CAP_INTERNAL_ERROR_DATA)) {
@@ -833,13 +833,13 @@ static void kvm_handle_internal_error(CPUState *env,
struct kvm_run *run)
if (run->internal.suberror == KVM_INTERNAL_ERROR_EMULATION) {
fprintf(stderr, "emulation failure\n");
if (!kvm_arch_stop_on_emulation_error(env)) {
- return;
+ return 0;
}
}
/* FIXME: Should trigger a qmp message to let management know
* something went wrong.
*/
- vm_stop(0);
+ return -1;
}
#endif
@@ -967,16 +967,19 @@ int kvm_cpu_exec(CPUState *env)
break;
case KVM_EXIT_UNKNOWN:
DPRINTF("kvm_exit_unknown\n");
+ ret = -1;
break;
case KVM_EXIT_FAIL_ENTRY:
DPRINTF("kvm_exit_fail_entry\n");
+ ret = -1;
break;
case KVM_EXIT_EXCEPTION:
DPRINTF("kvm_exit_exception\n");
+ ret = -1;
break;
#ifdef KVM_CAP_INTERNAL_ERROR_DATA
case KVM_EXIT_INTERNAL_ERROR:
- kvm_handle_internal_error(env, run);
+ ret = kvm_handle_internal_error(env, run);
break;
#endif
case KVM_EXIT_DEBUG:
@@ -997,6 +1000,10 @@ int kvm_cpu_exec(CPUState *env)
}
} while (ret > 0);
+ if (ret < 0) {
+ vm_stop(0);
+ env->exit_request = 1;
+ }
if (env->exit_request) {
env->exit_request = 0;
env->exception_index = EXCP_INTERRUPT;
diff --git a/target-i386/kvm.c b/target-i386/kvm.c
index 0aeb079..6b4abaa 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -1537,6 +1537,10 @@ int kvm_arch_handle_exit(CPUState *env, struct kvm_run
*run)
case KVM_EXIT_SET_TPR:
ret = 1;
break;
+ default:
+ fprintf(stderr, "KVM: unknown exit reason %d\n", run->exit_reason);
+ ret = -1;
+ break;
}
return ret;
diff --git a/target-ppc/kvm.c b/target-ppc/kvm.c
index 5caa07c..849b404 100644
--- a/target-ppc/kvm.c
+++ b/target-ppc/kvm.c
@@ -307,6 +307,10 @@ int kvm_arch_handle_exit(CPUState *env, struct kvm_run
*run)
dprintf("handle halt\n");
ret = kvmppc_handle_halt(env);
break;
+ default:
+ fprintf(stderr, "KVM: unknown exit reason %d\n", run->exit_reason);
+ ret = -1;
+ break;
}
return ret;
--
1.7.2.3
- [Qemu-devel] [PATCH 00/31] [PULL] qemu-kvm.git uq/master queue, Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 19/31] kvm: x86: Prepare kvm_get_mp_state for in-kernel irqchip, Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 22/31] kvm: x86: Refactor msr_star/hsave_pa setup and checks, Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 24/31] kvm: x86: Fix !CONFIG_KVM_PARA build, Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 11/31] kvm: x86: Prevent sign extension of DR7 in guest debugging mode, Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 30/31] kvm: x86: Implicitly clear nmi_injected/pending on reset, Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 31/31] kvm: x86: Only read/write MSR_KVM_ASYNC_PF_EN if supported, Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 03/31] Clean up cpu_inject_x86_mce(), Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 15/31] kvm: Stop on all fatal exit reasons,
Marcelo Tosatti <=
- [Qemu-devel] [PATCH 17/31] x86: Optionally dump code bytes on cpu_dump_state, Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 02/31] kvm: convert kvm_ioctl(KVM_CHECK_EXTENSION) to kvm_check_extension(), Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 28/31] kvm: Flush coalesced mmio buffer on IO window exits, Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 05/31] Add function for checking mca broadcast of CPU, Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 04/31] Add "broadcast" option for mce command, Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 01/31] kvm: Enable user space NMI injection for kvm guest, Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 07/31] kvm: kvm_mce_inj_* subroutines for templated error injections, Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 13/31] kvm: Fix coding style violations, Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 08/31] kvm: introduce kvm_inject_x86_mce_on, Marcelo Tosatti, 2011/01/24
- [Qemu-devel] [PATCH 14/31] kvm: x86: Swallow KVM_EXIT_SET_TPR, Marcelo Tosatti, 2011/01/24