summaryrefslogtreecommitdiffstats
path: root/target-lm32
diff options
context:
space:
mode:
authorPaolo Bonzini <pbonzini@redhat.com>2014-06-05 14:53:58 +0200
committerStefan Hajnoczi <stefanha@redhat.com>2014-06-23 16:36:13 +0800
commit74892d2468b9f0c56b915ce94848d6f7fac39740 (patch)
tree36cc2ea403155751b9ca9fa29ad29f34854102cd /target-lm32
parent5d5da114b39d3cf187a69dcf5eaca7eaf886c041 (diff)
downloadhqemu-74892d2468b9f0c56b915ce94848d6f7fac39740.zip
hqemu-74892d2468b9f0c56b915ce94848d6f7fac39740.tar.gz
vl: allow other threads to do qemu_system_vmstop_request
There patch protects vmstop_requested with a lock and introduces qemu_system_vmstop_request_prepare. Together with the new call to qemu_vmstop_requested in vm_start, qemu_system_vmstop_request_prepare avoids a race where the VM could remain stopped even though the iostatus of a block device has already been set (for example). qemu_system_vmstop_request_prepare however also lets the caller thread delay observation of the state change until it has itself communicated that change to the user. This delay avoids any possibility of a wrong reordering of the BLOCK_IO_ERROR event and the subsequent STOP event. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Reviewed-by: Eric Blake <eblake@redhat.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Diffstat (limited to 'target-lm32')
-rw-r--r--target-lm32/op_helper.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/target-lm32/op_helper.c b/target-lm32/op_helper.c
index 308742a..61209c1 100644
--- a/target-lm32/op_helper.c
+++ b/target-lm32/op_helper.c
@@ -42,7 +42,7 @@ void HELPER(ill)(CPULM32State *env)
fprintf(stderr, "VM paused due to illegal instruction. "
"Connect a debugger or switch to the monitor console "
"to find out more.\n");
- qemu_system_vmstop_request(RUN_STATE_PAUSED);
+ vm_stop(RUN_STATE_PAUSED);
cs->halted = 1;
raise_exception(env, EXCP_HALTED);
#endif
OpenPOWER on IntegriCloud