diff --git a/hw/vmport.c b/hw/vmport.c index 884af3f..9dc94a3 100644 --- a/hw/vmport.c +++ b/hw/vmport.c @@ -25,6 +25,7 @@ #include "isa.h" #include "pc.h" #include "sysemu.h" +#include "kvm.h" //#define VMPORT_DEBUG @@ -57,6 +58,9 @@ static uint32_t vmport_ioport_read(void *opaque, uint32_t addr) CPUState *env = cpu_single_env; unsigned char command; uint32_t eax; + uint32_t result; + + cpu_synchronize_state(env, 0); eax = env->regs[R_EAX]; if (eax != VMPORT_MAGIC) @@ -73,14 +77,19 @@ static uint32_t vmport_ioport_read(void *opaque, uint32_t addr) return eax; } - return s->func[command](s->opaque[command], addr); + result = s->func[command](s->opaque[command], addr); + cpu_synchronize_state(env, 1); + + return result; } static void vmport_ioport_write(void *opaque, uint32_t addr, uint32_t val) { CPUState *env = cpu_single_env; + cpu_synchronize_state(env, 0); env->regs[R_EAX] = vmport_ioport_read(opaque, addr); + cpu_synchronize_state(env, 1); } static uint32_t vmport_cmd_get_version(void *opaque, uint32_t addr)