mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
Merge tag 'pull-request-2025-06-11' of https://gitlab.com/thuth/qemu into staging
* Remove aarch64 job from travis.yml * Remove deprecated s390-ccw-virtio-4.1 machine * Add memlock functional test * Various other small updates and fixes # -----BEGIN PGP SIGNATURE----- # # iQJFBAABCAAvFiEEJ7iIR+7gJQEY8+q5LtnXdP5wLbUFAmhJfHgRHHRodXRoQHJl # ZGhhdC5jb20ACgkQLtnXdP5wLbX/8Q//VCvEW3EKp/r+jDK32rfeuVtGPQfjsJ7u # iDI3OkzhWZOKpU229Nthj2rKGMPl19mBXFMRavRHceO1pW/xYlPNAErMgT9WrU9K # Cy2pYvOGIVK6pZj+qtjcWwG7wHo8mUtgklXXOvH46pXKunRaVc5vJ3ooIvxn96aE # aq6r+U4iW4WHt65OJj35Od6Fdl7eDuAHgFEzPIrb0+ip4NUNIlQBX7Ro/9Aaok5X # u7hDNbaPMqsYQ2lvU6biJEiVRYz+urqjVUbnNPSm//0SEDc+tGYbwa+XVXaGG8ws # URijEu4CTo26zm85ZVIr/b7HW2uzkSqM+phWXh1vDqOeyQq7a9k5MQ8K01reHBHp # XvJbfg5hYrKbeJIn9QFTwJ+1UPh7fkR0MUj0LCfTEyO5U42OM6TA0R3JyebVx3eG # YpjxUGUZWHLc/5OJFzthIqy0oG/PKuw1fcWTIgiojFQEAd4XIDsYyV66utONe/hJ # on1Tn3eniw0L8k2pw6/9Hwnwufe2U+HG/ZGNyfFWq0nPk0Ccdb1MrMUOryLjG3TK # OGHqGBEINUKkgX7C3ox0my+fYzUQGwi0O+jKqhDEzZP8Ci5Ozcx5mIb0XejqDBXM # IvUqPirXvLFwh0djnisIXIIdDNWYH6TpjyyGLyUj8rPeE2FVyiNBQRT25rNMNdVn # 0zYwfxH7pno= # =Ky62 # -----END PGP SIGNATURE----- # gpg: Signature made Wed 11 Jun 2025 08:54:16 EDT # 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 <huth@tuxfamily.org>" [full] # gpg: aka "Thomas Huth <th.huth@posteo.de>" [unknown] # Primary key fingerprint: 27B8 8847 EEE0 2501 18F3 EAB9 2ED9 D774 FE70 2DB5 * tag 'pull-request-2025-06-11' of https://gitlab.com/thuth/qemu: scripts/meson-buildoptions: Sort coroutine_backend choices lexicographically MAINTAINERS: Update Akihiko Odaki's affiliation MAINTAINERS: Update the paths to the testing documentation files tests/vm/README: fix documentation path in tests/vm/README tests/functional: add memlock tests tests/functional: add skipLockedMemoryTest decorator tests/functional: Speed up the avr_mega2560 test tests/functional: Use the 'none' machine for the VNC test hw/s390x/s390-virtio-ccw: Remove the deprecated 4.1 machine type travis.yml: Remove the aarch64 job Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
This commit is contained in:
-35
@@ -79,41 +79,6 @@ after_script:
|
||||
jobs:
|
||||
include:
|
||||
|
||||
- name: "[aarch64] GCC check-tcg"
|
||||
arch: arm64
|
||||
addons:
|
||||
apt_packages:
|
||||
- libaio-dev
|
||||
- libattr1-dev
|
||||
- libbrlapi-dev
|
||||
- libcacard-dev
|
||||
- libcap-ng-dev
|
||||
- libfdt-dev
|
||||
- libgcrypt20-dev
|
||||
- libgnutls28-dev
|
||||
- libgtk-3-dev
|
||||
- libiscsi-dev
|
||||
- liblttng-ust-dev
|
||||
- libncurses5-dev
|
||||
- libnfs-dev
|
||||
- libpixman-1-dev
|
||||
- libpng-dev
|
||||
- librados-dev
|
||||
- libsdl2-dev
|
||||
- libseccomp-dev
|
||||
- liburcu-dev
|
||||
- libusb-1.0-0-dev
|
||||
- libvdeplug-dev
|
||||
- libvte-2.91-dev
|
||||
- ninja-build
|
||||
- python3-tomli
|
||||
# Tests dependencies
|
||||
- genisoimage
|
||||
env:
|
||||
- TEST_CMD="make check check-tcg V=1"
|
||||
- CONFIG="--disable-containers --enable-fdt=system
|
||||
--target-list=${MAIN_SYSTEM_TARGETS} --cxx=/bin/false"
|
||||
|
||||
- name: "[ppc64] Clang check-tcg"
|
||||
arch: ppc64le
|
||||
compiler: clang
|
||||
|
||||
+8
-7
@@ -2125,7 +2125,7 @@ M: Michael S. Tsirkin <mst@redhat.com>
|
||||
S: Supported
|
||||
F: tests/functional/acpi-bits/*
|
||||
F: tests/functional/test_acpi_bits.py
|
||||
F: docs/devel/acpi-bits.rst
|
||||
F: docs/devel/testing/acpi-bits.rst
|
||||
|
||||
ACPI/HEST/GHES
|
||||
R: Dongjiu Geng <gengdongjiu1@gmail.com>
|
||||
@@ -3441,8 +3441,8 @@ F: system/qtest.c
|
||||
F: include/system/qtest.h
|
||||
F: accel/qtest/
|
||||
F: tests/qtest/
|
||||
F: docs/devel/qgraph.rst
|
||||
F: docs/devel/qtest.rst
|
||||
F: docs/devel/testing/qgraph.rst
|
||||
F: docs/devel/testing/qtest.rst
|
||||
X: tests/qtest/bios-tables-test*
|
||||
X: tests/qtest/migration-*
|
||||
|
||||
@@ -3460,7 +3460,7 @@ F: tests/qtest/fuzz-*test.c
|
||||
F: tests/docker/test-fuzz
|
||||
F: scripts/oss-fuzz/
|
||||
F: hw/mem/sparse-mem.c
|
||||
F: docs/devel/fuzzing.rst
|
||||
F: docs/devel/testing/fuzzing.rst
|
||||
|
||||
Register API
|
||||
M: Alistair Francis <alistair@alistair23.me>
|
||||
@@ -4079,7 +4079,7 @@ M: Stefan Hajnoczi <stefanha@redhat.com>
|
||||
L: qemu-block@nongnu.org
|
||||
S: Supported
|
||||
F: block/blkverify.c
|
||||
F: docs/devel/blkverify.rst
|
||||
F: docs/devel/testing/blkverify.rst
|
||||
|
||||
bochs
|
||||
M: Stefan Hajnoczi <stefanha@redhat.com>
|
||||
@@ -4157,7 +4157,7 @@ M: Hanna Reitz <hreitz@redhat.com>
|
||||
L: qemu-block@nongnu.org
|
||||
S: Supported
|
||||
F: block/blkdebug.c
|
||||
F: docs/devel/blkdebug.rst
|
||||
F: docs/devel/testing/blkdebug.rst
|
||||
|
||||
vpc
|
||||
M: Kevin Wolf <kwolf@redhat.com>
|
||||
@@ -4277,7 +4277,8 @@ F: tests/vm/
|
||||
F: tests/lcitool/
|
||||
F: tests/functional/test_*_tuxrun.py
|
||||
F: scripts/archive-source.sh
|
||||
F: docs/devel/testing.rst
|
||||
F: docs/devel/testing/ci*
|
||||
F: docs/devel/testing/main.rst
|
||||
W: https://gitlab.com/qemu-project/qemu/pipelines
|
||||
W: https://travis-ci.org/qemu/qemu
|
||||
|
||||
|
||||
@@ -1145,20 +1145,6 @@ static void ccw_machine_4_2_class_options(MachineClass *mc)
|
||||
}
|
||||
DEFINE_CCW_MACHINE(4, 2);
|
||||
|
||||
static void ccw_machine_4_1_instance_options(MachineState *machine)
|
||||
{
|
||||
static const S390FeatInit qemu_cpu_feat = { S390_FEAT_LIST_QEMU_V4_1 };
|
||||
ccw_machine_4_2_instance_options(machine);
|
||||
s390_set_qemu_cpu_model(0x2964, 13, 2, qemu_cpu_feat);
|
||||
}
|
||||
|
||||
static void ccw_machine_4_1_class_options(MachineClass *mc)
|
||||
{
|
||||
ccw_machine_4_2_class_options(mc);
|
||||
compat_props_add(mc->compat_props, hw_compat_4_1, hw_compat_4_1_len);
|
||||
}
|
||||
DEFINE_CCW_MACHINE(4, 1);
|
||||
|
||||
static void ccw_machine_register_types(void)
|
||||
{
|
||||
type_register_static(&ccw_machine_info);
|
||||
|
||||
@@ -80,7 +80,7 @@ meson_options_help() {
|
||||
printf "%s\n" ' --tls-priority=VALUE Default TLS protocol/cipher priority string'
|
||||
printf "%s\n" ' [NORMAL]'
|
||||
printf "%s\n" ' --with-coroutine=CHOICE coroutine backend to use (choices:'
|
||||
printf "%s\n" ' auto/sigaltstack/ucontext/windows/wasm)'
|
||||
printf "%s\n" ' auto/sigaltstack/ucontext/wasm/windows)'
|
||||
printf "%s\n" ' --with-pkgversion=VALUE use specified string as sub-version of the'
|
||||
printf "%s\n" ' package'
|
||||
printf "%s\n" ' --with-suffix=VALUE Suffix for QEMU data/modules/config directories'
|
||||
|
||||
@@ -884,9 +884,6 @@ static uint16_t qemu_MIN[] = {
|
||||
*/
|
||||
S390_FEAT_FLOATING_POINT_EXT,
|
||||
S390_FEAT_ZPCI,
|
||||
};
|
||||
|
||||
static uint16_t qemu_V4_1[] = {
|
||||
S390_FEAT_STFLE_53,
|
||||
S390_FEAT_VECTOR,
|
||||
};
|
||||
@@ -1049,7 +1046,6 @@ static FeatGroupDefSpec FeatGroupDef[] = {
|
||||
*******************************/
|
||||
static FeatGroupDefSpec QemuFeatDef[] = {
|
||||
QEMU_FEAT_INITIALIZER(MIN),
|
||||
QEMU_FEAT_INITIALIZER(V4_1),
|
||||
QEMU_FEAT_INITIALIZER(V6_0),
|
||||
QEMU_FEAT_INITIALIZER(V6_2),
|
||||
QEMU_FEAT_INITIALIZER(V7_0),
|
||||
|
||||
@@ -313,6 +313,7 @@ tests_x86_64_system_quick = [
|
||||
'virtio_version',
|
||||
'x86_cpu_model_versions',
|
||||
'vnc',
|
||||
'memlock',
|
||||
]
|
||||
|
||||
tests_x86_64_system_thorough = [
|
||||
|
||||
@@ -15,6 +15,6 @@ from .testcase import QemuBaseTest, QemuUserTest, QemuSystemTest
|
||||
from .linuxkernel import LinuxKernelTest
|
||||
from .decorators import skipIfMissingCommands, skipIfNotMachine, \
|
||||
skipFlakyTest, skipUntrustedTest, skipBigDataTest, skipSlowTest, \
|
||||
skipIfMissingImports, skipIfOperatingSystem
|
||||
skipIfMissingImports, skipIfOperatingSystem, skipLockedMemoryTest
|
||||
from .archive import archive_extract
|
||||
from .uncompress import uncompress
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
import importlib
|
||||
import os
|
||||
import platform
|
||||
import resource
|
||||
from unittest import skipIf, skipUnless
|
||||
|
||||
from .cmd import which
|
||||
@@ -131,3 +132,20 @@ def skipIfMissingImports(*args):
|
||||
|
||||
return skipUnless(has_imports, 'required import(s) "%s" not installed' %
|
||||
", ".join(args))
|
||||
|
||||
'''
|
||||
Decorator to skip execution of a test if the system's
|
||||
locked memory limit is below the required threshold.
|
||||
Takes required locked memory threshold in kB.
|
||||
Example:
|
||||
|
||||
@skipLockedMemoryTest(2_097_152)
|
||||
'''
|
||||
def skipLockedMemoryTest(locked_memory):
|
||||
# get memlock hard limit in bytes
|
||||
_, ulimit_memory = resource.getrlimit(resource.RLIMIT_MEMLOCK)
|
||||
|
||||
return skipUnless(
|
||||
ulimit_memory == resource.RLIM_INFINITY or ulimit_memory >= locked_memory * 1024,
|
||||
f'Test required {locked_memory} kB of available locked memory',
|
||||
)
|
||||
|
||||
@@ -18,12 +18,10 @@
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#
|
||||
|
||||
import time
|
||||
from qemu_test import QemuSystemTest, Asset, wait_for_console_pattern
|
||||
|
||||
from qemu_test import QemuSystemTest, Asset
|
||||
|
||||
class AVR6Machine(QemuSystemTest):
|
||||
timeout = 5
|
||||
|
||||
ASSET_ROM = Asset(('https://github.com/seharris/qemu-avr-tests'
|
||||
'/raw/36c3e67b8755dcf/free-rtos/Demo'
|
||||
@@ -40,13 +38,12 @@ class AVR6Machine(QemuSystemTest):
|
||||
self.set_machine('arduino-mega-2560-v3')
|
||||
self.vm.add_args('-bios', rom_path)
|
||||
self.vm.add_args('-nographic')
|
||||
self.vm.set_console()
|
||||
self.vm.launch()
|
||||
|
||||
time.sleep(2)
|
||||
self.vm.shutdown()
|
||||
wait_for_console_pattern(self,
|
||||
'XABCDEFGHIJKLMNOPQRSTUVWXABCDEFGHIJKLMNOPQRSTUVWXA')
|
||||
|
||||
self.assertIn('ABCDEFGHIJKLMNOPQRSTUVWXABCDEFGHIJKLMNOPQRSTUVWX',
|
||||
self.vm.get_log())
|
||||
|
||||
if __name__ == '__main__':
|
||||
QemuSystemTest.main()
|
||||
|
||||
Executable
+79
@@ -0,0 +1,79 @@
|
||||
#!/usr/bin/env python3
|
||||
#
|
||||
# Functional test that check overcommit memlock options
|
||||
#
|
||||
# Copyright (c) Yandex Technologies LLC, 2025
|
||||
#
|
||||
# Author:
|
||||
# Alexandr Moshkov <dtalexundeer@yandex-team.ru>
|
||||
#
|
||||
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||
|
||||
import re
|
||||
|
||||
from typing import Dict
|
||||
|
||||
from qemu_test import QemuSystemTest
|
||||
from qemu_test import skipLockedMemoryTest
|
||||
|
||||
|
||||
STATUS_VALUE_PATTERN = re.compile(r'^(\w+):\s+(\d+) kB', re.MULTILINE)
|
||||
|
||||
|
||||
@skipLockedMemoryTest(2_097_152) # 2GB
|
||||
class MemlockTest(QemuSystemTest):
|
||||
"""
|
||||
Runs a guest with memlock options.
|
||||
Then verify, that this options is working correctly
|
||||
by checking the status file of the QEMU process.
|
||||
"""
|
||||
|
||||
def common_vm_setup_with_memlock(self, memlock):
|
||||
self.vm.add_args('-overcommit', f'mem-lock={memlock}')
|
||||
self.vm.launch()
|
||||
|
||||
def test_memlock_off(self):
|
||||
self.common_vm_setup_with_memlock('off')
|
||||
|
||||
status = self.get_process_status_values(self.vm.get_pid())
|
||||
|
||||
self.assertTrue(status['VmLck'] == 0)
|
||||
|
||||
def test_memlock_on(self):
|
||||
self.common_vm_setup_with_memlock('on')
|
||||
|
||||
status = self.get_process_status_values(self.vm.get_pid())
|
||||
|
||||
# VmLck > 0 kB and almost all memory is resident
|
||||
self.assertTrue(status['VmLck'] > 0)
|
||||
self.assertTrue(status['VmRSS'] >= status['VmSize'] * 0.70)
|
||||
|
||||
def test_memlock_onfault(self):
|
||||
self.common_vm_setup_with_memlock('on-fault')
|
||||
|
||||
status = self.get_process_status_values(self.vm.get_pid())
|
||||
|
||||
# VmLck > 0 kB and only few memory is resident
|
||||
self.assertTrue(status['VmLck'] > 0)
|
||||
self.assertTrue(status['VmRSS'] <= status['VmSize'] * 0.30)
|
||||
|
||||
def get_process_status_values(self, pid: int) -> Dict[str, int]:
|
||||
result = {}
|
||||
raw_status = self._get_raw_process_status(pid)
|
||||
|
||||
for line in raw_status.split('\n'):
|
||||
if m := STATUS_VALUE_PATTERN.match(line):
|
||||
result[m.group(1)] = int(m.group(2))
|
||||
|
||||
return result
|
||||
|
||||
def _get_raw_process_status(self, pid: int) -> str:
|
||||
try:
|
||||
with open(f'/proc/{pid}/status', 'r') as f:
|
||||
return f.read()
|
||||
except FileNotFoundError:
|
||||
self.skipTest("Can't open status file of the process")
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
MemlockTest.main()
|
||||
@@ -31,6 +31,7 @@ def check_connect(port: int) -> bool:
|
||||
class Vnc(QemuSystemTest):
|
||||
|
||||
def test_no_vnc_change_password(self):
|
||||
self.set_machine('none')
|
||||
self.vm.add_args('-nodefaults', '-S')
|
||||
self.vm.launch()
|
||||
|
||||
@@ -62,6 +63,7 @@ class Vnc(QemuSystemTest):
|
||||
raise excp
|
||||
|
||||
def test_change_password_requires_a_password(self):
|
||||
self.set_machine('none')
|
||||
self.vm.add_args('-nodefaults', '-S', '-vnc', ':1,to=999')
|
||||
self.launch_guarded()
|
||||
self.assertTrue(self.vm.qmp('query-vnc')['return']['enabled'])
|
||||
@@ -74,6 +76,7 @@ class Vnc(QemuSystemTest):
|
||||
'Could not set password')
|
||||
|
||||
def test_change_password(self):
|
||||
self.set_machine('none')
|
||||
self.vm.add_args('-nodefaults', '-S', '-vnc', ':1,to=999,password=on')
|
||||
self.launch_guarded()
|
||||
self.assertTrue(self.vm.qmp('query-vnc')['return']['enabled'])
|
||||
@@ -103,6 +106,7 @@ class Vnc(QemuSystemTest):
|
||||
self.assertTrue(check_connect(c))
|
||||
|
||||
def test_change_listen(self):
|
||||
self.set_machine('none')
|
||||
with Ports() as ports:
|
||||
a, b, c = ports.find_free_ports(3)
|
||||
self.do_test_change_listen(a, b, c)
|
||||
|
||||
+1
-1
@@ -1 +1 @@
|
||||
See docs/devel/testing.rst for help.
|
||||
See docs/devel/testing/main.rst for help.
|
||||
|
||||
Reference in New Issue
Block a user