[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 15/35] kvm: Stop on all fatal exit reasons
From: |
Marcelo Tosatti |
Subject: |
[Qemu-devel] [PATCH 15/35] kvm: Stop on all fatal exit reasons |
Date: |
Thu, 6 Jan 2011 15:56:21 -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 7518f2c..a46a3b6 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -774,7 +774,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)) {
@@ -792,13 +792,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
@@ -926,16 +926,19 @@ void 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:
@@ -956,6 +959,10 @@ void 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 fda07d2..2431a1f 100644
--- a/target-i386/kvm.c
+++ b/target-i386/kvm.c
@@ -1534,6 +1534,10 @@ int kvm_arch_handle_exit(CPUState *env, struct kvm_run
*run)
DPRINTF("handle_hlt\n");
ret = kvm_handle_halt(env);
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 20/35] kvm: x86: Remove redundant mp_state initialization, (continued)
- [Qemu-devel] [PATCH 20/35] kvm: x86: Remove redundant mp_state initialization, Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 13/35] kvm: Fix coding style violations, Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 35/35] kvm: x86: Only read/write MSR_KVM_ASYNC_PF_EN if supported, Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 24/35] Synchronize VCPU states before reset, Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 10/35] kvm: x86: Remove obsolete SS.RPL/DPL aligment, Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 14/35] kvm: Drop return value of kvm_cpu_exec, Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 03/35] Clean up cpu_inject_x86_mce(), Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 17/35] x86: Optionally dump code bytes on cpu_dump_state, Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 33/35] kvm: Do not use qemu_fair_mutex, Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 15/35] kvm: Stop on all fatal exit reasons,
Marcelo Tosatti <=
- [Qemu-devel] [PATCH 16/35] kvm: Improve reporting of fatal errors, Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 05/35] Add function for checking mca broadcast of CPU, Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 07/35] kvm: kvm_mce_inj_* subroutines for templated error injections, Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 04/35] Add "broadcast" option for mce command, Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 18/35] kvm: x86: Align kvm_arch_put_registers code with comment, Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 06/35] kvm: introduce kvm_mce_in_progress, Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 21/35] kvm: x86: Fix xcr0 reset mismerge, Marcelo Tosatti, 2011/01/06
- [Qemu-devel] [PATCH 31/35] kvm: x86: Rework identity map and TSS setup for larger BIOS sizes, Marcelo Tosatti, 2011/01/06