[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 02/18] kvm: Stop on all fatal exit reasons
From: |
Jan Kiszka |
Subject: |
[Qemu-devel] [PATCH 02/18] kvm: Stop on all fatal exit reasons |
Date: |
Fri, 21 Jan 2011 21:48:06 +0100 |
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>
---
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.1
- [Qemu-devel] [PATCH 17/18] kvm: x86: Implicitly clear nmi_injected/pending on reset, (continued)
- [Qemu-devel] [PATCH 17/18] kvm: x86: Implicitly clear nmi_injected/pending on reset, Jan Kiszka, 2011/01/21
- [Qemu-devel] [PATCH 13/18] kvm: Consolidate must-have capability checks, Jan Kiszka, 2011/01/21
- [Qemu-devel] [PATCH 06/18] kvm: x86: Prepare kvm_get_mp_state for in-kernel irqchip, Jan Kiszka, 2011/01/21
- [Qemu-devel] [PATCH 05/18] kvm: x86: Align kvm_arch_put_registers code with comment, Jan Kiszka, 2011/01/21
- [Qemu-devel] [PATCH 03/18] kvm: Improve reporting of fatal errors, Jan Kiszka, 2011/01/21
- [Qemu-devel] [PATCH 10/18] kvm: x86: Reset paravirtual MSRs, Jan Kiszka, 2011/01/21
- [Qemu-devel] [PATCH 01/18] kvm: x86: Swallow KVM_EXIT_SET_TPR, Jan Kiszka, 2011/01/21
- [Qemu-devel] [PATCH 07/18] kvm: x86: Remove redundant mp_state initialization, Jan Kiszka, 2011/01/21
- [Qemu-devel] [PATCH 04/18] x86: Optionally dump code bytes on cpu_dump_state, Jan Kiszka, 2011/01/21
- [Qemu-devel] [PATCH 11/18] kvm: x86: Fix !CONFIG_KVM_PARA build, Jan Kiszka, 2011/01/21
- [Qemu-devel] [PATCH 02/18] kvm: Stop on all fatal exit reasons,
Jan Kiszka <=
- [Qemu-devel] [PATCH 12/18] kvm: Drop smp_cpus argument from init functions, Jan Kiszka, 2011/01/21
- [Qemu-devel] [PATCH 14/18] kvm: x86: Rework identity map and TSS setup for larger BIOS sizes, Jan Kiszka, 2011/01/21
- [Qemu-devel] [PATCH 08/18] kvm: x86: Fix xcr0 reset mismerge, Jan Kiszka, 2011/01/21
- [Qemu-devel] [PATCH 09/18] kvm: x86: Refactor msr_star/hsave_pa setup and checks, Jan Kiszka, 2011/01/21