qemu-e2k/tests
Peter Maydell c4d1069c25 Add dbus-vmstate
Hi,
 
 With external processes or helpers participating to the VM support, it
 becomes necessary to handle their migration. Various options exist to
 transfer their state:
 1) as the VM memory, RAM or devices (we could say that's how
    vhost-user devices can be handled today, they are expected to
    restore from ring state)
 2) other "vmstate" (as with TPM emulator state blobs)
 3) left to be handled by management layer
 
 1) is not practical, since an external processes may legitimatelly
 need arbitrary state date to back a device or a service, or may not
 even have an associated device.
 
 2) needs ad-hoc code for each helper, but is simple and working
 
 3) is complicated for management layer, QEMU has the migration timing
 
 The proposed "dbus-vmstate" object will connect to a given D-Bus
 address, and save/load from org.qemu.VMState1 owners on migration.
 
 Thus helpers can easily have their state migrated with QEMU, without
 implementing ad-hoc support (such as done for TPM emulation)
 
 D-Bus is ubiquitous on Linux (it is systemd IPC), and can be made to
 work on various other OSes. There are several implementations and good
 bindings for various languages.  (the tests/dbus-vmstate-test.c is a
 good example of how simple the implementation of services can be, even
 in C)
 
 dbus-vmstate is put into use by the libvirt series "[PATCH 00/23] Use
 a slirp helper process".
 
 v2:
  - fix build with broken mingw-glib
 -----BEGIN PGP SIGNATURE-----
 
 iQJQBAABCAA6FiEEh6m9kz+HxgbSdvYt2ujhCXWWnOUFAl4TR5ccHG1hcmNhbmRy
 ZS5sdXJlYXVAcmVkaGF0LmNvbQAKCRDa6OEJdZac5R6EEACFTd4hDG8i/GnxCFut
 MGcTusJr+2IklIT/K0qpLf0axNUoIqycwv8m0T9QhoG8h+9lMykOd1YJpNetT5qK
 gifOF2gcPK/9WIdFbX7dLSUAWpzO6fG/RzKK65Nc1uJSnXlb8JV0BU/6FrfCE+3U
 Bg5PvVtxxtwejQfQPOI7bPxOqxr/SmjUGcbFgacMAMG0Lm/VG/92kdoC6Z4Xf/bd
 FcAeiO2CiPoGXG5zD4WF1emwxnSu65PgcFpSpqvvFlmDbYlTwoMt4VWxTfkAzbAM
 IES7j2IbhUEe3p0hvMTqmmsmds1QNCBgnQI/LtQiXPTnbfpBcZ0wT6QsSZXWvHz8
 ClA9OAimxyELblTGjD9vsi3G5m2DQS+NdfPOX7hfHouVQzDJJaS8jxDItpPgXwSO
 fZ9mUO8ps3N2YTakuKNBP/IzDOuyExrBg80GF+HbEc59Uhj8Yq/awyz1XsqjQzVP
 54+TUjwC8HZxVWgMeqiJ1njPTfRJo6uAnguLbfAXj8P9vaXLtsy/3JGsmKiziXXW
 XzvQDzhfOMjm7Uo7vN7Hp3X/UYJxnaQ3dViqZnv/gqG6yv+igVlqyrTx2IBhN2NW
 DZt3c7VqVUBYFShLgfy0zDjzM/s7mFkQKCFHUsBqIwODugYEc3TTdAa60QYjX5i9
 negngax45KM6nF3tq74fJpwWVw==
 =M4kD
 -----END PGP SIGNATURE-----

Merge remote-tracking branch 'remotes/elmarco/tags/dbus-vmstate7-pull-request' into staging

Add dbus-vmstate

Hi,

With external processes or helpers participating to the VM support, it
becomes necessary to handle their migration. Various options exist to
transfer their state:
1) as the VM memory, RAM or devices (we could say that's how
   vhost-user devices can be handled today, they are expected to
   restore from ring state)
2) other "vmstate" (as with TPM emulator state blobs)
3) left to be handled by management layer

1) is not practical, since an external processes may legitimatelly
need arbitrary state date to back a device or a service, or may not
even have an associated device.

2) needs ad-hoc code for each helper, but is simple and working

3) is complicated for management layer, QEMU has the migration timing

The proposed "dbus-vmstate" object will connect to a given D-Bus
address, and save/load from org.qemu.VMState1 owners on migration.

Thus helpers can easily have their state migrated with QEMU, without
implementing ad-hoc support (such as done for TPM emulation)

D-Bus is ubiquitous on Linux (it is systemd IPC), and can be made to
work on various other OSes. There are several implementations and good
bindings for various languages.  (the tests/dbus-vmstate-test.c is a
good example of how simple the implementation of services can be, even
in C)

dbus-vmstate is put into use by the libvirt series "[PATCH 00/23] Use
a slirp helper process".

v2:
 - fix build with broken mingw-glib

# gpg: Signature made Mon 06 Jan 2020 14:43:35 GMT
# gpg:                using RSA key 87A9BD933F87C606D276F62DDAE8E10975969CE5
# gpg:                issuer "marcandre.lureau@redhat.com"
# gpg: Good signature from "Marc-André Lureau <marcandre.lureau@redhat.com>" [full]
# gpg:                 aka "Marc-André Lureau <marcandre.lureau@gmail.com>" [full]
# Primary key fingerprint: 87A9 BD93 3F87 C606 D276  F62D DAE8 E109 7596 9CE5

* remotes/elmarco/tags/dbus-vmstate7-pull-request:
  tests: add dbus-vmstate-test
  tests: add migration-helpers unit
  dockerfiles: add dbus-daemon to some of latest distributions
  configure: add GDBUS_CODEGEN
  Add dbus-vmstate object
  util: add dbus helper unit
  docs: start a document to describe D-Bus usage
  vmstate: replace DeviceState with VMStateIf
  vmstate: add qom interface to get id

Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
2020-01-06 18:22:42 +00:00
..
acceptance Python queue 2019-12-17 2019-12-17 14:34:31 +00:00
data hw/arm/acpi: enable SHPC native hot plug 2019-12-16 10:46:35 +00:00
decode decodetree: Allow !function with no input bits 2019-08-19 08:03:41 -07:00
docker dockerfiles: add dbus-daemon to some of latest distributions 2020-01-06 18:41:32 +04:00
fp
guest-debug
image-fuzzer image-fuzzer: Use OSerror.strerror instead of tuple subscript 2019-11-05 16:36:11 +01:00
keys
libqos libqos: tolerate wait-unplug migration state 2019-10-29 18:55:26 -04:00
migration tests/migration: fix a typo in comment 2019-10-21 18:14:43 +02:00
multiboot
perf/block/qcow2
plugin tcg plugins: expose an API version concept 2019-11-12 14:32:55 +00:00
qapi-schema qapi: Check feature documentation against the schema 2019-10-29 07:35:16 +01:00
qemu-iotests tests/qemu-iotests: Update tests to recent desugarized -accel option 2020-01-06 14:14:41 +01:00
rocker
tcg tests/tcg: ensure we re-configure if configure.sh is updated 2019-12-19 08:20:16 +00:00
uefi-test-tools edk2 build scripts: work around TianoCore#1607 without forcing Python 2 2019-10-07 15:14:15 +02:00
vm tests/vm: Allow to set qemu-img path 2019-12-18 20:17:33 +00:00
vmstate-static-checker-data
.gitignore
ac97-test.c
acpi-utils.c
acpi-utils.h
ahci-test.c tests: Remove unnecessary global_qtest references 2019-09-05 13:18:52 +02:00
arm-cpu-features.c vl: configure accelerators from -accel options 2019-12-17 19:32:26 +01:00
atomic64-bench.c
atomic_add-bench.c
benchmark-crypto-cipher.c tests: benchmark crypto with fixed data size, not time period 2019-10-28 13:32:21 +01:00
benchmark-crypto-hash.c tests: benchmark crypto with fixed data size, not time period 2019-10-28 13:32:21 +01:00
benchmark-crypto-hmac.c
bios-tables-test-allowed-diff.h tests/acpi: add expected tables for arm/virt 2019-10-05 17:27:43 -04:00
bios-tables-test.c vl: configure accelerators from -accel options 2019-12-17 19:32:26 +01:00
boot-order-test.c
boot-sector.c tests/boot-sector: Fix the bad s390x assembler code 2019-12-18 15:54:01 +01:00
boot-sector.h
boot-serial-test.c vl: configure accelerators from -accel options 2019-12-17 19:32:26 +01:00
cdrom-test.c vl: configure accelerators from -accel options 2019-12-17 19:32:26 +01:00
check-block-qdict.c
check-block.sh tests/check-block: Skip iotests when sanitizers are enabled 2019-09-03 14:56:06 +02:00
check-qdict.c
check-qjson.c test: Use g_strndup instead of plain strndup 2019-08-21 10:27:13 +02:00
check-qlist.c
check-qlit.c
check-qnull.c
check-qnum.c
check-qobject.c
check-qom-interface.c
check-qom-proplist.c
check-qstring.c
cpu-plug-test.c hw/i386: Remove the deprecated machines 0.12 up to 0.15 2019-12-18 02:34:12 +01:00
crypto-tls-psk-helpers.c
crypto-tls-psk-helpers.h
crypto-tls-x509-helpers.c
crypto-tls-x509-helpers.h
dbus-vmstate1.xml tests: add dbus-vmstate-test 2020-01-06 18:41:32 +04:00
dbus-vmstate-daemon.sh tests: add dbus-vmstate-test 2020-01-06 18:41:32 +04:00
dbus-vmstate-test.c tests: add dbus-vmstate-test 2020-01-06 18:41:32 +04:00
device-introspect-test.c
device-plug-test.c
display-vga-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
drive_del-test.c
ds1338-test.c
e1000-test.c
e1000e-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
eepro100-test.c
endianness-test.c
es1370-test.c
fdc-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
fw_cfg-test.c tests/fw_cfg: Test 'reboot-timeout=-1' special value 2019-11-01 19:19:24 +01:00
hd-geo-test.c tests/hd-geo-test: Skip test when images can not be created 2019-12-18 20:17:45 +00:00
hexloader-test.c
i440fx-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
i82801b11-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
ide-test.c
intel-hda-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
io-channel-helpers.c
io-channel-helpers.h
ioh3420-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
iothread.c test-bdrv-drain: fix iothread_join() hang 2019-10-14 09:48:01 +01:00
iothread.h
ipmi-bt-test.c tests:ipmi: Fix IPMI BT tests 2019-09-20 14:08:10 -05:00
ipmi-kcs-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
ipoctal232-test.c
ivshmem-test.c tests: use g_test_rand_int 2019-12-17 09:05:23 +01:00
libqtest-single.h tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
libqtest.c vl: configure accelerators from -accel options 2019-12-17 19:32:26 +01:00
libqtest.h tests: add qtest_qmp_device_add_qdict() helper 2019-10-15 18:18:08 -03:00
m25p80-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
m48t59-test.c
machine-none-test.c
Makefile.include tests: add dbus-vmstate-test 2020-01-06 18:41:32 +04:00
megasas-test.c
microbit-test.c
migration-helpers.c tests: add migration-helpers unit 2020-01-06 18:41:32 +04:00
migration-helpers.h tests: add migration-helpers unit 2020-01-06 18:41:32 +04:00
migration-test.c tests: add migration-helpers unit 2020-01-06 18:41:32 +04:00
modules-test.c tests: fix modules-test 'duplicate test case' error 2019-12-17 09:05:23 +01:00
ne2000-test.c
numa-test.c
nvme-test.c
pca9552-test.c
pci-test.c
pcnet-test.c
pflash-cfi02-test.c vl: configure accelerators from -accel options 2019-12-17 19:32:26 +01:00
pkix_asn1_tab.c
pnv-xscom-test.c vl: configure accelerators from -accel options 2019-12-17 19:32:26 +01:00
prom-env-test.c vl: configure accelerators from -accel options 2019-12-17 19:32:26 +01:00
ptimer-test-stubs.c util/qemu-timer: refactor deadline calculation for external timers 2019-08-20 17:26:21 +02:00
ptimer-test.c tests/ptimer-test: Switch to transaction-based ptimer API 2019-10-15 18:09:02 +01:00
ptimer-test.h
pvpanic-test.c
pxe-test.c vl: configure accelerators from -accel options 2019-12-17 19:32:26 +01:00
q35-test.c
qht-bench.c
qmp-cmd-test.c
qmp-test.c
qom-test.c
qos-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
rcutorture.c
requirements.txt Acceptance tests: use avocado.utils.ssh for SSH interaction 2019-09-20 17:13:41 -04:00
rtas-test.c tests: Remove unnecessary global_qtest references 2019-09-05 13:18:52 +02:00
rtc-test.c Merge commit 'df84f17' into HEAD 2019-10-26 15:38:02 +02:00
rtl8139-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
sdhci-test.c
socket-helpers.c tests: specify the address family when checking bind 2019-08-22 17:30:25 +04:00
socket-helpers.h tests: specify the address family when checking bind 2019-08-22 17:30:25 +04:00
spapr-phb-test.c
tco-test.c
test-aio-multithread.c
test-aio.c
test-arm-mptimer.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
test-authz-list.c
test-authz-listfile.c
test-authz-pam.c
test-authz-simple.c
test-base64.c
test-bdrv-drain.c job: drop job_drain 2019-09-10 08:58:43 +02:00
test-bdrv-graph-mod.c Include qemu/main-loop.h less 2019-08-16 13:31:52 +02:00
test-bitcnt.c
test-bitmap.c tests: use g_test_rand_int 2019-12-17 09:05:23 +01:00
test-bitops.c
test-block-backend.c Include qemu/main-loop.h less 2019-08-16 13:31:52 +02:00
test-block-iothread.c block: Add @exact parameter to bdrv_co_truncate() 2019-10-28 12:00:07 +01:00
test-blockjob-txn.c job: drop job_drain 2019-09-10 08:58:43 +02:00
test-blockjob.c tests-blockjob: Use error_free_or_abort() 2019-12-18 08:36:16 +01:00
test-bufferiszero.c
test-char.c tests: skip serial test on windows 2019-10-04 18:49:18 +02:00
test-clone-visitor.c
test-coroutine.c
test-crypto-afsplit.c
test-crypto-block.c
test-crypto-cipher.c
test-crypto-hash.c
test-crypto-hmac.c
test-crypto-ivgen.c
test-crypto-pbkdf.c
test-crypto-secret.c
test-crypto-tlscredsx509.c glib: use portable g_setenv() 2019-12-17 09:05:23 +01:00
test-crypto-tlssession.c glib: use portable g_setenv() 2019-12-17 09:05:23 +01:00
test-crypto-xts.c
test-cutils.c
test-filter-mirror.c
test-filter-redirector.c
test-hbitmap.c util/hbitmap: strict hbitmap_reset 2019-10-17 17:02:32 -04:00
test-hmp.c
test-image-locking.c Include qemu/main-loop.h less 2019-08-16 13:31:52 +02:00
test-int128.c
test-io-channel-buffer.c
test-io-channel-command.c
test-io-channel-file.c
test-io-channel-socket.c socket: Add num connections to qio_channel_socket_async() 2019-09-03 23:24:42 +02:00
test-io-channel-tls.c glib: use portable g_setenv() 2019-12-17 09:05:23 +01:00
test-io-task.c
test-iov.c
test-keyval.c test-keyval: Tighten test of trailing crap after size 2019-12-18 12:28:44 +01:00
test-logging.c Added tests for close and change of logfile. 2019-12-18 20:18:02 +00:00
test-mul64.c
test-netfilter.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
test-opts-visitor.c
test-qapi-util.c
test-qdev-global-props.c Include hw/qdev-properties.h less 2019-08-16 13:31:53 +02:00
test-qdist.c
test-qemu-opts.c
test-qga.c tests: use g_test_rand_int 2019-12-17 09:05:23 +01:00
test-qgraph.c
test-qht-par.c
test-qht.c
test-qmp-cmds.c tests: qapi: Test 'features' of commands 2019-10-22 13:54:13 +02:00
test-qmp-event.c
test-qobject-input-visitor.c
test-qobject-output-visitor.c tests: Clean up initialization of Error *err variables 2019-12-18 08:36:15 +01:00
test-rcu-list.c
test-rcu-simpleq.c
test-rcu-tailq.c
test-replication.c Include qemu/main-loop.h less 2019-08-16 13:31:52 +02:00
test-shift128.c
test-string-input-visitor.c tests: Fix uninitialized byte in test_visitor_in_fuzz 2019-08-20 17:26:19 +02:00
test-string-output-visitor.c tests: Clean up initialization of Error *err variables 2019-12-18 08:36:15 +01:00
test-thread-pool.c
test-throttle.c test-throttle: Fix uninitialized use of burst_length 2019-08-20 17:26:19 +02:00
test-timed-average.c
test-util-filemonitor.c tests/test-util-filemonitor: Skip test on non-x86 Travis containers 2019-12-18 20:17:45 +00:00
test-util-sockets.c socket: Add backlog parameter to socket_listen 2019-09-03 23:24:42 +02:00
test-uuid.c
test-visitor-serialization.c
test-vmstate.c glib: use portable g_setenv() 2019-12-17 09:05:23 +01:00
test-write-threshold.c
test-x86-cpuid-compat.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
test-x86-cpuid.c
test-xbzrle.c
tmp105-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
tpm-crb-swtpm-test.c
tpm-crb-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
tpm-emu.c socket: Add num connections to qio_channel_socket_sync() 2019-09-03 23:24:42 +02:00
tpm-emu.h
tpm-tests.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
tpm-tests.h
tpm-tis-swtpm-test.c
tpm-tis-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
tpm-util.c
tpm-util.h
usb-hcd-ehci-test.c tests: fix usb-hcd-ehci-test compilation 2019-10-01 11:42:27 +02:00
usb-hcd-ohci-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
usb-hcd-uhci-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
usb-hcd-xhci-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
vhost-user-bridge.c core: replace getpagesize() with qemu_real_host_page_size 2019-10-26 15:38:06 +02:00
vhost-user-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
virtio-9p-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
virtio-blk-test.c libqos: access VIRTIO 1.0 vring in little-endian 2019-10-25 07:46:22 -04:00
virtio-ccw-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
virtio-net-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
virtio-rng-test.c
virtio-scsi-test.c virtio-scsi-test: add missing feature negotiation 2019-10-25 07:46:22 -04:00
virtio-serial-test.c tests/libqtest: Use libqtest-single.h in tests that require global_qtest 2019-09-05 13:18:52 +02:00
virtio-test.c
vmgenid-test.c vl: configure accelerators from -accel options 2019-12-17 19:32:26 +01:00
vmxnet3-test.c
wdt_ib700-test.c