diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2020-12-11 22:22:50 +0000 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2020-12-11 22:22:50 +0000 |
commit | a4b307b0eaf44530cf03934e4db161db1ea7389f (patch) | |
tree | 72bc0110dc49d523cf9d30a9ba21c63b0d60a60f | |
parent | f6029bb614cebb0d6c9800990af49d55338231fd (diff) | |
parent | c7454f05171405b8013a9d6b57045cd614ccc386 (diff) |
Merge remote-tracking branch 'remotes/cohuck/tags/s390x-20201211' into staging
First set of 6.0 patches for s390x:
- acceptance test for device detection
- bugfixes
# gpg: Signature made Fri 11 Dec 2020 12:21:45 GMT
# gpg: using RSA key C3D0D66DC3624FF6A8C018CEDECF6B93C6F02FAF
# gpg: issuer "cohuck@redhat.com"
# gpg: Good signature from "Cornelia Huck <conny@cornelia-huck.de>" [unknown]
# gpg: aka "Cornelia Huck <huckc@linux.vnet.ibm.com>" [full]
# gpg: aka "Cornelia Huck <cornelia.huck@de.ibm.com>" [full]
# gpg: aka "Cornelia Huck <cohuck@kernel.org>" [unknown]
# gpg: aka "Cornelia Huck <cohuck@redhat.com>" [unknown]
# Primary key fingerprint: C3D0 D66D C362 4FF6 A8C0 18CE DECF 6B93 C6F0 2FAF
* remotes/cohuck/tags/s390x-20201211:
s390x/cpu: Use timer_free() in the finalize function to avoid memleaks
tests/acceptance: test s390x zpci fid propagation
tests/acceptance: verify s390x device detection
tests/acceptance: test virtio-ccw revision handling
tests/acceptance: add a test for devices on s390x
hw/watchdog/wdt_diag288: Remove unnecessary includes
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r-- | MAINTAINERS | 1 | ||||
-rw-r--r-- | hw/watchdog/wdt_diag288.c | 2 | ||||
-rw-r--r-- | target/s390x/cpu.c | 5 | ||||
-rw-r--r-- | tests/acceptance/machine_s390_ccw_virtio.py | 101 |
4 files changed, 107 insertions, 2 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index aa39490a24..1036c370fa 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -1427,6 +1427,7 @@ F: include/hw/s390x/ F: hw/watchdog/wdt_diag288.c F: include/hw/watchdog/wdt_diag288.h F: default-configs/s390x-softmmu.mak +F: tests/acceptance/machine_s390_ccw_virtio.py T: git https://github.com/cohuck/qemu.git s390-next T: git https://github.com/borntraeger/qemu.git s390-next L: qemu-s390x@nongnu.org diff --git a/hw/watchdog/wdt_diag288.c b/hw/watchdog/wdt_diag288.c index 71a945f0bd..4c4b6a6ab7 100644 --- a/hw/watchdog/wdt_diag288.c +++ b/hw/watchdog/wdt_diag288.c @@ -14,12 +14,10 @@ #include "qemu/osdep.h" #include "sysemu/reset.h" #include "sysemu/watchdog.h" -#include "hw/sysbus.h" #include "qemu/timer.h" #include "hw/watchdog/wdt_diag288.h" #include "migration/vmstate.h" #include "qemu/log.h" -#include "qemu/module.h" static WatchdogTimerModel model = { .wdt_name = TYPE_WDT_DIAG288, diff --git a/target/s390x/cpu.c b/target/s390x/cpu.c index 7b66718c44..8a734c2f8c 100644 --- a/target/s390x/cpu.c +++ b/target/s390x/cpu.c @@ -313,6 +313,11 @@ static void s390_cpu_finalize(Object *obj) #if !defined(CONFIG_USER_ONLY) S390CPU *cpu = S390_CPU(obj); + timer_del(cpu->env.tod_timer); + timer_free(cpu->env.tod_timer); + timer_del(cpu->env.cpu_timer); + timer_free(cpu->env.cpu_timer); + qemu_unregister_reset(s390_cpu_machine_reset_cb, cpu); g_free(cpu->irqstate); #endif diff --git a/tests/acceptance/machine_s390_ccw_virtio.py b/tests/acceptance/machine_s390_ccw_virtio.py new file mode 100644 index 0000000000..81d1408881 --- /dev/null +++ b/tests/acceptance/machine_s390_ccw_virtio.py @@ -0,0 +1,101 @@ +# Functional test that boots an s390x Linux guest with ccw and PCI devices +# attached and checks whether the devices are recognized by Linux +# +# Copyright (c) 2020 Red Hat, Inc. +# +# Author: +# Cornelia Huck <cohuck@redhat.com> +# +# This work is licensed under the terms of the GNU GPL, version 2 or +# later. See the COPYING file in the top-level directory. + + +from avocado_qemu import Test +from avocado_qemu import exec_command_and_wait_for_pattern +from avocado_qemu import wait_for_console_pattern + +class S390CCWVirtioMachine(Test): + KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 ' + + def wait_for_console_pattern(self, success_message, vm=None): + wait_for_console_pattern(self, success_message, + failure_message='Kernel panic - not syncing', + vm=vm) + + timeout = 120 + + def test_s390x_devices(self): + + """ + :avocado: tags=arch:s390x + :avocado: tags=machine:s390-ccw-virtio + """ + + kernel_url = ('https://snapshot.debian.org/archive/debian/' + '20201126T092837Z/dists/buster/main/installer-s390x/' + '20190702+deb10u6/images/generic/kernel.debian') + kernel_hash = '5821fbee57d6220a067a8b967d24595621aa1eb6' + kernel_path = self.fetch_asset(kernel_url, asset_hash=kernel_hash) + + initrd_url = ('https://snapshot.debian.org/archive/debian/' + '20201126T092837Z/dists/buster/main/installer-s390x/' + '20190702+deb10u6/images/generic/initrd.debian') + initrd_hash = '81ba09c97bef46e8f4660ac25b4ac0a5be3a94d6' + initrd_path = self.fetch_asset(initrd_url, asset_hash=initrd_hash) + + self.vm.set_console() + kernel_command_line = (self.KERNEL_COMMON_COMMAND_LINE + + 'console=sclp0 root=/dev/ram0 BOOT_DEBUG=3') + self.vm.add_args('-nographic', + '-kernel', kernel_path, + '-initrd', initrd_path, + '-append', kernel_command_line, + '-device', 'virtio-net-ccw,devno=fe.1.1111', + '-device', + 'virtio-rng-ccw,devno=fe.2.0000,max_revision=0', + '-device', + 'virtio-rng-ccw,devno=fe.3.1234,max_revision=2', + '-device', 'zpci,uid=5,target=zzz', + '-device', 'virtio-net-pci,id=zzz', + '-device', 'zpci,uid=0xa,fid=12,target=serial', + '-device', 'virtio-serial-pci,id=serial') + self.vm.launch() + + shell_ready = "sh: can't access tty; job control turned off" + self.wait_for_console_pattern(shell_ready) + # first debug shell is too early, we need to wait for device detection + exec_command_and_wait_for_pattern(self, 'exit', shell_ready) + + ccw_bus_ids="0.1.1111 0.2.0000 0.3.1234" + pci_bus_ids="0005:00:00.0 000a:00:00.0" + exec_command_and_wait_for_pattern(self, 'ls /sys/bus/ccw/devices/', + ccw_bus_ids) + exec_command_and_wait_for_pattern(self, 'ls /sys/bus/pci/devices/', + pci_bus_ids) + # check that the device at 0.2.0000 is in legacy mode, while the + # device at 0.3.1234 has the virtio-1 feature bit set + virtio_rng_features="00000000000000000000000000001100" + \ + "10000000000000000000000000000000" + virtio_rng_features_legacy="00000000000000000000000000001100" + \ + "00000000000000000000000000000000" + exec_command_and_wait_for_pattern(self, + 'cat /sys/bus/ccw/devices/0.2.0000/virtio?/features', + virtio_rng_features_legacy) + exec_command_and_wait_for_pattern(self, + 'cat /sys/bus/ccw/devices/0.3.1234/virtio?/features', + virtio_rng_features) + # verify that we indeed have virtio-net devices (without having the + # virtio-net driver handy) + exec_command_and_wait_for_pattern(self, + 'cat /sys/bus/ccw/devices/0.1.1111/cutype', + '3832/01') + exec_command_and_wait_for_pattern(self, + 'cat /sys/bus/pci/devices/0005\:00\:00.0/subsystem_vendor', + '0x1af4') + exec_command_and_wait_for_pattern(self, + 'cat /sys/bus/pci/devices/0005\:00\:00.0/subsystem_device', + '0x0001') + # check fid propagation + exec_command_and_wait_for_pattern(self, + 'cat /sys/bus/pci/devices/000a\:00\:00.0/function_id', + '0x0000000c') |