mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-11 03:24:58 -06:00
* 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----- 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>
This commit is contained in:
commit
1a2d52c7fc
12 changed files with 181 additions and 30 deletions
|
@ -106,6 +106,7 @@ jobs:
|
||||||
- libvdeplug-dev
|
- libvdeplug-dev
|
||||||
- libvte-2.91-dev
|
- libvte-2.91-dev
|
||||||
- ninja-build
|
- ninja-build
|
||||||
|
- python3-tomli
|
||||||
# Tests dependencies
|
# Tests dependencies
|
||||||
- genisoimage
|
- genisoimage
|
||||||
env:
|
env:
|
||||||
|
@ -141,6 +142,7 @@ jobs:
|
||||||
- libvdeplug-dev
|
- libvdeplug-dev
|
||||||
- libvte-2.91-dev
|
- libvte-2.91-dev
|
||||||
- ninja-build
|
- ninja-build
|
||||||
|
- python3-tomli
|
||||||
# Tests dependencies
|
# Tests dependencies
|
||||||
- genisoimage
|
- genisoimage
|
||||||
env:
|
env:
|
||||||
|
@ -175,6 +177,7 @@ jobs:
|
||||||
- libvdeplug-dev
|
- libvdeplug-dev
|
||||||
- libvte-2.91-dev
|
- libvte-2.91-dev
|
||||||
- ninja-build
|
- ninja-build
|
||||||
|
- python3-tomli
|
||||||
# Tests dependencies
|
# Tests dependencies
|
||||||
- genisoimage
|
- genisoimage
|
||||||
env:
|
env:
|
||||||
|
@ -215,6 +218,7 @@ jobs:
|
||||||
- libzstd-dev
|
- libzstd-dev
|
||||||
- nettle-dev
|
- nettle-dev
|
||||||
- ninja-build
|
- ninja-build
|
||||||
|
- python3-tomli
|
||||||
# Tests dependencies
|
# Tests dependencies
|
||||||
- genisoimage
|
- genisoimage
|
||||||
env:
|
env:
|
||||||
|
@ -231,6 +235,7 @@ jobs:
|
||||||
- ninja-build
|
- ninja-build
|
||||||
- flex
|
- flex
|
||||||
- bison
|
- bison
|
||||||
|
- python3-tomli
|
||||||
env:
|
env:
|
||||||
- TEST_CMD="make check check-tcg V=1"
|
- TEST_CMD="make check check-tcg V=1"
|
||||||
- CONFIG="--disable-containers --disable-system"
|
- CONFIG="--disable-containers --disable-system"
|
||||||
|
@ -263,6 +268,7 @@ jobs:
|
||||||
- libvdeplug-dev
|
- libvdeplug-dev
|
||||||
- libvte-2.91-dev
|
- libvte-2.91-dev
|
||||||
- ninja-build
|
- ninja-build
|
||||||
|
- python3-tomli
|
||||||
env:
|
env:
|
||||||
- TEST_CMD="make check-unit"
|
- TEST_CMD="make check-unit"
|
||||||
- CONFIG="--disable-containers --disable-tcg --enable-kvm --disable-tools
|
- CONFIG="--disable-containers --disable-tcg --enable-kvm --disable-tools
|
||||||
|
|
|
@ -539,7 +539,9 @@ which will output an execution trace following this structure::
|
||||||
0, 0xd34, 0xf9c8f000, "bl #0x10c8"
|
0, 0xd34, 0xf9c8f000, "bl #0x10c8"
|
||||||
0, 0x10c8, 0xfff96c43, "ldr r3, [r0, #0x44]", load, 0x200000e4, RAM
|
0, 0x10c8, 0xfff96c43, "ldr r3, [r0, #0x44]", load, 0x200000e4, RAM
|
||||||
|
|
||||||
the output can be filtered to only track certain instructions or
|
Please note that you need to configure QEMU with Capstone support to get disassembly.
|
||||||
|
|
||||||
|
The output can be filtered to only track certain instructions or
|
||||||
addresses using the ``ifilter`` or ``afilter`` options. You can stack the
|
addresses using the ``ifilter`` or ``afilter`` options. You can stack the
|
||||||
arguments if required::
|
arguments if required::
|
||||||
|
|
||||||
|
|
|
@ -361,15 +361,77 @@ bool ais_needed(void *opaque)
|
||||||
return s->ais_supported;
|
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 = {
|
static const VMStateDescription qemu_s390_flic_vmstate = {
|
||||||
.name = "qemu-s390-flic",
|
.name = "qemu-s390-flic",
|
||||||
.version_id = 1,
|
.version_id = 1,
|
||||||
.minimum_version_id = 1,
|
.minimum_version_id = 1,
|
||||||
.needed = ais_needed,
|
.needed = qemu_s390_flic_state_needed,
|
||||||
.fields = (const VMStateField[]) {
|
.fields = (const VMStateField[]) {
|
||||||
VMSTATE_UINT8(simm, QEMUS390FLICState),
|
VMSTATE_UINT8_TEST(simm, QEMUS390FLICState, ais_needed_v),
|
||||||
VMSTATE_UINT8(nimm, QEMUS390FLICState),
|
VMSTATE_UINT8_TEST(nimm, QEMUS390FLICState, ais_needed_v),
|
||||||
VMSTATE_END_OF_LIST()
|
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)
|
static void qemu_s390_flic_class_init(ObjectClass *oc, void *data)
|
||||||
{
|
{
|
||||||
DeviceClass *dc = DEVICE_CLASS(oc);
|
DeviceClass *dc = DEVICE_CLASS(oc);
|
||||||
S390FLICStateClass *fsc = S390_FLIC_COMMON_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->reset = qemu_s390_flic_reset;
|
||||||
dc->vmsd = &qemu_s390_flic_vmstate;
|
dc->vmsd = &qemu_s390_flic_vmstate;
|
||||||
fsc->register_io_adapter = qemu_s390_register_io_adapter;
|
fsc->register_io_adapter = qemu_s390_register_io_adapter;
|
||||||
|
|
|
@ -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)
|
static void s390_create_virtio_net(BusState *bus, const char *name)
|
||||||
{
|
{
|
||||||
DeviceState *dev;
|
DeviceState *dev;
|
||||||
|
int cnt = 0;
|
||||||
|
|
||||||
while ((dev = qemu_create_nic_device(name, true, "virtio"))) {
|
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);
|
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 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);
|
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, 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);
|
DEFINE_CCW_MACHINE(9, 0);
|
||||||
|
|
||||||
|
|
|
@ -116,6 +116,7 @@ struct QEMUS390FLICState {
|
||||||
uint8_t simm;
|
uint8_t simm;
|
||||||
uint8_t nimm;
|
uint8_t nimm;
|
||||||
QLIST_HEAD(, QEMUS390FlicIO) io[8];
|
QLIST_HEAD(, QEMUS390FlicIO) io[8];
|
||||||
|
bool migrate_all_state;
|
||||||
};
|
};
|
||||||
|
|
||||||
uint32_t qemu_s390_flic_dequeue_service(QEMUS390FLICState *flic);
|
uint32_t qemu_s390_flic_dequeue_service(QEMUS390FLICState *flic);
|
||||||
|
|
|
@ -40,7 +40,7 @@ EXTRA_CFLAGS += -ffreestanding -fno-delete-null-pointer-checks -fno-common -fPIE
|
||||||
EXTRA_CFLAGS += -fwrapv -fno-strict-aliasing -fno-asynchronous-unwind-tables
|
EXTRA_CFLAGS += -fwrapv -fno-strict-aliasing -fno-asynchronous-unwind-tables
|
||||||
EXTRA_CFLAGS += -msoft-float
|
EXTRA_CFLAGS += -msoft-float
|
||||||
EXTRA_CFLAGS += -std=gnu99
|
EXTRA_CFLAGS += -std=gnu99
|
||||||
LDFLAGS += -Wl,-pie -nostdlib
|
LDFLAGS += -Wl,-pie -nostdlib -z noexecstack
|
||||||
|
|
||||||
cc-test = $(CC) -Werror $1 -c -o /dev/null -xc /dev/null >/dev/null 2>/dev/null
|
cc-test = $(CC) -Werror $1 -c -o /dev/null -xc /dev/null >/dev/null 2>/dev/null
|
||||||
cc-option = if $(call cc-test, $1); then \
|
cc-option = if $(call cc-test, $1); then \
|
||||||
|
@ -55,8 +55,6 @@ config-cc.mak: Makefile
|
||||||
$(call cc-option,-march=z900,-march=z10)) 3> config-cc.mak
|
$(call cc-option,-march=z900,-march=z10)) 3> config-cc.mak
|
||||||
-include config-cc.mak
|
-include config-cc.mak
|
||||||
|
|
||||||
LDFLAGS += -Wl,-pie -nostdlib -z noexecstack
|
|
||||||
|
|
||||||
build-all: s390-ccw.img s390-netboot.img
|
build-all: s390-ccw.img s390-netboot.img
|
||||||
|
|
||||||
s390-ccw.elf: $(OBJECTS)
|
s390-ccw.elf: $(OBJECTS)
|
||||||
|
|
69
tests/avocado/hotplug_blk.py
Normal file
69
tests/avocado/hotplug_blk.py
Normal file
|
@ -0,0 +1,69 @@
|
||||||
|
# Functional test that hotplugs a virtio blk disk and checks it on a Linux
|
||||||
|
# guest
|
||||||
|
#
|
||||||
|
# Copyright (c) 2021 Red Hat, Inc.
|
||||||
|
# Copyright (c) Yandex
|
||||||
|
#
|
||||||
|
# This work is licensed under the terms of the GNU GPL, version 2 or
|
||||||
|
# later. See the COPYING file in the top-level directory.
|
||||||
|
|
||||||
|
import time
|
||||||
|
|
||||||
|
from avocado_qemu import LinuxTest
|
||||||
|
|
||||||
|
|
||||||
|
class HotPlug(LinuxTest):
|
||||||
|
def blockdev_add(self) -> None:
|
||||||
|
self.vm.cmd('blockdev-add', **{
|
||||||
|
'driver': 'null-co',
|
||||||
|
'size': 1073741824,
|
||||||
|
'node-name': 'disk'
|
||||||
|
})
|
||||||
|
|
||||||
|
def assert_vda(self) -> None:
|
||||||
|
self.ssh_command('test -e /sys/block/vda')
|
||||||
|
|
||||||
|
def assert_no_vda(self) -> None:
|
||||||
|
with self.assertRaises(AssertionError):
|
||||||
|
self.assert_vda()
|
||||||
|
|
||||||
|
def plug(self) -> None:
|
||||||
|
args = {
|
||||||
|
'driver': 'virtio-blk-pci',
|
||||||
|
'drive': 'disk',
|
||||||
|
'id': 'virtio-disk0',
|
||||||
|
'bus': 'pci.1',
|
||||||
|
'addr': 1
|
||||||
|
}
|
||||||
|
|
||||||
|
self.assert_no_vda()
|
||||||
|
self.vm.cmd('device_add', args)
|
||||||
|
try:
|
||||||
|
self.assert_vda()
|
||||||
|
except AssertionError:
|
||||||
|
time.sleep(1)
|
||||||
|
self.assert_vda()
|
||||||
|
|
||||||
|
def unplug(self) -> None:
|
||||||
|
self.vm.cmd('device_del', id='virtio-disk0')
|
||||||
|
|
||||||
|
self.vm.event_wait('DEVICE_DELETED', 1.0,
|
||||||
|
match={'data': {'device': 'virtio-disk0'}})
|
||||||
|
|
||||||
|
self.assert_no_vda()
|
||||||
|
|
||||||
|
def test(self) -> None:
|
||||||
|
"""
|
||||||
|
:avocado: tags=arch:x86_64
|
||||||
|
:avocado: tags=machine:q35
|
||||||
|
:avocado: tags=accel:kvm
|
||||||
|
"""
|
||||||
|
self.require_accelerator('kvm')
|
||||||
|
self.vm.add_args('-accel', 'kvm')
|
||||||
|
self.vm.add_args('-device', 'pcie-pci-bridge,id=pci.1,bus=pcie.0')
|
||||||
|
|
||||||
|
self.launch_and_wait()
|
||||||
|
self.blockdev_add()
|
||||||
|
|
||||||
|
self.plug()
|
||||||
|
self.unplug()
|
|
@ -266,7 +266,6 @@ static void test_device_intro_concrete(const void *args)
|
||||||
|
|
||||||
qobject_unref(types);
|
qobject_unref(types);
|
||||||
qtest_quit(qts);
|
qtest_quit(qts);
|
||||||
g_free((void *)args);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void test_abstract_interfaces(void)
|
static void test_abstract_interfaces(void)
|
||||||
|
@ -310,12 +309,12 @@ static void add_machine_test_case(const char *mname)
|
||||||
|
|
||||||
path = g_strdup_printf("device/introspect/concrete/defaults/%s", mname);
|
path = g_strdup_printf("device/introspect/concrete/defaults/%s", mname);
|
||||||
args = g_strdup_printf("-M %s", mname);
|
args = g_strdup_printf("-M %s", mname);
|
||||||
qtest_add_data_func(path, args, test_device_intro_concrete);
|
qtest_add_data_func_full(path, args, test_device_intro_concrete, g_free);
|
||||||
g_free(path);
|
g_free(path);
|
||||||
|
|
||||||
path = g_strdup_printf("device/introspect/concrete/nodefaults/%s", mname);
|
path = g_strdup_printf("device/introspect/concrete/nodefaults/%s", mname);
|
||||||
args = g_strdup_printf("-nodefaults -M %s", mname);
|
args = g_strdup_printf("-nodefaults -M %s", mname);
|
||||||
qtest_add_data_func(path, args, test_device_intro_concrete);
|
qtest_add_data_func_full(path, args, test_device_intro_concrete, g_free);
|
||||||
g_free(path);
|
g_free(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -330,7 +329,7 @@ int main(int argc, char **argv)
|
||||||
qtest_add_func("device/introspect/abstract-interfaces", test_abstract_interfaces);
|
qtest_add_func("device/introspect/abstract-interfaces", test_abstract_interfaces);
|
||||||
if (g_test_quick()) {
|
if (g_test_quick()) {
|
||||||
qtest_add_data_func("device/introspect/concrete/defaults/none",
|
qtest_add_data_func("device/introspect/concrete/defaults/none",
|
||||||
g_strdup(common_args), test_device_intro_concrete);
|
common_args, test_device_intro_concrete);
|
||||||
} else {
|
} else {
|
||||||
qtest_cb_for_every_machine(add_machine_test_case, true);
|
qtest_cb_for_every_machine(add_machine_test_case, true);
|
||||||
}
|
}
|
||||||
|
|
|
@ -749,6 +749,8 @@ QDict *qtest_qmp_receive(QTestState *s)
|
||||||
response, s->eventData)) {
|
response, s->eventData)) {
|
||||||
/* Stash the event for a later consumption */
|
/* Stash the event for a later consumption */
|
||||||
s->pending_events = g_list_append(s->pending_events, response);
|
s->pending_events = g_list_append(s->pending_events, response);
|
||||||
|
} else {
|
||||||
|
qobject_unref(response);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1512,6 +1514,7 @@ static struct MachInfo *qtest_get_machines(const char *var)
|
||||||
int idx;
|
int idx;
|
||||||
|
|
||||||
if (g_strcmp0(qemu_var, var)) {
|
if (g_strcmp0(qemu_var, var)) {
|
||||||
|
g_free(qemu_var);
|
||||||
qemu_var = g_strdup(var);
|
qemu_var = g_strdup(var);
|
||||||
|
|
||||||
/* new qemu, clear the cache */
|
/* new qemu, clear the cache */
|
||||||
|
|
|
@ -3823,16 +3823,6 @@ int main(int argc, char **argv)
|
||||||
test_vmstate_checker_script);
|
test_vmstate_checker_script);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
|
||||||
* On s390x with TCG, migration is observed to hang due to the 'pending'
|
|
||||||
* state of the flic interrupt controller not being migrated or
|
|
||||||
* reconstructed post-migration. Disable it until the problem is resolved.
|
|
||||||
*/
|
|
||||||
if (g_str_equal(arch, "s390x") && !has_kvm) {
|
|
||||||
g_test_message("Skipping tests: s390x host with KVM is required");
|
|
||||||
goto test_add_done;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (is_x86) {
|
if (is_x86) {
|
||||||
migration_test_add("/migration/precopy/unix/suspend/live",
|
migration_test_add("/migration/precopy/unix/suspend/live",
|
||||||
test_precopy_unix_suspend_live);
|
test_precopy_unix_suspend_live);
|
||||||
|
@ -4036,8 +4026,6 @@ int main(int argc, char **argv)
|
||||||
test_vcpu_dirty_limit);
|
test_vcpu_dirty_limit);
|
||||||
}
|
}
|
||||||
|
|
||||||
test_add_done:
|
|
||||||
|
|
||||||
ret = g_test_run();
|
ret = g_test_run();
|
||||||
|
|
||||||
g_assert_cmpint(ret, ==, 0);
|
g_assert_cmpint(ret, ==, 0);
|
||||||
|
|
|
@ -33,7 +33,6 @@
|
||||||
static char *old_path;
|
static char *old_path;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* qos_set_machines_devices_available(): sets availability of qgraph
|
* qos_set_machines_devices_available(): sets availability of qgraph
|
||||||
* machines and devices.
|
* machines and devices.
|
||||||
|
@ -191,6 +190,12 @@ static void subprocess_run_one_test(const void *arg)
|
||||||
g_test_trap_assert_passed();
|
g_test_trap_assert_passed();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void destroy_pathv(void *arg)
|
||||||
|
{
|
||||||
|
g_free(((char **)arg)[0]);
|
||||||
|
g_free(arg);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* in this function, 2 path will be built:
|
* in this function, 2 path will be built:
|
||||||
* path_str, a one-string path (ex "pc/i440FX-pcihost/...")
|
* path_str, a one-string path (ex "pc/i440FX-pcihost/...")
|
||||||
|
@ -295,10 +300,13 @@ static void walk_path(QOSGraphNode *orig_path, int len)
|
||||||
if (path->u.test.subprocess) {
|
if (path->u.test.subprocess) {
|
||||||
gchar *subprocess_path = g_strdup_printf("/%s/%s/subprocess",
|
gchar *subprocess_path = g_strdup_printf("/%s/%s/subprocess",
|
||||||
qtest_get_arch(), path_str);
|
qtest_get_arch(), path_str);
|
||||||
qtest_add_data_func(path_str, subprocess_path, subprocess_run_one_test);
|
qtest_add_data_func_full(path_str, subprocess_path,
|
||||||
g_test_add_data_func(subprocess_path, path_vec, run_one_test);
|
subprocess_run_one_test, g_free);
|
||||||
|
g_test_add_data_func_full(subprocess_path, path_vec,
|
||||||
|
run_one_test, destroy_pathv);
|
||||||
} else {
|
} else {
|
||||||
qtest_add_data_func(path_str, path_vec, run_one_test);
|
qtest_add_data_func_full(path_str, path_vec,
|
||||||
|
run_one_test, destroy_pathv);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_free(path_str);
|
g_free(path_str);
|
||||||
|
|
|
@ -928,7 +928,7 @@ static void *vhost_user_test_setup_reconnect(GString *cmd_line, void *arg)
|
||||||
{
|
{
|
||||||
TestServer *s = test_server_new("reconnect", arg);
|
TestServer *s = test_server_new("reconnect", arg);
|
||||||
|
|
||||||
g_thread_new("connect", connect_thread, s);
|
g_thread_unref(g_thread_new("connect", connect_thread, s));
|
||||||
append_mem_opts(s, cmd_line, 256, TEST_MEMFD_AUTO);
|
append_mem_opts(s, cmd_line, 256, TEST_MEMFD_AUTO);
|
||||||
s->vu_ops->append_opts(s, cmd_line, ",server=on");
|
s->vu_ops->append_opts(s, cmd_line, ",server=on");
|
||||||
|
|
||||||
|
@ -965,7 +965,7 @@ static void *vhost_user_test_setup_connect_fail(GString *cmd_line, void *arg)
|
||||||
|
|
||||||
s->test_fail = true;
|
s->test_fail = true;
|
||||||
|
|
||||||
g_thread_new("connect", connect_thread, s);
|
g_thread_unref(g_thread_new("connect", connect_thread, s));
|
||||||
append_mem_opts(s, cmd_line, 256, TEST_MEMFD_AUTO);
|
append_mem_opts(s, cmd_line, 256, TEST_MEMFD_AUTO);
|
||||||
s->vu_ops->append_opts(s, cmd_line, ",server=on");
|
s->vu_ops->append_opts(s, cmd_line, ",server=on");
|
||||||
|
|
||||||
|
@ -980,7 +980,7 @@ static void *vhost_user_test_setup_flags_mismatch(GString *cmd_line, void *arg)
|
||||||
|
|
||||||
s->test_flags = TEST_FLAGS_DISCONNECT;
|
s->test_flags = TEST_FLAGS_DISCONNECT;
|
||||||
|
|
||||||
g_thread_new("connect", connect_thread, s);
|
g_thread_unref(g_thread_new("connect", connect_thread, s));
|
||||||
append_mem_opts(s, cmd_line, 256, TEST_MEMFD_AUTO);
|
append_mem_opts(s, cmd_line, 256, TEST_MEMFD_AUTO);
|
||||||
s->vu_ops->append_opts(s, cmd_line, ",server=on");
|
s->vu_ops->append_opts(s, cmd_line, ",server=on");
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue