Testing and documentation updates:
- bump avocado to 101.0 - use snapshots for tuxrun baseline tests - add sbda-ref test to avocado - avoid spurious re-configure in gitlab - better description of blockdev options - drop FreeBSD 12 from Cirrus CI - fix up the ast2[56]00 tests to be more stable - improve coverage of ppc64 tests in tuxrun baselines - limit plugin tests to just the generic multiarch binaries -----BEGIN PGP SIGNATURE----- iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmRKgI0ACgkQ+9DbCVqe KkQG9Qf/fvSaiNvkttmb0OFDf3+Qz1uQ33YzLZxETCwI1cSqpGZbssQUrTJZWgpu c7FHzdOnTem3Q3PsBY9UN5oqm5IraXEu+nZRO+QyCwHEZzdL9DBfJs46La4BkWG6 9vXbNtXLUPd6qJy9ntcZzRShrYy0x0KeszDq7371LS/fng+zMtaIhm4ck0fVWKnj htrZEN6nn+CqEnvOc06ICmxiysUVLGRScWKgAHCS9ORGyOtZsj3vWafBoIC6hwzi oM3kebhFsVOdbGdL0ZiBdHZqUGAEq3gr+3CpX/48bQ0pYnuYMX8iHk1FhqEK7Adk H9ZLnpYUXVyt70rJUjImPyIHpdyq0A== =fCif -----END PGP SIGNATURE----- Merge tag 'pull-testing-docs-270423-1' of https://gitlab.com/stsquad/qemu into staging Testing and documentation updates: - bump avocado to 101.0 - use snapshots for tuxrun baseline tests - add sbda-ref test to avocado - avoid spurious re-configure in gitlab - better description of blockdev options - drop FreeBSD 12 from Cirrus CI - fix up the ast2[56]00 tests to be more stable - improve coverage of ppc64 tests in tuxrun baselines - limit plugin tests to just the generic multiarch binaries # -----BEGIN PGP SIGNATURE----- # # iQEzBAABCgAdFiEEZoWumedRZ7yvyN81+9DbCVqeKkQFAmRKgI0ACgkQ+9DbCVqe # KkQG9Qf/fvSaiNvkttmb0OFDf3+Qz1uQ33YzLZxETCwI1cSqpGZbssQUrTJZWgpu # c7FHzdOnTem3Q3PsBY9UN5oqm5IraXEu+nZRO+QyCwHEZzdL9DBfJs46La4BkWG6 # 9vXbNtXLUPd6qJy9ntcZzRShrYy0x0KeszDq7371LS/fng+zMtaIhm4ck0fVWKnj # htrZEN6nn+CqEnvOc06ICmxiysUVLGRScWKgAHCS9ORGyOtZsj3vWafBoIC6hwzi # oM3kebhFsVOdbGdL0ZiBdHZqUGAEq3gr+3CpX/48bQ0pYnuYMX8iHk1FhqEK7Adk # H9ZLnpYUXVyt70rJUjImPyIHpdyq0A== # =fCif # -----END PGP SIGNATURE----- # gpg: Signature made Thu 27 Apr 2023 03:02:53 PM BST # gpg: using RSA key 6685AE99E75167BCAFC8DF35FBD0DB095A9E2A44 # gpg: Good signature from "Alex Bennée (Master Work Key) <alex.bennee@linaro.org>" [undefined] # gpg: WARNING: This key is not certified with a trusted signature! # gpg: There is no indication that the signature belongs to the owner. # Primary key fingerprint: 6685 AE99 E751 67BC AFC8 DF35 FBD0 DB09 5A9E 2A44 * tag 'pull-testing-docs-270423-1' of https://gitlab.com/stsquad/qemu: docs/style: call out the use of GUARD macros docs/devel: mention the spacing requirement for QOM docs/devel: make a statement about includes docs/system: remove excessive punctuation from guest-loader docs qemu-options.hx: Update descriptions of memory options for NUMA node tests/tcg: limit the scope of the plugin tests tests/avocado/tuxrun_baselines.py: improve code coverage for ppc64 avocado_qemu/__init__.py: factor out the qemu-img finding MAINTAINERS: Cover tests/avocado/machine_aspeed.py tests/avocado/machine_aspeed: Fix the broken ast2[56]00_evb_sdk tests tests/avocado: Make ssh_command_output_contains() globally available .gitlab-ci.d/cirrus: Drop the CI job for compiling with FreeBSD 12 qemu-options: finesse the recommendations around -blockdev scripts/device-crash-test: Add a parameter to run with TCG only gitlab-ci: Avoid to re-run "configure" in the device-crash-test jobs tests/avocado: Add set of boot tests on SBSA-ref tests/avocado: use the new snapshots for testing tests/requirements.txt: bump up avocado-framework version to 101.0 Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
commit
cc5ee50fff
@ -102,8 +102,8 @@ crash-test-debian:
|
||||
IMAGE: debian-amd64
|
||||
script:
|
||||
- cd build
|
||||
- make check-venv
|
||||
- tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-i386
|
||||
- make NINJA=":" check-venv
|
||||
- tests/venv/bin/python3 scripts/device-crash-test -q --tcg-only ./qemu-system-i386
|
||||
|
||||
build-system-fedora:
|
||||
extends:
|
||||
@ -145,7 +145,7 @@ crash-test-fedora:
|
||||
IMAGE: fedora
|
||||
script:
|
||||
- cd build
|
||||
- make check-venv
|
||||
- make NINJA=":" check-venv
|
||||
- tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-ppc
|
||||
- tests/venv/bin/python3 scripts/device-crash-test -q ./qemu-system-riscv32
|
||||
|
||||
|
@ -44,19 +44,6 @@
|
||||
variables:
|
||||
QEMU_JOB_CIRRUS: 1
|
||||
|
||||
x64-freebsd-12-build:
|
||||
extends: .cirrus_build_job
|
||||
variables:
|
||||
NAME: freebsd-12
|
||||
CIRRUS_VM_INSTANCE_TYPE: freebsd_instance
|
||||
CIRRUS_VM_IMAGE_SELECTOR: image_family
|
||||
CIRRUS_VM_IMAGE_NAME: freebsd-12-4
|
||||
CIRRUS_VM_CPUS: 8
|
||||
CIRRUS_VM_RAM: 8G
|
||||
UPDATE_COMMAND: pkg update; pkg upgrade -y
|
||||
INSTALL_COMMAND: pkg install -y
|
||||
TEST_TARGETS: check
|
||||
|
||||
x64-freebsd-13-build:
|
||||
extends: .cirrus_build_job
|
||||
variables:
|
||||
|
@ -1,16 +0,0 @@
|
||||
# THIS FILE WAS AUTO-GENERATED
|
||||
#
|
||||
# $ lcitool variables freebsd-12 qemu
|
||||
#
|
||||
# https://gitlab.com/libvirt/libvirt-ci
|
||||
|
||||
CCACHE='/usr/local/bin/ccache'
|
||||
CPAN_PKGS=''
|
||||
CROSS_PKGS=''
|
||||
MAKE='/usr/local/bin/gmake'
|
||||
NINJA='/usr/local/bin/ninja'
|
||||
PACKAGING_COMMAND='pkg'
|
||||
PIP3='/usr/local/bin/pip-3.8'
|
||||
PKGS='alsa-lib bash bison bzip2 ca_root_nss capstone4 ccache cdrkit-genisoimage cmocka ctags curl cyrus-sasl dbus diffutils dtc flex fusefs-libs3 gettext git glib gmake gnutls gsed gtk3 json-c libepoxy libffi libgcrypt libjpeg-turbo libnfs libslirp libspice-server libssh libtasn1 llvm lzo2 meson ncurses nettle ninja opencv pixman pkgconf png py39-numpy py39-pillow py39-pip py39-sphinx py39-sphinx_rtd_theme py39-yaml python3 rpm2cpio sdl2 sdl2_image snappy sndio socat spice-protocol tesseract usbredir virglrenderer vte3 zstd'
|
||||
PYPI_PKGS=''
|
||||
PYTHON='/usr/local/bin/python3'
|
@ -943,6 +943,7 @@ L: qemu-arm@nongnu.org
|
||||
S: Maintained
|
||||
F: hw/arm/sbsa-ref.c
|
||||
F: docs/system/arm/sbsa.rst
|
||||
F: tests/avocado/machine_aarch64_sbsaref.py
|
||||
|
||||
Sharp SL-5500 (Collie) PDA
|
||||
M: Peter Maydell <peter.maydell@linaro.org>
|
||||
@ -1112,7 +1113,7 @@ F: include/hw/misc/pca9552*.h
|
||||
F: hw/net/ftgmac100.c
|
||||
F: include/hw/net/ftgmac100.h
|
||||
F: docs/system/arm/aspeed.rst
|
||||
F: tests/qtest/*aspeed*
|
||||
F: tests/*/*aspeed*
|
||||
F: hw/arm/fby35.c
|
||||
|
||||
NRF51
|
||||
|
@ -1,3 +1,5 @@
|
||||
.. _qom:
|
||||
|
||||
===========================
|
||||
The QEMU Object Model (QOM)
|
||||
===========================
|
||||
|
@ -300,6 +300,20 @@ putting those into qemu/typedefs.h instead of including the header.
|
||||
|
||||
Cyclic inclusion is forbidden.
|
||||
|
||||
Generative Includes
|
||||
-------------------
|
||||
|
||||
QEMU makes fairly extensive use of the macro pre-processor to
|
||||
instantiate multiple similar functions. While such abuse of the macro
|
||||
processor isn't discouraged it can make debugging and code navigation
|
||||
harder. You should consider carefully if the same effect can be
|
||||
achieved by making it easy for the compiler to constant fold or using
|
||||
python scripting to generate grep friendly code.
|
||||
|
||||
If you do use template header files they should be named with the
|
||||
``.c.inc`` or ``.h.inc`` suffix to make it clear they are being
|
||||
included for expansion.
|
||||
|
||||
C types
|
||||
=======
|
||||
|
||||
@ -614,6 +628,97 @@ are still some caveats to beware of
|
||||
QEMU Specific Idioms
|
||||
********************
|
||||
|
||||
QEMU Object Model Declarations
|
||||
==============================
|
||||
|
||||
The QEMU Object Model (QOM) provides a framework for handling objects
|
||||
in the base C language. The first declaration of a storage or class
|
||||
structure should always be the parent and leave a visual space between
|
||||
that declaration and the new code. It is also useful to separate
|
||||
backing for properties (options driven by the user) and internal state
|
||||
to make navigation easier.
|
||||
|
||||
For a storage structure the first declaration should always be called
|
||||
"parent_obj" and for a class structure the first member should always
|
||||
be called "parent_class" as below:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
struct MyDeviceState {
|
||||
DeviceState parent_obj;
|
||||
|
||||
/* Properties */
|
||||
int prop_a;
|
||||
char *prop_b;
|
||||
/* Other stuff */
|
||||
int internal_state;
|
||||
};
|
||||
|
||||
struct MyDeviceClass {
|
||||
DeviceClass parent_class;
|
||||
|
||||
void (*new_fn1)(void);
|
||||
bool (*new_fn2)(CPUState *);
|
||||
};
|
||||
|
||||
Note that there is no need to provide typedefs for QOM structures
|
||||
since these are generated automatically by the QOM declaration macros.
|
||||
See :ref:`qom` for more details.
|
||||
|
||||
QEMU GUARD macros
|
||||
=================
|
||||
|
||||
QEMU provides a number of ``_GUARD`` macros intended to make the
|
||||
handling of multiple exit paths easier. For example using
|
||||
``QEMU_LOCK_GUARD`` to take a lock will ensure the lock is released on
|
||||
exit from the function.
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
static int my_critical_function(SomeState *s, void *data)
|
||||
{
|
||||
QEMU_LOCK_GUARD(&s->lock);
|
||||
do_thing1(data);
|
||||
if (check_state2(data)) {
|
||||
return -1;
|
||||
}
|
||||
do_thing3(data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
will ensure s->lock is released however the function is exited. The
|
||||
equivalent code without _GUARD macro makes us to carefully put
|
||||
qemu_mutex_unlock() on all exit points:
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
static int my_critical_function(SomeState *s, void *data)
|
||||
{
|
||||
qemu_mutex_lock(&s->lock);
|
||||
do_thing1(data);
|
||||
if (check_state2(data)) {
|
||||
qemu_mutex_unlock(&s->lock);
|
||||
return -1;
|
||||
}
|
||||
do_thing3(data);
|
||||
qemu_mutex_unlock(&s->lock);
|
||||
return 0;
|
||||
}
|
||||
|
||||
There are often ``WITH_`` forms of macros which more easily wrap
|
||||
around a block inside a function.
|
||||
|
||||
.. code-block:: c
|
||||
|
||||
WITH_RCU_READ_LOCK_GUARD() {
|
||||
QTAILQ_FOREACH_RCU(kid, &bus->children, sibling) {
|
||||
err = do_the_thing(kid->child);
|
||||
if (err < 0) {
|
||||
return err;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Error handling and reporting
|
||||
============================
|
||||
|
||||
|
@ -14,7 +14,7 @@ The guest loader does two things:
|
||||
- load blobs (kernels and initial ram disks) into memory
|
||||
- sets platform FDT data so hypervisors can find and boot them
|
||||
|
||||
This is what is typically done by a boot-loader like grub using it's
|
||||
This is what is typically done by a boot-loader like grub using its
|
||||
multi-boot capability. A typical example would look like:
|
||||
|
||||
.. parsed-literal::
|
||||
@ -25,9 +25,9 @@ multi-boot capability. A typical example would look like:
|
||||
-device guest-loader,addr=0x47000000,initrd=rootfs.cpio
|
||||
|
||||
In the above example the Xen hypervisor is loaded by the -kernel
|
||||
parameter and passed it's boot arguments via -append. The Dom0 guest
|
||||
parameter and passed its boot arguments via -append. The Dom0 guest
|
||||
is loaded into the areas of memory. Each blob will get
|
||||
``/chosen/module@<addr>`` entry in the FDT to indicate it's location and
|
||||
``/chosen/module@<addr>`` entry in the FDT to indicate its location and
|
||||
size. Additional information can be passed with by using additional
|
||||
arguments.
|
||||
|
||||
|
@ -405,15 +405,22 @@ SRST
|
||||
-numa node,nodeid=0 -numa node,nodeid=1 \
|
||||
-numa cpu,node-id=0,socket-id=0 -numa cpu,node-id=1,socket-id=1
|
||||
|
||||
Legacy '\ ``mem``\ ' assigns a given RAM amount to a node (not supported
|
||||
for 5.1 and newer machine types). '\ ``memdev``\ ' assigns RAM from
|
||||
a given memory backend device to a node. If '\ ``mem``\ ' and
|
||||
'\ ``memdev``\ ' are omitted in all nodes, RAM is split equally between them.
|
||||
'\ ``memdev``\ ' option assigns RAM from a given memory backend
|
||||
device to a node. It is recommended to use '\ ``memdev``\ ' option
|
||||
over legacy '\ ``mem``\ ' option. This is because '\ ``memdev``\ '
|
||||
option provides better performance and more control over the
|
||||
backend's RAM (e.g. '\ ``prealloc``\ ' parameter of
|
||||
'\ ``-memory-backend-ram``\ ' allows memory preallocation).
|
||||
|
||||
For compatibility reasons, legacy '\ ``mem``\ ' option is
|
||||
supported in 5.0 and older machine types. Note that '\ ``mem``\ '
|
||||
and '\ ``memdev``\ ' are mutually exclusive. If one node uses
|
||||
'\ ``memdev``\ ', the rest nodes have to use '\ ``memdev``\ '
|
||||
option, and vice versa.
|
||||
|
||||
'\ ``mem``\ ' and '\ ``memdev``\ ' are mutually exclusive.
|
||||
Furthermore, if one node uses '\ ``memdev``\ ', all of them have to
|
||||
use it.
|
||||
Users must specify memory for all NUMA nodes by '\ ``memdev``\ '
|
||||
(or legacy '\ ``mem``\ ' if available). In QEMU 5.2, the support
|
||||
for '\ ``-numa node``\ ' without memory specified was removed.
|
||||
|
||||
'\ ``initiator``\ ' is an additional option that points to an
|
||||
initiator NUMA node that has best performance (the lowest latency or
|
||||
@ -1143,10 +1150,22 @@ have gone through several iterations as the feature set and complexity
|
||||
of the block layer have grown. Many online guides to QEMU often
|
||||
reference older and deprecated options, which can lead to confusion.
|
||||
|
||||
The recommended modern way to describe disks is to use a combination of
|
||||
The most explicit way to describe disks is to use a combination of
|
||||
``-device`` to specify the hardware device and ``-blockdev`` to
|
||||
describe the backend. The device defines what the guest sees and the
|
||||
backend describes how QEMU handles the data.
|
||||
backend describes how QEMU handles the data. It is the only guaranteed
|
||||
stable interface for describing block devices and as such is
|
||||
recommended for management tools and scripting.
|
||||
|
||||
The ``-drive`` option combines the device and backend into a single
|
||||
command line option which is a more human friendly. There is however no
|
||||
interface stability guarantee although some older board models still
|
||||
need updating to work with the modern blockdev forms.
|
||||
|
||||
Older options like ``-hda`` are essentially macros which expand into
|
||||
``-drive`` options for various drive interfaces. The original forms
|
||||
bake in a lot of assumptions from the days when QEMU was emulating a
|
||||
legacy PC, they are not recommended for modern configurations.
|
||||
|
||||
ERST
|
||||
|
||||
@ -1639,6 +1658,14 @@ SRST
|
||||
the raw disk image you use is not written back. You can however
|
||||
force the write back by pressing C-a s (see the :ref:`disk images`
|
||||
chapter in the System Emulation Users Guide).
|
||||
|
||||
.. warning::
|
||||
snapshot is incompatible with ``-blockdev`` (instead use qemu-img
|
||||
to manually create snapshot images to attach to your blockdev).
|
||||
If you have mixed ``-blockdev`` and ``-drive`` declarations you
|
||||
can use the 'snapshot' property on your drive declarations
|
||||
instead of this global option.
|
||||
|
||||
ERST
|
||||
|
||||
DEF("fsdev", HAS_ARG, QEMU_OPTION_fsdev,
|
||||
|
@ -397,7 +397,7 @@ def binariesToTest(args, testcase):
|
||||
|
||||
|
||||
def accelsToTest(args, testcase):
|
||||
if getBinaryInfo(args, testcase['binary']).kvm_available:
|
||||
if getBinaryInfo(args, testcase['binary']).kvm_available and not args.tcg_only:
|
||||
yield 'kvm'
|
||||
yield 'tcg'
|
||||
|
||||
@ -510,6 +510,8 @@ def main():
|
||||
help="Full mode: test cases that are expected to fail")
|
||||
parser.add_argument('--strict', action='store_true', dest='strict',
|
||||
help="Treat all warnings as fatal")
|
||||
parser.add_argument('--tcg-only', action='store_true', dest='tcg_only',
|
||||
help="Only test with TCG accelerator")
|
||||
parser.add_argument('qemu', nargs='*', metavar='QEMU',
|
||||
help='QEMU binary to run')
|
||||
args = parser.parse_args()
|
||||
|
@ -138,12 +138,16 @@ get-vm-image-fedora-31-%: check-venv
|
||||
# download all vm images, according to defined targets
|
||||
get-vm-images: check-venv $(patsubst %,get-vm-image-fedora-31-%, $(FEDORA_31_DOWNLOAD))
|
||||
|
||||
JOBS_OPTION=$(lastword -j1 $(filter-out -j, $(filter -j%,$(MAKEFLAGS))))
|
||||
|
||||
check-avocado: check-venv $(TESTS_RESULTS_DIR) get-vm-images
|
||||
$(call quiet-command, \
|
||||
$(TESTS_PYTHON) -m avocado \
|
||||
--show=$(AVOCADO_SHOW) run --job-results-dir=$(TESTS_RESULTS_DIR) \
|
||||
$(if $(AVOCADO_TAGS),, --filter-by-tags-include-empty \
|
||||
$(if $(AVOCADO_TAGS),, \
|
||||
--filter-by-tags-include-empty \
|
||||
--filter-by-tags-include-empty-key) \
|
||||
--max-parallel-tasks $(JOBS_OPTION:-j%=%) \
|
||||
$(AVOCADO_CMDLINE_TAGS) \
|
||||
$(if $(GITLAB_CI),,--failfast) $(AVOCADO_TESTS), \
|
||||
"AVOCADO", "tests/avocado")
|
||||
|
@ -330,6 +330,19 @@ class QemuSystemTest(QemuBaseTest):
|
||||
vm.add_args(*args)
|
||||
return vm
|
||||
|
||||
def get_qemu_img(self):
|
||||
self.log.debug('Looking for and selecting a qemu-img binary')
|
||||
|
||||
# If qemu-img has been built, use it, otherwise the system wide one
|
||||
# will be used.
|
||||
qemu_img = os.path.join(BUILD_DIR, 'qemu-img')
|
||||
if not os.path.exists(qemu_img):
|
||||
qemu_img = find_command('qemu-img', False)
|
||||
if qemu_img is False:
|
||||
self.cancel('Could not find "qemu-img"')
|
||||
|
||||
return qemu_img
|
||||
|
||||
@property
|
||||
def vm(self):
|
||||
return self.get_vm(name='default')
|
||||
@ -431,6 +444,14 @@ class LinuxSSHMixIn:
|
||||
f'Guest command failed: {command}')
|
||||
return stdout_lines, stderr_lines
|
||||
|
||||
def ssh_command_output_contains(self, cmd, exp):
|
||||
stdout, _ = self.ssh_command(cmd)
|
||||
for line in stdout:
|
||||
if exp in line:
|
||||
break
|
||||
else:
|
||||
self.fail('"%s" output does not contain "%s"' % (cmd, exp))
|
||||
|
||||
class LinuxDistro:
|
||||
"""Represents a Linux distribution
|
||||
|
||||
@ -594,17 +615,9 @@ class LinuxTest(LinuxSSHMixIn, QemuSystemTest):
|
||||
return (ssh_public_key, ssh_private_key)
|
||||
|
||||
def download_boot(self):
|
||||
self.log.debug('Looking for and selecting a qemu-img binary to be '
|
||||
'used to create the bootable snapshot image')
|
||||
# If qemu-img has been built, use it, otherwise the system wide one
|
||||
# will be used. If none is available, the test will cancel.
|
||||
qemu_img = os.path.join(BUILD_DIR, 'qemu-img')
|
||||
if not os.path.exists(qemu_img):
|
||||
qemu_img = find_command('qemu-img', False)
|
||||
if qemu_img is False:
|
||||
self.cancel('Could not find "qemu-img", which is required to '
|
||||
'create the bootable image')
|
||||
vmimage.QEMU_IMG = qemu_img
|
||||
# Set the qemu-img binary.
|
||||
# If none is available, the test will cancel.
|
||||
vmimage.QEMU_IMG = super().get_qemu_img()
|
||||
|
||||
self.log.info('Downloading/preparing boot image')
|
||||
# Fedora 31 only provides ppc64le images
|
||||
|
@ -101,14 +101,6 @@ class LinuxSSH(QemuSystemTest, LinuxSSHMixIn):
|
||||
self.ssh_disconnect_vm()
|
||||
wait_for_console_pattern(self, 'Power down', 'Oops')
|
||||
|
||||
def ssh_command_output_contains(self, cmd, exp):
|
||||
stdout, _ = self.ssh_command(cmd)
|
||||
for line in stdout:
|
||||
if exp in line:
|
||||
break
|
||||
else:
|
||||
self.fail('"%s" output does not contain "%s"' % (cmd, exp))
|
||||
|
||||
def run_common_commands(self, wordsize):
|
||||
self.ssh_command_output_contains(
|
||||
'cat /proc/cpuinfo',
|
||||
|
158
tests/avocado/machine_aarch64_sbsaref.py
Normal file
158
tests/avocado/machine_aarch64_sbsaref.py
Normal file
@ -0,0 +1,158 @@
|
||||
# Functional test that boots a Linux kernel and checks the console
|
||||
#
|
||||
# SPDX-FileCopyrightText: 2023 Linaro Ltd.
|
||||
# SPDX-FileContributor: Philippe Mathieu-Daudé <philmd@linaro.org>
|
||||
# SPDX-FileContributor: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import os
|
||||
|
||||
from avocado import skip
|
||||
from avocado import skipUnless
|
||||
from avocado.utils import archive
|
||||
|
||||
from avocado_qemu import QemuSystemTest
|
||||
from avocado_qemu import wait_for_console_pattern
|
||||
from avocado_qemu import interrupt_interactive_console_until_pattern
|
||||
|
||||
|
||||
class Aarch64SbsarefMachine(QemuSystemTest):
|
||||
"""
|
||||
:avocado: tags=arch:aarch64
|
||||
:avocado: tags=machine:sbsa-ref
|
||||
"""
|
||||
|
||||
timeout = 180
|
||||
|
||||
def fetch_firmware(self):
|
||||
"""
|
||||
Flash volumes generated using:
|
||||
|
||||
- Fedora GNU Toolchain version 12.2.1 20220819 (Red Hat Cross 12.2.1-2)
|
||||
|
||||
- Trusted Firmware-A
|
||||
https://github.com/ARM-software/arm-trusted-firmware/tree/5fdb2e54
|
||||
|
||||
- Tianocore EDK II
|
||||
https://github.com/tianocore/edk2/tree/494127613b
|
||||
https://github.com/tianocore/edk2-non-osi/tree/41876073
|
||||
https://github.com/tianocore/edk2-platforms/tree/8efa4f42
|
||||
"""
|
||||
|
||||
# Secure BootRom (TF-A code)
|
||||
fs0_xz_url = (
|
||||
"https://fileserver.linaro.org/s/ATnSmq6k8SoXgbH/"
|
||||
"download/SBSA_FLASH0.fd.xz"
|
||||
)
|
||||
fs0_xz_hash = "a210a09692bcbe0a3743ffd0df44e80e0c7ad8ab"
|
||||
tar_xz_path = self.fetch_asset(fs0_xz_url, asset_hash=fs0_xz_hash)
|
||||
archive.extract(tar_xz_path, self.workdir)
|
||||
fs0_path = os.path.join(self.workdir, "SBSA_FLASH0.fd")
|
||||
|
||||
# Non-secure rom (UEFI and EFI variables)
|
||||
fs1_xz_url = (
|
||||
"https://fileserver.linaro.org/s/t8foNnMPz74DZZy/"
|
||||
"download/SBSA_FLASH1.fd.xz"
|
||||
)
|
||||
fs1_xz_hash = "13a9a262953787c7fc5a9155dfaa26e703631e02"
|
||||
tar_xz_path = self.fetch_asset(fs1_xz_url, asset_hash=fs1_xz_hash)
|
||||
archive.extract(tar_xz_path, self.workdir)
|
||||
fs1_path = os.path.join(self.workdir, "SBSA_FLASH1.fd")
|
||||
|
||||
for path in [fs0_path, fs1_path]:
|
||||
with open(path, "ab+") as fd:
|
||||
fd.truncate(256 << 20) # Expand volumes to 256MiB
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args(
|
||||
"-drive",
|
||||
f"if=pflash,file={fs0_path},format=raw",
|
||||
"-drive",
|
||||
f"if=pflash,file={fs1_path},format=raw",
|
||||
"-smp",
|
||||
"1",
|
||||
"-machine",
|
||||
"sbsa-ref",
|
||||
)
|
||||
|
||||
def test_sbsaref_edk2_firmware(self):
|
||||
"""
|
||||
:avocado: tags=cpu:cortex-a57
|
||||
"""
|
||||
|
||||
self.fetch_firmware()
|
||||
self.vm.launch()
|
||||
|
||||
# TF-A boot sequence:
|
||||
#
|
||||
# https://github.com/ARM-software/arm-trusted-firmware/blob/v2.8.0/\
|
||||
# docs/design/trusted-board-boot.rst#trusted-board-boot-sequence
|
||||
# https://trustedfirmware-a.readthedocs.io/en/v2.8/\
|
||||
# design/firmware-design.html#cold-boot
|
||||
|
||||
# AP Trusted ROM
|
||||
wait_for_console_pattern(self, "Booting Trusted Firmware")
|
||||
wait_for_console_pattern(self, "BL1: v2.8(release):v2.8")
|
||||
wait_for_console_pattern(self, "BL1: Booting BL2")
|
||||
|
||||
# Trusted Boot Firmware
|
||||
wait_for_console_pattern(self, "BL2: v2.8(release)")
|
||||
wait_for_console_pattern(self, "Booting BL31")
|
||||
|
||||
# EL3 Runtime Software
|
||||
wait_for_console_pattern(self, "BL31: v2.8(release)")
|
||||
|
||||
# Non-trusted Firmware
|
||||
wait_for_console_pattern(self, "UEFI firmware (version 1.0")
|
||||
interrupt_interactive_console_until_pattern(self, "QEMU SBSA-REF Machine")
|
||||
|
||||
# This tests the whole boot chain from EFI to Userspace
|
||||
# We only boot a whole OS for the current top level CPU and GIC
|
||||
# Other test profiles should use more minimal boots
|
||||
def boot_alpine_linux(self, cpu):
|
||||
self.fetch_firmware()
|
||||
|
||||
iso_url = (
|
||||
"https://dl-cdn.alpinelinux.org/"
|
||||
"alpine/v3.17/releases/aarch64/alpine-standard-3.17.2-aarch64.iso"
|
||||
)
|
||||
|
||||
iso_hash = "5a36304ecf039292082d92b48152a9ec21009d3a62f459de623e19c4bd9dc027"
|
||||
iso_path = self.fetch_asset(iso_url, algorithm="sha256", asset_hash=iso_hash)
|
||||
|
||||
self.vm.set_console()
|
||||
self.vm.add_args(
|
||||
"-cpu",
|
||||
cpu,
|
||||
"-drive",
|
||||
f"file={iso_path},format=raw",
|
||||
"-device",
|
||||
"virtio-rng-pci,rng=rng0",
|
||||
"-object",
|
||||
"rng-random,id=rng0,filename=/dev/urandom",
|
||||
)
|
||||
|
||||
self.vm.launch()
|
||||
wait_for_console_pattern(self, "Welcome to Alpine Linux 3.17")
|
||||
|
||||
@skipUnless(os.getenv("AVOCADO_TIMEOUT_EXPECTED"), "Test might timeout")
|
||||
def test_sbsaref_alpine_linux_cortex_a57(self):
|
||||
"""
|
||||
:avocado: tags=cpu:cortex-a57
|
||||
"""
|
||||
self.boot_alpine_linux("cortex-a57")
|
||||
|
||||
@skipUnless(os.getenv("AVOCADO_TIMEOUT_EXPECTED"), "Test might timeout")
|
||||
def test_sbsaref_alpine_linux_neoverse_n1(self):
|
||||
"""
|
||||
:avocado: tags=cpu:max
|
||||
"""
|
||||
self.boot_alpine_linux("neoverse-n1")
|
||||
|
||||
@skip("requires TF-A update to handle FEAT_FGT")
|
||||
def test_sbsaref_alpine_linux_max(self):
|
||||
"""
|
||||
:avocado: tags=cpu:max
|
||||
"""
|
||||
self.boot_alpine_linux("max,pauth-impdef=on")
|
@ -10,6 +10,7 @@ import os
|
||||
import tempfile
|
||||
import subprocess
|
||||
|
||||
from avocado_qemu import LinuxSSHMixIn
|
||||
from avocado_qemu import QemuSystemTest
|
||||
from avocado_qemu import wait_for_console_pattern
|
||||
from avocado_qemu import exec_command
|
||||
@ -268,7 +269,7 @@ class AST2x00Machine(QemuSystemTest):
|
||||
|
||||
self.do_test_arm_aspeed_buildroot_poweroff()
|
||||
|
||||
class AST2x00MachineSDK(QemuSystemTest):
|
||||
class AST2x00MachineSDK(QemuSystemTest, LinuxSSHMixIn):
|
||||
|
||||
EXTRA_BOOTARGS = (
|
||||
'quiet '
|
||||
@ -295,7 +296,7 @@ class AST2x00MachineSDK(QemuSystemTest):
|
||||
self.require_netdev('user')
|
||||
self.vm.set_console()
|
||||
self.vm.add_args('-drive', 'file=' + image + ',if=mtd,format=raw',
|
||||
'-net', 'nic', '-net', 'user')
|
||||
'-net', 'nic', '-net', 'user,hostfwd=:127.0.0.1:0-:22')
|
||||
self.vm.launch()
|
||||
|
||||
self.wait_for_console_pattern('U-Boot 2019.04')
|
||||
@ -323,7 +324,7 @@ class AST2x00MachineSDK(QemuSystemTest):
|
||||
|
||||
self.do_test_arm_aspeed_sdk_start(
|
||||
self.workdir + '/ast2500-default/image-bmc')
|
||||
self.wait_for_console_pattern('ast2500-default login:')
|
||||
self.wait_for_console_pattern('nodistro.0 ast2500-default ttyS4')
|
||||
|
||||
@skipIf(os.getenv('GITLAB_CI'), 'Running on GitLab')
|
||||
def test_arm_ast2600_evb_sdk(self):
|
||||
@ -345,22 +346,25 @@ class AST2x00MachineSDK(QemuSystemTest):
|
||||
'ds1338,bus=aspeed.i2c.bus.5,address=0x32');
|
||||
self.do_test_arm_aspeed_sdk_start(
|
||||
self.workdir + '/ast2600-default/image-bmc')
|
||||
self.wait_for_console_pattern('ast2600-default login:')
|
||||
exec_command_and_wait_for_pattern(self, 'root', 'Password:')
|
||||
exec_command_and_wait_for_pattern(self, '0penBmc', 'root@ast2600-default:~#')
|
||||
self.wait_for_console_pattern('nodistro.0 ast2600-default ttyS4')
|
||||
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'echo lm75 0x4d > /sys/class/i2c-dev/i2c-5/device/new_device',
|
||||
self.ssh_connect('root', '0penBmc', False)
|
||||
self.ssh_command('dmesg -c > /dev/null')
|
||||
|
||||
self.ssh_command_output_contains(
|
||||
'echo lm75 0x4d > /sys/class/i2c-dev/i2c-5/device/new_device ; '
|
||||
'dmesg -c',
|
||||
'i2c i2c-5: new_device: Instantiated device lm75 at 0x4d');
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
self.ssh_command_output_contains(
|
||||
'cat /sys/class/hwmon/hwmon19/temp1_input', '0')
|
||||
self.vm.command('qom-set', path='/machine/peripheral/tmp-test',
|
||||
property='temperature', value=18000);
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
self.ssh_command_output_contains(
|
||||
'cat /sys/class/hwmon/hwmon19/temp1_input', '18000')
|
||||
|
||||
exec_command_and_wait_for_pattern(self,
|
||||
'echo ds1307 0x32 > /sys/class/i2c-dev/i2c-5/device/new_device',
|
||||
self.ssh_command_output_contains(
|
||||
'echo ds1307 0x32 > /sys/class/i2c-dev/i2c-5/device/new_device ; '
|
||||
'dmesg -c',
|
||||
'i2c i2c-5: new_device: Instantiated device ds1307 at 0x32');
|
||||
year = time.strftime("%Y")
|
||||
exec_command_and_wait_for_pattern(self, 'hwclock -f /dev/rtc1', year);
|
||||
self.ssh_command_output_contains('/sbin/hwclock -f /dev/rtc1', year);
|
||||
|
@ -11,6 +11,7 @@
|
||||
|
||||
import os
|
||||
import time
|
||||
import tempfile
|
||||
|
||||
from avocado import skip, skipIf
|
||||
from avocado_qemu import QemuSystemTest
|
||||
@ -72,25 +73,40 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
# Occasionally we need extra devices to hook things up
|
||||
self.extradev = self.get_tag('extradev')
|
||||
|
||||
self.qemu_img = super().get_qemu_img()
|
||||
|
||||
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)
|
||||
|
||||
def fetch_tuxrun_assets(self, dt=None):
|
||||
def fetch_tuxrun_assets(self, csums=None, dt=None):
|
||||
"""
|
||||
Fetch the TuxBoot assets. They are stored in a standard way so we
|
||||
use the per-test tags to fetch details.
|
||||
"""
|
||||
base_url = f"https://storage.tuxboot.com/{self.tuxboot}/"
|
||||
kernel_image = self.fetch_asset(base_url + self.image)
|
||||
disk_image_zst = self.fetch_asset(base_url + "rootfs.ext4.zst")
|
||||
base_url = f"https://storage.tuxboot.com/20230331/{self.tuxboot}/"
|
||||
|
||||
# empty hash if we weren't passed one
|
||||
csums = {} if csums is None else csums
|
||||
ksum = csums.get(self.image, None)
|
||||
isum = csums.get("rootfs.ext4.zst", None)
|
||||
|
||||
kernel_image = self.fetch_asset(base_url + self.image,
|
||||
asset_hash = ksum,
|
||||
algorithm = "sha256")
|
||||
disk_image_zst = self.fetch_asset(base_url + "rootfs.ext4.zst",
|
||||
asset_hash = isum,
|
||||
algorithm = "sha256")
|
||||
|
||||
cmd = f"{self.zstd} -d {disk_image_zst} -o {self.workdir}/rootfs.ext4"
|
||||
process.run(cmd)
|
||||
|
||||
if dt:
|
||||
dtb = self.fetch_asset(base_url + dt)
|
||||
dsum = csums.get(dt, None)
|
||||
dtb = self.fetch_asset(base_url + dt,
|
||||
asset_hash = dsum,
|
||||
algorithm = "sha256")
|
||||
else:
|
||||
dtb = None
|
||||
|
||||
@ -149,7 +165,9 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
else:
|
||||
self.vm.wait()
|
||||
|
||||
def common_tuxrun(self, dt=None,
|
||||
def common_tuxrun(self,
|
||||
csums=None,
|
||||
dt=None,
|
||||
drive="virtio-blk-device",
|
||||
haltmsg="reboot: System halted",
|
||||
console_index=0):
|
||||
@ -158,12 +176,69 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
special with the command line we can process most things using
|
||||
the tag metadata.
|
||||
"""
|
||||
(kernel, disk, dtb) = self.fetch_tuxrun_assets(dt)
|
||||
(kernel, disk, dtb) = self.fetch_tuxrun_assets(csums, dt)
|
||||
|
||||
self.prepare_run(kernel, disk, drive, dtb, console_index)
|
||||
self.vm.launch()
|
||||
self.run_tuxtest_tests(haltmsg)
|
||||
|
||||
def ppc64_common_tuxrun(self, sums, prefix):
|
||||
# add device args to command line.
|
||||
self.vm.add_args('-netdev', 'user,id=vnet,hostfwd=:127.0.0.1:0-:22',
|
||||
'-device', 'virtio-net,netdev=vnet')
|
||||
self.vm.add_args('-netdev', '{"type":"user","id":"hostnet0"}',
|
||||
'-device', '{"driver":"virtio-net-pci","netdev":'
|
||||
'"hostnet0","id":"net0","mac":"52:54:00:4c:e3:86",'
|
||||
'"bus":"pci.0","addr":"0x9"}')
|
||||
self.vm.add_args('-device', '{"driver":"qemu-xhci","p2":15,"p3":15,'
|
||||
'"id":"usb","bus":"pci.0","addr":"0x2"}')
|
||||
self.vm.add_args('-device', '{"driver":"virtio-scsi-pci","id":"scsi0"'
|
||||
',"bus":"pci.0","addr":"0x3"}')
|
||||
self.vm.add_args('-device', '{"driver":"virtio-serial-pci","id":'
|
||||
'"virtio-serial0","bus":"pci.0","addr":"0x4"}')
|
||||
self.vm.add_args('-device', '{"driver":"scsi-cd","bus":"scsi0.0"'
|
||||
',"channel":0,"scsi-id":0,"lun":0,"device_id":'
|
||||
'"drive-scsi0-0-0-0","id":"scsi0-0-0-0"}')
|
||||
self.vm.add_args('-device', '{"driver":"virtio-balloon-pci",'
|
||||
'"id":"balloon0","bus":"pci.0","addr":"0x6"}')
|
||||
self.vm.add_args('-audiodev', '{"id":"audio1","driver":"none"}')
|
||||
self.vm.add_args('-device', '{"driver":"usb-tablet","id":"input0"'
|
||||
',"bus":"usb.0","port":"1"}')
|
||||
self.vm.add_args('-device', '{"driver":"usb-kbd","id":"input1"'
|
||||
',"bus":"usb.0","port":"2"}')
|
||||
self.vm.add_args('-device', '{"driver":"VGA","id":"video0",'
|
||||
'"vgamem_mb":16,"bus":"pci.0","addr":"0x7"}')
|
||||
self.vm.add_args('-object', '{"qom-type":"rng-random","id":"objrng0"'
|
||||
',"filename":"/dev/urandom"}',
|
||||
'-device', '{"driver":"virtio-rng-pci","rng":"objrng0"'
|
||||
',"id":"rng0","bus":"pci.0","addr":"0x8"}')
|
||||
self.vm.add_args('-object', '{"qom-type":"cryptodev-backend-builtin",'
|
||||
'"id":"objcrypto0","queues":1}',
|
||||
'-device', '{"driver":"virtio-crypto-pci",'
|
||||
'"cryptodev":"objcrypto0","id":"crypto0","bus"'
|
||||
':"pci.0","addr":"0xa"}')
|
||||
self.vm.add_args('-device', '{"driver":"spapr-pci-host-bridge"'
|
||||
',"index":1,"id":"pci.1"}')
|
||||
self.vm.add_args('-device', '{"driver":"spapr-vscsi","id":"scsi1"'
|
||||
',"reg":12288}')
|
||||
self.vm.add_args('-m', '2G,slots=32,maxmem=4G',
|
||||
'-object', 'memory-backend-ram,id=ram1,size=1G',
|
||||
'-device', 'pc-dimm,id=dimm1,memdev=ram1')
|
||||
|
||||
# Create a temporary qcow2 and launch the test-case
|
||||
with tempfile.NamedTemporaryFile(prefix=prefix,
|
||||
suffix='.qcow2') as qcow2:
|
||||
process.run(self.qemu_img + ' create -f qcow2 ' +
|
||||
qcow2.name + ' 1G')
|
||||
|
||||
self.vm.add_args('-drive', 'file=' + qcow2.name +
|
||||
',format=qcow2,if=none,id='
|
||||
'drive-virtio-disk1',
|
||||
'-device', 'virtio-blk-pci,scsi=off,bus=pci.0,'
|
||||
'addr=0xb,drive=drive-virtio-disk1,id=virtio-disk1'
|
||||
',bootindex=2')
|
||||
self.common_tuxrun(csums=sums, drive="scsi-hd")
|
||||
|
||||
#
|
||||
# The tests themselves. The configuration is derived from how
|
||||
# tuxrun invokes qemu (with minor tweaks like using -blockdev
|
||||
@ -182,7 +257,11 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=console:ttyAMA0
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
sums = {"Image" :
|
||||
"ce95a7101a5fecebe0fe630deee6bd97b32ba41bc8754090e9ad8961ea8674c7",
|
||||
"rootfs.ext4.zst" :
|
||||
"bbd5ed4b9c7d3f4ca19ba71a323a843c6b585e880115df3b7765769dbd9dd061"}
|
||||
self.common_tuxrun(csums=sums)
|
||||
|
||||
def test_arm64be(self):
|
||||
"""
|
||||
@ -194,7 +273,11 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=console:ttyAMA0
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
sums = { "Image" :
|
||||
"e0df4425eb2cd9ea9a283e808037f805641c65d8fcecc8f6407d8f4f339561b4",
|
||||
"rootfs.ext4.zst" :
|
||||
"e6ffd8813c8a335bc15728f2835f90539c84be7f8f5f691a8b01451b47fb4bd7"}
|
||||
self.common_tuxrun(csums=sums)
|
||||
|
||||
def test_armv5(self):
|
||||
"""
|
||||
@ -206,7 +289,15 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=console:ttyAMA0
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun(drive="virtio-blk-pci",
|
||||
sums = { "rootfs.ext4.zst" :
|
||||
"17177afa74e7294da0642861f08c88ca3c836764299a54bf6d1ce276cb9712a5",
|
||||
"versatile-pb.dtb" :
|
||||
"0bc0c0b0858cefd3c32b385c0d66d97142ded29472a496f4f490e42fc7615b25",
|
||||
"zImage" :
|
||||
"c95af2f27647c12265d75e9df44c22ff5228c59855f54aaa70f41ec2842e3a4d" }
|
||||
|
||||
self.common_tuxrun(csums=sums,
|
||||
drive="virtio-blk-pci",
|
||||
dt="versatile-pb.dtb")
|
||||
|
||||
def test_armv7(self):
|
||||
@ -219,7 +310,12 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=console:ttyAMA0
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
sums = { "rootfs.ext4.zst" :
|
||||
"ab1fbbeaddda1ffdd45c9405a28cd5370c20f23a7cbc809cc90dc9f243a8eb5a",
|
||||
"zImage" :
|
||||
"4c7a22e9f15875bec06bd2a29d822496571eb297d4f22694099ffcdb19077572" }
|
||||
|
||||
self.common_tuxrun(csums=sums)
|
||||
|
||||
def test_armv7be(self):
|
||||
"""
|
||||
@ -232,7 +328,12 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=console:ttyAMA0
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
sums = {"rootfs.ext4.zst" :
|
||||
"42ed46dd2d59986206c5b1f6cf35eab58fe3fd20c96b41aaa16b32f3f90a9835",
|
||||
"zImage" :
|
||||
"7facc62082b57af12015b08f7fdbaf2f123ba07a478367853ae12b219afc9f2f" }
|
||||
|
||||
self.common_tuxrun(csums=sums)
|
||||
|
||||
def test_i386(self):
|
||||
"""
|
||||
@ -243,7 +344,12 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=image:bzImage
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun(drive="virtio-blk-pci")
|
||||
sums = {"bzImage" :
|
||||
"a3e5b32a354729e65910f5a1ffcda7c14a6c12a55e8213fb86e277f1b76ed956",
|
||||
"rootfs.ext4.zst" :
|
||||
"f15e66b2bf673a210ec2a4b2e744a80530b36289e04f5388aab812b97f69754a" }
|
||||
|
||||
self.common_tuxrun(csums=sums, drive="virtio-blk-pci")
|
||||
|
||||
def test_mips32(self):
|
||||
"""
|
||||
@ -256,7 +362,12 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=root:sda
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun(drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
sums = { "rootfs.ext4.zst" :
|
||||
"fc3da0b4c2f38d74c6d705123bb0f633c76ed953128f9d0859378c328a6d11a0",
|
||||
"vmlinux" :
|
||||
"bfd2172f8b17fb32970ca0c8c58f59c5a4ca38aa5855d920be3a69b5d16e52f0" }
|
||||
|
||||
self.common_tuxrun(csums=sums, drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
|
||||
def test_mips32el(self):
|
||||
"""
|
||||
@ -268,7 +379,12 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=root:sda
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun(drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
sums = { "rootfs.ext4.zst" :
|
||||
"e799768e289fd69209c21f4dacffa11baea7543d5db101e8ce27e3bc2c41d90e",
|
||||
"vmlinux" :
|
||||
"8573867c68a8443db8de6d08bb33fb291c189ca2ca671471d3973a3e712096a3" }
|
||||
|
||||
self.common_tuxrun(csums=sums, drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
|
||||
def test_mips64(self):
|
||||
"""
|
||||
@ -280,7 +396,12 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=root:sda
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun(drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
sums = { "rootfs.ext4.zst" :
|
||||
"69d91eeb04df3d8d172922c6993bb37d4deeb6496def75d8580f6f9de3e431da",
|
||||
"vmlinux" :
|
||||
"09010e51e4b8bcbbd2494786ffb48eca78f228e96e5c5438344b0eac4029dc61" }
|
||||
|
||||
self.common_tuxrun(csums=sums, drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
|
||||
def test_mips64el(self):
|
||||
"""
|
||||
@ -291,7 +412,12 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=root:sda
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun(drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
sums = { "rootfs.ext4.zst" :
|
||||
"fba585368f5915b1498ed081863474b2d7ec4e97cdd46d21bdcb2f9698f83de4",
|
||||
"vmlinux" :
|
||||
"d4e08965e2155c4cccce7c5f34d18fe34c636cda2f2c9844387d614950155266" }
|
||||
|
||||
self.common_tuxrun(csums=sums, drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
|
||||
def test_ppc32(self):
|
||||
"""
|
||||
@ -302,13 +428,18 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=image:uImage
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun(drive="virtio-blk-pci")
|
||||
sums = { "rootfs.ext4.zst" :
|
||||
"8885b9d999cc24d679542a02e9b6aaf48f718f2050ece6b8347074b6ee41dd09",
|
||||
"uImage" :
|
||||
"1a68f74b860fda022fb12e03c5efece8c2b8b590d96cca37a8481a3ae0b3f81f" }
|
||||
|
||||
self.common_tuxrun(csums=sums, drive="virtio-blk-pci")
|
||||
|
||||
def test_ppc64(self):
|
||||
"""
|
||||
:avocado: tags=arch:ppc64
|
||||
:avocado: tags=machine:pseries
|
||||
:avocado: tags=cpu:POWER8
|
||||
:avocado: tags=cpu:POWER10
|
||||
:avocado: tags=endian:big
|
||||
:avocado: tags=console:hvc0
|
||||
:avocado: tags=tuxboot:ppc64
|
||||
@ -316,20 +447,28 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=extradev:driver=spapr-vscsi
|
||||
:avocado: tags=root:sda
|
||||
"""
|
||||
self.common_tuxrun(drive="scsi-hd")
|
||||
sums = { "rootfs.ext4.zst" :
|
||||
"1d953e81a4379e537fc8e41e05a0a59d9b453eef97aa03d47866c6c45b00bdff",
|
||||
"vmlinux" :
|
||||
"f22a9b9e924174a4c199f4c7e5d91a2339fcfe51c6eafd0907dc3e09b64ab728" }
|
||||
self.ppc64_common_tuxrun(sums, prefix='tuxrun_ppc64_')
|
||||
|
||||
def test_ppc64le(self):
|
||||
"""
|
||||
:avocado: tags=arch:ppc64
|
||||
:avocado: tags=machine:pseries
|
||||
:avocado: tags=cpu:POWER8
|
||||
:avocado: tags=cpu:POWER10
|
||||
:avocado: tags=console:hvc0
|
||||
:avocado: tags=tuxboot:ppc64le
|
||||
:avocado: tags=image:vmlinux
|
||||
:avocado: tags=extradev:driver=spapr-vscsi
|
||||
:avocado: tags=root:sda
|
||||
"""
|
||||
self.common_tuxrun(drive="scsi-hd")
|
||||
sums = { "rootfs.ext4.zst" :
|
||||
"b442678c93fb8abe1f7d3bfa20556488de6b475c22c8fed363f42cf81a0a3906",
|
||||
"vmlinux" :
|
||||
"979eb61b445a010fb13e2b927126991f8ceef9c590fa2be0996c00e293e80cf2" }
|
||||
self.ppc64_common_tuxrun(sums, prefix='tuxrun_ppc64le_')
|
||||
|
||||
def test_riscv32(self):
|
||||
"""
|
||||
@ -337,7 +476,14 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=machine:virt
|
||||
:avocado: tags=tuxboot:riscv32
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
sums = { "Image" :
|
||||
"89599407d7334de629a40e7ad6503c73670359eb5f5ae9d686353a3d6deccbd5",
|
||||
"fw_jump.elf" :
|
||||
"f2ef28a0b77826f79d085d3e4aa686f1159b315eff9099a37046b18936676985",
|
||||
"rootfs.ext4.zst" :
|
||||
"7168d296d0283238ea73cd5a775b3dd608e55e04c7b92b76ecce31bb13108cba" }
|
||||
|
||||
self.common_tuxrun(csums=sums)
|
||||
|
||||
def test_riscv64(self):
|
||||
"""
|
||||
@ -345,7 +491,14 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=machine:virt
|
||||
:avocado: tags=tuxboot:riscv64
|
||||
"""
|
||||
self.common_tuxrun()
|
||||
sums = { "Image" :
|
||||
"cd634badc65e52fb63465ec99e309c0de0369f0841b7d9486f9729e119bac25e",
|
||||
"fw_jump.elf" :
|
||||
"6e3373abcab4305fe151b564a4c71110d833c21f2c0a1753b7935459e36aedcf",
|
||||
"rootfs.ext4.zst" :
|
||||
"b18e3a3bdf27be03da0b285e84cb71bf09eca071c3a087b42884b6982ed679eb" }
|
||||
|
||||
self.common_tuxrun(csums=sums)
|
||||
|
||||
def test_s390(self):
|
||||
"""
|
||||
@ -355,7 +508,13 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=image:bzImage
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun(drive="virtio-blk-ccw",
|
||||
sums = { "bzImage" :
|
||||
"0414e98dd1c3dafff8496c9cd9c28a5f8d04553bb5ba37e906a812b48d442ef0",
|
||||
"rootfs.ext4.zst" :
|
||||
"88c37c32276677f873a25ab9ec6247895b8e3e6f8259134de2a616080b8ab3fc" }
|
||||
|
||||
self.common_tuxrun(csums=sums,
|
||||
drive="virtio-blk-ccw",
|
||||
haltmsg="Requesting system halt")
|
||||
|
||||
# Note: some segfaults caused by unaligned userspace access
|
||||
@ -370,9 +529,14 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=root:sda
|
||||
:avocado: tags=console:ttySC1
|
||||
"""
|
||||
sums = { "rootfs.ext4.zst" :
|
||||
"3592a7a3d5a641e8b9821449e77bc43c9904a56c30d45da0694349cfd86743fd",
|
||||
"zImage" :
|
||||
"29d9b2aba604a0f53a5dc3b5d0f2b8e35d497de1129f8ee5139eb6fdf0db692f" }
|
||||
|
||||
# The test is currently too unstable to do much in userspace
|
||||
# so we skip common_tuxrun and do a minimal boot and shutdown.
|
||||
(kernel, disk, dtb) = self.fetch_tuxrun_assets()
|
||||
(kernel, disk, dtb) = self.fetch_tuxrun_assets(csums=sums)
|
||||
|
||||
# the console comes on the second serial port
|
||||
self.prepare_run(kernel, disk,
|
||||
@ -395,7 +559,13 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=root:sda
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun(drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
|
||||
sums = { "rootfs.ext4.zst" :
|
||||
"ad2f1dc436ab51583543d25d2c210cab478645d47078d30d129a66ab0e281d76",
|
||||
"vmlinux" :
|
||||
"e34313e4325ff21deaa3d38a502aa09a373ef62b9bd4d7f8f29388b688225c55" }
|
||||
|
||||
self.common_tuxrun(csums=sums, drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
|
||||
def test_x86_64(self):
|
||||
"""
|
||||
@ -407,4 +577,10 @@ class TuxRunBaselineTest(QemuSystemTest):
|
||||
:avocado: tags=root:sda
|
||||
:avocado: tags=shutdown:nowait
|
||||
"""
|
||||
self.common_tuxrun(drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
sums = { "bzImage" :
|
||||
"2bc7480a669ee9b6b82500a236aba0c54233debe98cb968268fa230f52f03461",
|
||||
"rootfs.ext4.zst" :
|
||||
"b72ac729769b8f51c6dffb221113c9a063c774dbe1d66af30eb593c4e9999b4b" }
|
||||
|
||||
self.common_tuxrun(csums=sums,
|
||||
drive="driver=ide-hd,bus=ide.0,unit=0")
|
||||
|
@ -182,7 +182,6 @@ try:
|
||||
#
|
||||
# Cirrus packages lists for GitLab
|
||||
#
|
||||
generate_cirrus("freebsd-12")
|
||||
generate_cirrus("freebsd-13")
|
||||
generate_cirrus("macos-12")
|
||||
|
||||
|
@ -2,5 +2,5 @@
|
||||
# in the tests/venv Python virtual environment. For more info,
|
||||
# refer to: https://pip.pypa.io/en/stable/user_guide/#id1
|
||||
# Note that qemu.git/python/ is always implicitly installed.
|
||||
avocado-framework==88.1
|
||||
avocado-framework==101.0
|
||||
pycdlib==1.11.0
|
||||
|
@ -152,13 +152,17 @@ PLUGINS=$(patsubst %.c, lib%.so, $(notdir $(wildcard $(PLUGIN_SRC)/*.c)))
|
||||
|
||||
# We need to ensure expand the run-plugin-TEST-with-PLUGIN
|
||||
# pre-requistes manually here as we can't use stems to handle it. We
|
||||
# also add some special helpers the run-plugin- rules can use bellow.
|
||||
# only expand MULTIARCH_TESTS which are common on most of our targets
|
||||
# to avoid an exponential explosion as new tests are added. We also
|
||||
# add some special helpers the run-plugin- rules can use bellow.
|
||||
|
||||
ifneq ($(MULTIARCH_TESTS),)
|
||||
$(foreach p,$(PLUGINS), \
|
||||
$(foreach t,$(TESTS),\
|
||||
$(foreach t,$(MULTIARCH_TESTS),\
|
||||
$(eval run-plugin-$(t)-with-$(p): $t $p) \
|
||||
$(eval RUN_TESTS+=run-plugin-$(t)-with-$(p))))
|
||||
endif
|
||||
endif # MULTIARCH_TESTS
|
||||
endif # CONFIG_PLUGIN
|
||||
|
||||
strip-plugin = $(wordlist 1, 1, $(subst -with-, ,$1))
|
||||
extract-plugin = $(wordlist 2, 2, $(subst -with-, ,$1))
|
||||
|
@ -81,6 +81,4 @@ pauth-3:
|
||||
$(call skip-test, "BUILD of $@", "missing compiler support")
|
||||
run-pauth-3:
|
||||
$(call skip-test, "RUN of pauth-3", "not built")
|
||||
run-plugin-pauth-3-with-%:
|
||||
$(call skip-test, "RUN of pauth-3 ($*)", "not built")
|
||||
endif
|
||||
|
@ -32,7 +32,6 @@ ifneq ($(CROSS_CC_HAS_ARMV8_3),)
|
||||
AARCH64_TESTS += pauth-1 pauth-2 pauth-4 pauth-5
|
||||
pauth-%: CFLAGS += -march=armv8.3-a
|
||||
run-pauth-%: QEMU_OPTS += -cpu max
|
||||
run-plugin-pauth-%: QEMU_OPTS += -cpu max
|
||||
endif
|
||||
|
||||
# BTI Tests
|
||||
|
@ -23,4 +23,6 @@ LDFLAGS+=-nostdlib -N -static
|
||||
test-armv6m-undef: EXTRA_CFLAGS+=-mcpu=cortex-m0 -mfloat-abi=soft
|
||||
|
||||
run-test-armv6m-undef: QEMU_OPTS+=-semihosting -M microbit -kernel
|
||||
run-plugin-test-armv6m-undef-%: QEMU_OPTS+=-semihosting -M microbit -kernel
|
||||
|
||||
# We don't currently support the multiarch system tests
|
||||
undefine MULTIARCH_TESTS
|
||||
|
@ -46,11 +46,6 @@ semihosting-arm: semihosting.c
|
||||
run-semihosting-arm: semihosting-arm
|
||||
$(call run-test,$<,$(QEMU) $< 2> $<.err)
|
||||
|
||||
run-plugin-semihosting-arm-with-%:
|
||||
$(call run-test, $@, $(QEMU) $(QEMU_OPTS) \
|
||||
-plugin $(PLUGIN_LIB)/$(call extract-plugin,$@) \
|
||||
$(call strip-plugin,$<) 2> $<.err)
|
||||
|
||||
ARM_TESTS += semiconsole-arm
|
||||
|
||||
semiconsole: CFLAGS += -mthumb
|
||||
@ -62,9 +57,6 @@ semiconsole-arm: semihosting.c
|
||||
run-semiconsole-arm: semiconsole-arm
|
||||
$(call skip-test, $<, "MANUAL ONLY")
|
||||
|
||||
run-plugin-semiconsole-arm-with-%:
|
||||
$(call skip-test, $<, "MANUAL ONLY")
|
||||
|
||||
endif
|
||||
|
||||
ARM_TESTS += commpage
|
||||
|
@ -57,3 +57,6 @@ SIMG:=cris-axis-linux-gnu-run
|
||||
# e.g.: make -f ../../tests/tcg/Makefile run-check_orm-on-sim
|
||||
run-%-on-sim:
|
||||
$(call run-test, $<, $(SIMG) $<)
|
||||
|
||||
# We don't currently support the multiarch tests
|
||||
undefine MULTIARCH_TESTS
|
||||
|
@ -10,8 +10,6 @@ EXTRA_RUNS+=run-test-mmap-4096 # run-test-mmap-16384 run-test-mmap-65536
|
||||
# it requires the full vdso with dwarf2 unwind info.
|
||||
run-signals: signals
|
||||
$(call skip-test, $<, "BROKEN awaiting vdso support")
|
||||
run-plugin-signals-with-%:
|
||||
$(call skip-test, $<, "BROKEN awaiting vdso support")
|
||||
|
||||
VPATH += $(SRC_PATH)/tests/tcg/hppa
|
||||
TESTS += stby
|
||||
|
@ -18,19 +18,15 @@ X86_64_TESTS:=$(filter test-i386-adcox test-i386-bmi2 $(SKIP_I386_TESTS), $(ALL_
|
||||
|
||||
test-i386-sse-exceptions: CFLAGS += -msse4.1 -mfpmath=sse
|
||||
run-test-i386-sse-exceptions: QEMU_OPTS += -cpu max
|
||||
run-plugin-test-i386-sse-exceptions-%: QEMU_OPTS += -cpu max
|
||||
|
||||
test-i386-pcmpistri: CFLAGS += -msse4.2
|
||||
run-test-i386-pcmpistri: QEMU_OPTS += -cpu max
|
||||
run-plugin-test-i386-pcmpistri-%: QEMU_OPTS += -cpu max
|
||||
|
||||
test-i386-bmi2: CFLAGS=-O2
|
||||
run-test-i386-bmi2: QEMU_OPTS += -cpu max
|
||||
run-plugin-test-i386-bmi2-%: QEMU_OPTS += -cpu max
|
||||
|
||||
test-i386-adcox: CFLAGS=-O2
|
||||
run-test-i386-adcox: QEMU_OPTS += -cpu max
|
||||
run-plugin-test-i386-adcox-%: QEMU_OPTS += -cpu max
|
||||
|
||||
#
|
||||
# hello-i386 is a barebones app
|
||||
@ -52,8 +48,6 @@ test-i386:
|
||||
$(call skip-test, "BUILD of $@", "missing -no-pie compiler support")
|
||||
run-test-i386:
|
||||
$(call skip-test, "RUN of test-i386", "not built")
|
||||
run-plugin-test-i386-with-%:
|
||||
$(call skip-test, "RUN of test-i386 ($*)", "not built")
|
||||
endif
|
||||
|
||||
ifeq ($(SPEED), slow)
|
||||
@ -87,7 +81,6 @@ sha512-sse: sha512.c
|
||||
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS)
|
||||
|
||||
run-sha512-sse: QEMU_OPTS+=-cpu max
|
||||
run-plugin-sha512-sse-with-%: QEMU_OPTS+=-cpu max
|
||||
|
||||
TESTS+=sha512-sse
|
||||
|
||||
@ -103,15 +96,12 @@ test-avx.h: test-avx.py x86.csv
|
||||
|
||||
test-3dnow: CFLAGS += -masm=intel -O -I.
|
||||
run-test-3dnow: QEMU_OPTS += -cpu max
|
||||
run-plugin-test-3dnow: QEMU_OPTS += -cpu max
|
||||
test-3dnow: test-3dnow.h
|
||||
|
||||
test-mmx: CFLAGS += -masm=intel -O -I.
|
||||
run-test-mmx: QEMU_OPTS += -cpu max
|
||||
run-plugin-test-mmx: QEMU_OPTS += -cpu max
|
||||
test-mmx: test-mmx.h
|
||||
|
||||
test-avx: CFLAGS += -mavx -masm=intel -O -I.
|
||||
run-test-avx: QEMU_OPTS += -cpu max
|
||||
run-plugin-test-avx: QEMU_OPTS += -cpu max
|
||||
test-avx: test-avx.h
|
||||
|
@ -24,14 +24,12 @@ PPC64_TESTS += byte_reverse sha512-vector
|
||||
endif
|
||||
byte_reverse: CFLAGS += -mcpu=power10
|
||||
run-byte_reverse: QEMU_OPTS+=-cpu POWER10
|
||||
run-plugin-byte_reverse-with-%: QEMU_OPTS+=-cpu POWER10
|
||||
|
||||
sha512-vector: CFLAGS +=-mcpu=power10 -O3
|
||||
sha512-vector: sha512.c
|
||||
$(CC) $(CFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS)
|
||||
|
||||
run-sha512-vector: QEMU_OPTS+=-cpu POWER10
|
||||
run-plugin-sha512-vector-with-%: QEMU_OPTS+=-cpu POWER10
|
||||
|
||||
PPC64_TESTS += signal_save_restore_xer
|
||||
PPC64_TESTS += xxspltw
|
||||
|
@ -19,3 +19,6 @@ QEMU_OPTS += -M virt -display none -semihosting -device loader,file=
|
||||
EXTRA_RUNS += run-issue1060
|
||||
run-issue1060: issue1060
|
||||
$(call run-test, $<, $(QEMU) $(QEMU_OPTS)$<)
|
||||
|
||||
# We don't currently support the multiarch system tests
|
||||
undefine MULTIARCH_TESTS
|
||||
|
@ -9,4 +9,3 @@ TESTS += noexec
|
||||
TESTS += test-noc
|
||||
test-noc: LDFLAGS = -nostdlib -static
|
||||
run-test-noc: QEMU_OPTS += -cpu rv64,c=false
|
||||
run-plugin-test-noc-%: QEMU_OPTS += -cpu rv64,c=false
|
||||
|
@ -23,3 +23,6 @@ include $(S390X_SRC)/pgm-specification.mak
|
||||
$(PGM_SPECIFICATION_TESTS): pgm-specification-softmmu.o
|
||||
$(PGM_SPECIFICATION_TESTS): LDFLAGS+=pgm-specification-softmmu.o
|
||||
TESTS += $(PGM_SPECIFICATION_TESTS)
|
||||
|
||||
# We don't currently support the multiarch system tests
|
||||
undefine MULTIARCH_TESTS
|
||||
|
@ -29,3 +29,6 @@ QEMU_OPTS += -M tricore_testboard -cpu tc27x -nographic -kernel
|
||||
|
||||
%.tst: %.o
|
||||
$(LD) $(LDFLAGS) $< -o $@
|
||||
|
||||
# We don't currently support the multiarch system tests
|
||||
undefine MULTIARCH_TESTS
|
||||
|
@ -41,3 +41,6 @@ $(XTENSA_USABLE_TESTS): linker.ld macros.inc $(CRT) Makefile.softmmu-target
|
||||
$(CC) $(XTENSA_INC) $(ASFLAGS) $(EXTRA_CFLAGS) $< -o $@ $(LDFLAGS) $(NOSTDFLAGS) $(CRT)
|
||||
|
||||
endif
|
||||
|
||||
# We don't currently support the multiarch system tests
|
||||
undefine MULTIARCH_TESTS
|
||||
|
Loading…
Reference in New Issue
Block a user