diff options
author | Paolo Bonzini <pbonzini@redhat.com> | 2014-06-05 14:53:58 +0200 |
---|---|---|
committer | Stefan Hajnoczi <stefanha@redhat.com> | 2014-06-23 16:36:13 +0800 |
commit | 74892d2468b9f0c56b915ce94848d6f7fac39740 (patch) | |
tree | 36cc2ea403155751b9ca9fa29ad29f34854102cd /target-lm32/op_helper.c | |
parent | 5d5da114b39d3cf187a69dcf5eaca7eaf886c041 (diff) | |
download | qemu-74892d2468b9f0c56b915ce94848d6f7fac39740.tar.gz qemu-74892d2468b9f0c56b915ce94848d6f7fac39740.tar.bz2 qemu-74892d2468b9f0c56b915ce94848d6f7fac39740.zip |
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/op_helper.c')
-rw-r--r-- | target-lm32/op_helper.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/target-lm32/op_helper.c b/target-lm32/op_helper.c index 308742a74e..61209c19b2 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 |