kvm: Fix guest single-stepping

Submitted by Jan Kiszka on Sept. 17, 2009, 6:05 p.m.

Details

Message ID 4AB27A86.3020007@siemens.com
State Superseded
Headers show

Commit Message

Jan Kiszka Sept. 17, 2009, 6:05 p.m.
Hopefully the last regression of 4c0960c0: KVM_SET_GUEST_DEBUG requires
properly synchronized guest registers (on x86: eflags) on entry.

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
---

 kvm-all.c |    8 +++++++-
 1 files changed, 7 insertions(+), 1 deletions(-)

Patch hide | download patch | download mbox

diff --git a/kvm-all.c b/kvm-all.c
index 3c37dd7..6142e3f 100644
--- a/kvm-all.c
+++ b/kvm-all.c
@@ -942,7 +942,13 @@  struct kvm_set_guest_debug_data {
 static void kvm_invoke_set_guest_debug(void *data)
 {
     struct kvm_set_guest_debug_data *dbg_data = data;
-    dbg_data->err = kvm_vcpu_ioctl(dbg_data->env, KVM_SET_GUEST_DEBUG, &dbg_data->dbg);
+    CPUState *env = dbg_data->env;
+
+    if (env->kvm_state->regs_modified) {
+        kvm_arch_put_registers(env);
+        env->kvm_state->regs_modified = 0;
+    }
+    dbg_data->err = kvm_vcpu_ioctl(env, KVM_SET_GUEST_DEBUG, &dbg_data->dbg);
 }
 
 int kvm_update_guest_debug(CPUState *env, unsigned long reinject_trap)