[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 18/22] kvm: Unconditionally reenter kernel after IO
From: |
Jan Kiszka |
Subject: |
[Qemu-devel] [PATCH 18/22] kvm: Unconditionally reenter kernel after IO exits |
Date: |
Thu, 27 Jan 2011 14:10:02 +0100 |
KVM requires to reenter the kernel after IO exits in order to complete
instruction emulation. Failing to do so will leave the kernel state
inconsistently behind. To ensure that we will get back ASAP, we issue a
self-signal that will cause KVM_RUN to return once the pending
operations are completed.
This patch also fixes the missing exit_request check in kvm_cpu_exec in
the CONFIG_IOTHREAD case.
Signed-off-by: Jan Kiszka <address@hidden>
CC: Gleb Natapov <address@hidden>
---
kvm-all.c | 20 +++++++++++---------
1 files changed, 11 insertions(+), 9 deletions(-)
diff --git a/kvm-all.c b/kvm-all.c
index 46ecc1c..d961697 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -199,7 +199,6 @@ int kvm_pit_in_kernel(void)
return kvm_state->pit_in_kernel;
}
-
int kvm_init_vcpu(CPUState *env)
{
KVMState *s = kvm_state;
@@ -899,23 +898,26 @@ int kvm_cpu_exec(CPUState *env)
}
do {
-#ifndef CONFIG_IOTHREAD
- if (env->exit_request) {
- DPRINTF("interrupt exit requested\n");
- ret = 0;
- break;
- }
-#endif
-
if (env->kvm_vcpu_dirty) {
kvm_arch_put_registers(env, KVM_PUT_RUNTIME_STATE);
env->kvm_vcpu_dirty = 0;
}
kvm_arch_pre_run(env, run);
+ if (env->exit_request) {
+ DPRINTF("interrupt exit requested\n");
+ /*
+ * KVM requires us to reenter the kernel after IO exits to complete
+ * instruction emulation. This self-signal will ensure that we
+ * leave ASAP again.
+ */
+ qemu_cpu_kick_self();
+ }
cpu_single_env = NULL;
qemu_mutex_unlock_iothread();
+
ret = kvm_vcpu_ioctl(env, KVM_RUN, 0);
+
qemu_mutex_lock_iothread();
cpu_single_env = env;
kvm_arch_post_run(env, run);
--
1.7.1
- [Qemu-devel] [PATCH 00/22] [uq/master] Patch queue, part II, Jan Kiszka, 2011/01/27
- [Qemu-devel] [PATCH 03/22] Process vmstop requests in IO thread, Jan Kiszka, 2011/01/27
- [Qemu-devel] [PATCH 21/22] Refactor kvm&tcg function names in cpus.c, Jan Kiszka, 2011/01/27
- [Qemu-devel] [PATCH 10/22] kvm: Set up signal mask also for !CONFIG_IOTHREAD, Jan Kiszka, 2011/01/27
- [Qemu-devel] [PATCH 18/22] kvm: Unconditionally reenter kernel after IO exits,
Jan Kiszka <=
- [Qemu-devel] [PATCH 14/22] kvm: Fix race between timer signals and vcpu entry under !IOTHREAD, Jan Kiszka, 2011/01/27
- [Qemu-devel] [PATCH v2 14/22] kvm: Fix race between timer signals and vcpu entry under !IOTHREAD, Jan Kiszka, 2011/01/27
- [Qemu-devel] [PATCH v3 14/22] kvm: Fix race between timer signals and vcpu entry under !IOTHREAD, Jan Kiszka, 2011/01/27
- [Qemu-devel] Re: [PATCH v3 14/22] kvm: Fix race between timer signals and vcpu entry under !IOTHREAD, Avi Kivity, 2011/01/31
- [Qemu-devel] Re: [PATCH v3 14/22] kvm: Fix race between timer signals and vcpu entry under !IOTHREAD, Jan Kiszka, 2011/01/31
- Re: [Qemu-devel] Re: [PATCH v3 14/22] kvm: Fix race between timer signals and vcpu entry under !IOTHREAD, Stefan Hajnoczi, 2011/01/31
- Re: [Qemu-devel] Re: [PATCH v3 14/22] kvm: Fix race between timer signals and vcpu entry under !IOTHREAD, Jan Kiszka, 2011/01/31
- Re: [Qemu-devel] Re: [PATCH v3 14/22] kvm: Fix race between timer signals and vcpu entry under !IOTHREAD, Stefan Hajnoczi, 2011/01/31
- [Qemu-devel] Re: [PATCH v3 14/22] kvm: Fix race between timer signals and vcpu entry under !IOTHREAD, Avi Kivity, 2011/01/31
- [Qemu-devel] Re: [PATCH v3 14/22] kvm: Fix race between timer signals and vcpu entry under !IOTHREAD, Jan Kiszka, 2011/01/31