[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 13/18] kvm: Unconditionally reenter kernel after IO
From: |
Jan Kiszka |
Subject: |
[Qemu-devel] [PATCH 13/18] kvm: Unconditionally reenter kernel after IO exits |
Date: |
Mon, 10 Jan 2011 09:32:06 +0100 |
From: Jan Kiszka <address@hidden>
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 f3c8375..429ab7a 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -188,7 +188,6 @@ int kvm_pit_in_kernel(void)
return kvm_state.pit_in_kernel;
}
-
int kvm_init_vcpu(CPUState *env)
{
long mmap_size;
@@ -831,23 +830,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/18] [uq/master] MCE & IO exit fixes, prepare for VCPU loop reuse, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 03/18] kvm: Provide sigbus services arch-independently, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 08/18] kvm: Handle kvm_init_vcpu errors, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 04/18] Refactor signal setup functions in cpus.c, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 06/18] kvm: Refactor qemu_kvm_eat_signals, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 09/18] Refactor kvm&tcg function names in cpus.c, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 10/18] Fix a few coding style violations in cpus.c, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 13/18] kvm: Unconditionally reenter kernel after IO exits,
Jan Kiszka <=
- [Qemu-devel] [PATCH 15/18] kvm: Leave kvm_cpu_exec directly after KVM_EXIT_SHUTDOWN, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 17/18] kvm: x86: Prepare VCPU loop for in-kernel irqchip, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 02/18] kvm: Drop redundant kvm_enabled from kvm_cpu_thread_fn, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 01/18] Revert "kvm: Drop return value of kvm_cpu_exec", Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 05/18] kvm: Set up signal mask also for !CONFIG_IOTHREAD, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 11/18] Introduce VCPU self-signaling service, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 18/18] kvm: Drop return values from kvm_arch_pre/post_run, Jan Kiszka, 2011/01/10
- [Qemu-devel] [PATCH 16/18] kvm: Separate TCG from KVM cpu execution, Jan Kiszka, 2011/01/10