[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 16/20] kvm: Rework inner loop of kvm_cpu_exec
From: |
Jan Kiszka |
Subject: |
[Qemu-devel] [PATCH v2 16/20] kvm: Rework inner loop of kvm_cpu_exec |
Date: |
Tue, 15 Mar 2011 12:26:27 +0100 |
Let kvm_cpu_exec return EXCP_* values consistently and generate those
codes already inside its inner loop. This means we will now re-enter the
kernel while ret == 0.
Update kvm_handle_internal_error accordingly, but keep
kvm_arch_handle_exit untouched, it will be converted in a separate step.
Signed-off-by: Jan Kiszka <address@hidden>
---
kvm-all.c | 26 ++++++++++++++------------
1 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/kvm-all.c b/kvm-all.c
index 59276cd..e6ff95c 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -842,7 +842,7 @@ static int kvm_handle_internal_error(CPUState *env, struct
kvm_run *run)
fprintf(stderr, "emulation failure\n");
if (!kvm_arch_stop_on_emulation_error(env)) {
cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE);
- return 0;
+ return EXCP_INTERRUPT;
}
}
/* FIXME: Should trigger a qmp message to let management know
@@ -942,14 +942,13 @@ int kvm_cpu_exec(CPUState *env)
if (run_ret < 0) {
if (run_ret == -EINTR || run_ret == -EAGAIN) {
DPRINTF("io window exit\n");
- ret = 0;
+ ret = EXCP_INTERRUPT;
break;
}
DPRINTF("kvm run failed %s\n", strerror(-run_ret));
abort();
}
- ret = 0; /* exit loop */
switch (run->exit_reason) {
case KVM_EXIT_IO:
DPRINTF("handle_io\n");
@@ -958,7 +957,7 @@ int kvm_cpu_exec(CPUState *env)
run->io.direction,
run->io.size,
run->io.count);
- ret = 1;
+ ret = 0;
break;
case KVM_EXIT_MMIO:
DPRINTF("handle_mmio\n");
@@ -966,14 +965,16 @@ int kvm_cpu_exec(CPUState *env)
run->mmio.data,
run->mmio.len,
run->mmio.is_write);
- ret = 1;
+ ret = 0;
break;
case KVM_EXIT_IRQ_WINDOW_OPEN:
DPRINTF("irq_window_open\n");
+ ret = EXCP_INTERRUPT;
break;
case KVM_EXIT_SHUTDOWN:
DPRINTF("shutdown\n");
qemu_system_reset_request();
+ ret = EXCP_INTERRUPT;
break;
case KVM_EXIT_UNKNOWN:
fprintf(stderr, "KVM: unknown exit, hardware reason %" PRIx64 "\n",
@@ -990,28 +991,29 @@ int kvm_cpu_exec(CPUState *env)
DPRINTF("kvm_exit_debug\n");
if (kvm_arch_debug(&run->debug.arch)) {
ret = EXCP_DEBUG;
- goto out;
+ break;
}
/* re-enter, this exception was guest-internal */
- ret = 1;
+ ret = 0;
break;
#endif /* KVM_CAP_SET_GUEST_DEBUG */
default:
DPRINTF("kvm_arch_handle_exit\n");
ret = kvm_arch_handle_exit(env, run);
+ if (ret == 0) {
+ ret = EXCP_INTERRUPT;
+ } else if (ret > 0) {
+ ret = 0;
+ }
break;
}
- } while (ret > 0);
+ } while (ret == 0);
if (ret < 0) {
cpu_dump_state(env, stderr, fprintf, CPU_DUMP_CODE);
vm_stop(VMSTOP_PANIC);
}
- ret = EXCP_INTERRUPT;
-#ifdef KVM_CAP_SET_GUEST_DEBUG
-out:
-#endif
env->exit_request = 0;
cpu_single_env = NULL;
return ret;
--
1.7.1
- [Qemu-devel] Re: [PATCH v2 06/20] kvm: Install optimized interrupt handler, (continued)
- [Qemu-devel] [PATCH v2 08/20] kvm: x86: Do not leave halt if interrupts are disabled, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 10/20] x86: Properly reset PAT MSR, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 07/20] kvm: Add in-kernel irqchip awareness to cpu_thread_is_idle, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 12/20] kvm: x86: Synchronize PAT MSR with the kernel, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 03/20] s390: Detect invalid invocations of qemu_ram_free/remap, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 02/20] x86: Unbreak TCG support for hardware breakpoints, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 05/20] Redirect cpu_interrupt to callback handler, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 04/20] Break up user and system cpu_interrupt implementations, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 09/20] kvm: Mark VCPU state dirty on creation, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 16/20] kvm: Rework inner loop of kvm_cpu_exec,
Jan Kiszka <=
- [Qemu-devel] [PATCH v2 11/20] x86: Save/restore PAT MSR, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 20/20] Expose thread_id in info cpus, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 14/20] kvm: Keep KVM_RUN return value in separate variable, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 17/20] kvm: Align kvm_arch_handle_exit to kvm_cpu_exec changes, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 15/20] kvm: Reorder error handling of KVM_RUN, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 13/20] kvm: Consider EXIT_DEBUG unknown without CAP_SET_GUEST_DEBUG, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 19/20] kvm: x86: Push kvm_arch_debug to kvm_arch_handle_exit, Jan Kiszka, 2011/03/15
- [Qemu-devel] [PATCH v2 18/20] kvm: x86: Reorder functions in kvm.c, Jan Kiszka, 2011/03/15
- [Qemu-devel] Re: [PATCH v2 00/20] [uq/master] Patch queue, part V (the rest), Marcelo Tosatti, 2011/03/15