qemu-e2k/include/sysemu
Stefan Hajnoczi 4486e89c21 vl: introduce vm_shutdown()
Commit 00d09fdbba ("vl: pause vcpus before
stopping iothreads") and commit dce8921b2b
("iothread: Stop threads before main() quits") tried to work around the
fact that emulation was still active during termination by stopping
iothreads.  They suffer from race conditions:
1. virtio_scsi_handle_cmd_vq() racing with iothread_stop_all() hits the
   virtio_scsi_ctx_check() assertion failure because the BDS AioContext
   has been modified by iothread_stop_all().
2. Guest vq kick racing with main loop termination leaves a readable
   ioeventfd that is handled by the next aio_poll() when external
   clients are enabled again, resulting in unwanted emulation activity.

This patch obsoletes those commits by fully disabling emulation activity
when vcpus are stopped.

Use the new vm_shutdown() function instead of pause_all_vcpus() so that
vm change state handlers are invoked too.  Virtio devices will now stop
their ioeventfds, preventing further emulation activity after vm_stop().

Note that vm_stop(RUN_STATE_SHUTDOWN) cannot be used because it emits a
QMP STOP event that may affect existing clients.

It is no longer necessary to call replay_disable_events() directly since
vm_shutdown() does so already.

Drop iothread_stop_all() since it is no longer used.

Cc: Fam Zheng <famz@redhat.com>
Cc: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Fam Zheng <famz@redhat.com>
Acked-by: Paolo Bonzini <pbonzini@redhat.com>
Message-id: 20180307144205.20619-5-stefanha@redhat.com
Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
2018-03-08 17:38:51 +00:00
..
accel.h
arch_init.h qapi: Empty out qapi-schema.json 2018-03-02 13:45:50 -06:00
balloon.h qapi: Empty out qapi-schema.json 2018-03-02 13:45:50 -06:00
block-backend.h block: Introduce buf register API 2018-02-08 09:22:03 +08:00
blockdev.h
bt.h
cpus.h
cryptodev-vhost-user.h cryptodev-vhost-user: set the key length 2018-03-01 18:26:17 +02:00
cryptodev-vhost.h cryptodev: add vhost-user as a new cryptodev backend 2018-03-01 18:26:17 +02:00
cryptodev.h cryptodev: add vhost support 2018-03-01 18:26:17 +02:00
device_tree.h
dma.h
dump-arch.h
dump.h qapi: Empty out qapi-schema.json 2018-03-02 13:45:50 -06:00
hax.h hax: Support guest RAM sizes of 4GB or more 2018-02-13 11:44:13 +01:00
hostmem.h qapi: Empty out qapi-schema.json 2018-03-02 13:45:50 -06:00
hvf.h Clean up includes 2018-02-09 05:05:11 +01:00
hw_accel.h Add the WHPX acceleration enlightenments 2018-02-07 14:09:26 +01:00
iothread.h vl: introduce vm_shutdown() 2018-03-08 17:38:51 +00:00
kvm_int.h
kvm.h mem: add share parameter to memory-backend-ram 2018-02-19 13:03:24 +02:00
memory_mapping.h
numa.h Move include qemu/option.h from qemu-common.h to actual users 2018-02-09 13:52:16 +01:00
os-posix.h
os-win32.h
qtest.h
replay.h qapi: Empty out qapi-schema.json 2018-03-02 13:45:50 -06:00
reset.h
rng-random.h
rng.h
seccomp.h
sysemu.h vl: introduce vm_shutdown() 2018-03-08 17:38:51 +00:00
tpm_backend.h Drop superfluous includes of qapi-types.h and test-qapi-types.h 2018-02-09 05:05:11 +01:00
tpm.h Include less of the generated modular QAPI headers 2018-03-02 13:45:50 -06:00
watchdog.h Include less of the generated modular QAPI headers 2018-03-02 13:45:50 -06:00
whpx.h Add the WHPX vcpu API 2018-02-07 14:09:26 +01:00
xen-mapcache.h