From: Jan Kiszka <jan.kiszka@web.de>
To: kvm-devel <kvm@vger.kernel.org>
Cc: Avi Kivity <avi@qumranet.com>,
Hollis Blanchard <hollisb@us.ibm.com>,
Jerone Young <jyoung5@us.ibm.com>,
Joerg Roedel <joerg.roedel@amd.com>
Subject: [PATCH 1/11] QEMU/KVM: Fix deadlocks in monitor and debugger
Date: Tue, 27 May 2008 00:09:34 +0200 [thread overview]
Message-ID: <483B351E.6010305@web.de> (raw)
In-Reply-To: <4839B14A.3010406@web.de>
Some monitor commands as well as the vm_stop() issued by the gdbstub on
external interruption so far deadlock on vcpu locks in the kernel. Patch
below resolves the issue by temporarily or permanently stopping all vcpu
threads before issuing the related KVM IOCTLs. It enables, e.g., to
break into guest code spinning in the vcpu and to use things like "info
cpus" in the monitor.
Signed-off-by: Jan Kiszka <jan.kiszka@web.de>
---
qemu/qemu-kvm.c | 41 +++++++++++++++++++++++++++--------------
qemu/vl.c | 2 +-
2 files changed, 28 insertions(+), 15 deletions(-)
Index: b/qemu/qemu-kvm.c
===================================================================
--- a/qemu/qemu-kvm.c
+++ b/qemu/qemu-kvm.c
@@ -137,18 +137,6 @@ static int pre_kvm_run(void *opaque, int
return 0;
}
-void kvm_load_registers(CPUState *env)
-{
- if (kvm_enabled())
- kvm_arch_load_regs(env);
-}
-
-void kvm_save_registers(CPUState *env)
-{
- if (kvm_enabled())
- kvm_arch_save_regs(env);
-}
-
int kvm_cpu_exec(CPUState *env)
{
int r;
@@ -252,6 +240,26 @@ static void kvm_vm_state_change_handler(
pause_all_threads();
}
+void kvm_load_registers(CPUState *env)
+{
+ assert(!vm_running);
+
+ if (kvm_enabled())
+ kvm_arch_load_regs(env);
+}
+
+void kvm_save_registers(CPUState *env)
+{
+ if (!kvm_enabled())
+ return;
+
+ if (vm_running)
+ pause_all_threads();
+ kvm_arch_save_regs(env);
+ if (vm_running)
+ resume_all_threads();
+}
+
static void update_regs_for_sipi(CPUState *env)
{
kvm_arch_update_regs_for_sipi(env);
@@ -740,7 +748,7 @@ int kvm_qemu_init_env(CPUState *cenv)
int kvm_update_debugger(CPUState *env)
{
struct kvm_debug_guest dbg;
- int i;
+ int i, r;
memset(dbg.breakpoints, 0, sizeof(dbg.breakpoints));
@@ -753,7 +761,12 @@ int kvm_update_debugger(CPUState *env)
}
dbg.singlestep = env->singlestep_enabled;
}
- return kvm_guest_debug(kvm_context, env->cpu_index, &dbg);
+ if (vm_running)
+ pause_all_threads();
+ r = kvm_guest_debug(kvm_context, env->cpu_index, &dbg);
+ if (vm_running)
+ resume_all_threads();
+ return r;
}
Index: b/qemu/vl.c
===================================================================
--- a/qemu/vl.c
+++ b/qemu/vl.c
@@ -7312,12 +7312,12 @@ void vm_stop(int reason)
{
if (vm_running) {
cpu_disable_ticks();
- vm_running = 0;
if (reason != 0) {
if (vm_stop_cb) {
vm_stop_cb(vm_stop_opaque, reason);
}
}
+ vm_running = 0;
vm_state_notify(0);
}
}
next prev parent reply other threads:[~2008-05-26 22:10 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-05-26 22:05 [PATCH 0/11] Rework guest debug interface / x86 debug register support -v2 Jan Kiszka
2008-05-26 22:09 ` Jan Kiszka [this message]
2008-05-27 9:36 ` [PATCH 1/11] QEMU/KVM: Fix deadlocks in monitor and debugger Avi Kivity
2008-05-27 13:00 ` Jan Kiszka
2008-05-27 13:09 ` Avi Kivity
2008-05-26 22:09 ` [PATCH 2/11] QEMU/KVM: Cleanup and improve kvm_load/save_registers usage Jan Kiszka
2008-06-09 19:16 ` Anthony Liguori
2008-06-12 12:38 ` Avi Kivity
2008-05-26 22:09 ` [PATCH 3/11] QEMU/KVM: Proper vm_stop on debug events Jan Kiszka
2008-05-26 22:09 ` [PATCH 4/11] QEMU: Enhance cpu_break/watchpoint API and gdbstub integration Jan Kiszka
2008-05-26 22:10 ` [PATCH 5/11] QEMU: Improve SMP debugging support Jan Kiszka
2008-05-26 22:10 ` [PATCH 6/11] QEMU/KVM: Introduce single vcpu pause/resume Jan Kiszka
2008-05-26 22:10 ` [PATCH 7/11] QEMU/KVM: New guest debugging interface Jan Kiszka
2008-05-27 18:31 ` Jan Kiszka
2008-05-26 22:10 ` [PATCH 8/11] QEMU/KVM: Support for SMP guest debugging Jan Kiszka
2008-05-26 22:10 ` [PATCH 9/11] KVM: New guest debugging interface Jan Kiszka
2008-05-26 22:10 ` [PATCH 10/11] KVM-x86: Properly virtualize debug registers Jan Kiszka
2008-05-26 22:10 ` [PATCH 11/11] KVM-x86: Wire up host-managed " Jan Kiszka
2008-05-27 9:50 ` [PATCH 0/11] Rework guest debug interface / x86 debug register support -v2 Avi Kivity
2008-05-27 10:44 ` Jan Kiszka
2008-05-27 18:46 ` Hollis Blanchard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=483B351E.6010305@web.de \
--to=jan.kiszka@web.de \
--cc=avi@qumranet.com \
--cc=hollisb@us.ibm.com \
--cc=joerg.roedel@amd.com \
--cc=jyoung5@us.ibm.com \
--cc=kvm@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox