aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorRichard Henderson <richard.henderson@linaro.org>2024-07-02 15:49:08 -0700
committerRichard Henderson <richard.henderson@linaro.org>2024-07-02 15:49:08 -0700
commit1a2d52c7fcaeaaf4f2fe8d4d5183dccaeab67768 (patch)
treec38a7d25d877f5d5f5fecb4b59037212bbe60a2b /hw
parent6746482d12da3b6e4d3cdf06481a0027a797f719 (diff)
parente3e2708fee10e6df413c36a71b100c59710e727e (diff)
Merge tag 'pull-request-2024-07-02' of https://gitlab.com/thuth/qemu into staging
* Fix interrupt controller migration on s390x with TCG and enable qtest * Fix memory leaks in qtests * Use a proper qom-tree parent for s390x virtio-net devices * Add hotplug avocado test for virtio-blk * Fix Travis jobs (need python3-tomli now) # -----BEGIN PGP SIGNATURE----- # # iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmaD1qsRHHRodXRoQHJl # ZGhhdC5jb20ACgkQLtnXdP5wLbWOtg//a+6nRcV8crCGzMaxhH32NxcjvV7TPiAI # FioqOsomKfKKTMIDlbjsgQiQWqGrN/mdnxSzasypxZrC3eoDYJCIUyQfR2iGe4t2 # JJ4gQhQGuXkSstGErj8yw83UnG1drG+XuZ/psSij4/R2ft6Me8miFSh3cCgIm541 # 0DtffV6rAXIEqA+bswKsPq+7bq6ZCxZjaWgKhzfP5RNnpjPvHYMDDPZt9a2Fk9xC # d3TILh/0djuVr8nZNUkQJBT5EU6dxVDb1JMqn4G6e6kWtiDBh/XwvMtC0KHVCJH1 # tHDz7n+FpwBfpo1cz0Y/Bn9pTW4K9KZ+GVlLOihfbh7Eaix0+RPzLKCigLVg1v8I # HaNFr70FxF5Xzmvie36arEKf0CwQCinxvfM9USBD0uP3tOzSZwX2XxM0+FBIjUf3 # fYIY8qV1hQZM5tXFxtU5LW4A64pVGwEHlEIcodxo8mY/DnZUdIvB5L5C4rxATnVr # t2eWc23sGdMZgKxUtlG0PIr80ImkYBWFOLztUmDPOff6igiyw2ZxaLQHyERPEc0O # 1CL4K4K5FKNtJgjSwJyU1NquGKk85vUSjiUW1JOvInUFjRECIQ7+R41p6FU+eTHO # l50cKaf2TCWqDOwMOjFYOHj6TWZGXnTmkSN60g0OLioy3UY+Kghd2Zq+aTK5ptyh # 1BhcvTin9Zg= # =lLG3 # -----END PGP SIGNATURE----- # gpg: Signature made Tue 02 Jul 2024 03:30:03 AM PDT # gpg: using RSA key 27B88847EEE0250118F3EAB92ED9D774FE702DB5 # gpg: issuer "thuth@redhat.com" # gpg: Good signature from "Thomas Huth <th.huth@gmx.de>" [full] # gpg: aka "Thomas Huth <thuth@redhat.com>" [full] # gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown] # gpg: aka "Thomas Huth <huth@tuxfamily.org>" [full] * tag 'pull-request-2024-07-02' of https://gitlab.com/thuth/qemu: pc-bios/s390-ccw: Remove duplicated LDFLAGS .travis.yml: Install python3-tomli in all build jobs tests/avocado: add hotplug_blk test hw/s390x: Attach default virtio-net devices to the /machine/virtual-css-bridge docs: add precision about capstone for execlog plugin tests/qtest: Free GThread tests/qtest: Free paths tests/qtest: Free old machine variable name tests/qtest: Free unused QMP response tests/qtest: Use qtest_add_data_func_full() tests/qtest/migration-test: enable on s390x with TCG hw/intc/s390_flic: Fix interrupt controller migration on s390x with TCG Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
Diffstat (limited to 'hw')
-rw-r--r--hw/intc/s390_flic.c75
-rw-r--r--hw/s390x/s390-virtio-ccw.c8
2 files changed, 80 insertions, 3 deletions
diff --git a/hw/intc/s390_flic.c b/hw/intc/s390_flic.c
index 6771645699..a91a4a47e8 100644
--- a/hw/intc/s390_flic.c
+++ b/hw/intc/s390_flic.c
@@ -361,15 +361,77 @@ bool ais_needed(void *opaque)
return s->ais_supported;
}
+static bool ais_needed_v(void *opaque, int version_id)
+{
+ return ais_needed(opaque);
+}
+
+static bool qemu_s390_flic_full_state_needed(void *opaque)
+{
+ QEMUS390FLICState *s = opaque;
+
+ return s->migrate_all_state;
+}
+
+static bool qemu_s390_flic_state_needed(void *opaque)
+{
+ return ais_needed(opaque) || qemu_s390_flic_full_state_needed(opaque);
+}
+
+static const VMStateDescription vmstate_qemu_s390_flic_io = {
+ .name = "qemu-s390-flic-io",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .fields = (const VMStateField[]) {
+ VMSTATE_UINT16(id, QEMUS390FlicIO),
+ VMSTATE_UINT16(nr, QEMUS390FlicIO),
+ VMSTATE_UINT32(parm, QEMUS390FlicIO),
+ VMSTATE_UINT32(word, QEMUS390FlicIO),
+ VMSTATE_END_OF_LIST()
+ },
+};
+
+static const VMStateDescription vmstate_qemu_s390_flic_full = {
+ .name = "qemu-s390-flic-full",
+ .version_id = 1,
+ .minimum_version_id = 1,
+ .needed = qemu_s390_flic_full_state_needed,
+ .fields = (const VMStateField[]) {
+ VMSTATE_UINT32(pending, QEMUS390FLICState),
+ VMSTATE_UINT32(service_param, QEMUS390FLICState),
+ VMSTATE_QLIST_V(io[0], QEMUS390FLICState, 1,
+ vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
+ VMSTATE_QLIST_V(io[1], QEMUS390FLICState, 1,
+ vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
+ VMSTATE_QLIST_V(io[2], QEMUS390FLICState, 1,
+ vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
+ VMSTATE_QLIST_V(io[3], QEMUS390FLICState, 1,
+ vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
+ VMSTATE_QLIST_V(io[4], QEMUS390FLICState, 1,
+ vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
+ VMSTATE_QLIST_V(io[5], QEMUS390FLICState, 1,
+ vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
+ VMSTATE_QLIST_V(io[6], QEMUS390FLICState, 1,
+ vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
+ VMSTATE_QLIST_V(io[7], QEMUS390FLICState, 1,
+ vmstate_qemu_s390_flic_io, QEMUS390FlicIO, next),
+ VMSTATE_END_OF_LIST()
+ }
+};
+
static const VMStateDescription qemu_s390_flic_vmstate = {
.name = "qemu-s390-flic",
.version_id = 1,
.minimum_version_id = 1,
- .needed = ais_needed,
+ .needed = qemu_s390_flic_state_needed,
.fields = (const VMStateField[]) {
- VMSTATE_UINT8(simm, QEMUS390FLICState),
- VMSTATE_UINT8(nimm, QEMUS390FLICState),
+ VMSTATE_UINT8_TEST(simm, QEMUS390FLICState, ais_needed_v),
+ VMSTATE_UINT8_TEST(nimm, QEMUS390FLICState, ais_needed_v),
VMSTATE_END_OF_LIST()
+ },
+ .subsections = (const VMStateDescription * const []) {
+ &vmstate_qemu_s390_flic_full,
+ NULL
}
};
@@ -383,11 +445,18 @@ static void qemu_s390_flic_instance_init(Object *obj)
}
}
+static Property qemu_s390_flic_properties[] = {
+ DEFINE_PROP_BOOL("migrate-all-state", QEMUS390FLICState,
+ migrate_all_state, true),
+ DEFINE_PROP_END_OF_LIST(),
+};
+
static void qemu_s390_flic_class_init(ObjectClass *oc, void *data)
{
DeviceClass *dc = DEVICE_CLASS(oc);
S390FLICStateClass *fsc = S390_FLIC_COMMON_CLASS(oc);
+ device_class_set_props(dc, qemu_s390_flic_properties);
dc->reset = qemu_s390_flic_reset;
dc->vmsd = &qemu_s390_flic_vmstate;
fsc->register_io_adapter = qemu_s390_register_io_adapter;
diff --git a/hw/s390x/s390-virtio-ccw.c b/hw/s390x/s390-virtio-ccw.c
index 336cb8c6d4..5f23c5ad16 100644
--- a/hw/s390x/s390-virtio-ccw.c
+++ b/hw/s390x/s390-virtio-ccw.c
@@ -217,8 +217,11 @@ static void s390_init_ipl_dev(const char *kernel_filename,
static void s390_create_virtio_net(BusState *bus, const char *name)
{
DeviceState *dev;
+ int cnt = 0;
while ((dev = qemu_create_nic_device(name, true, "virtio"))) {
+ g_autofree char *childname = g_strdup_printf("%s[%d]", name, cnt++);
+ object_property_add_child(OBJECT(bus), childname, OBJECT(dev));
qdev_realize_and_unref(dev, bus, &error_fatal);
}
}
@@ -875,8 +878,13 @@ static void ccw_machine_9_0_instance_options(MachineState *machine)
static void ccw_machine_9_0_class_options(MachineClass *mc)
{
+ static GlobalProperty compat[] = {
+ { TYPE_QEMU_S390_FLIC, "migrate-all-state", "off", },
+ };
+
ccw_machine_9_1_class_options(mc);
compat_props_add(mc->compat_props, hw_compat_9_0, hw_compat_9_0_len);
+ compat_props_add(mc->compat_props, compat, G_N_ELEMENTS(compat));
}
DEFINE_CCW_MACHINE(9, 0);