mirror of
https://github.com/qemu/qemu.git
synced 2026-02-04 05:35:39 +00:00
We are going to move the tests for each target into separate subdirectories. The multiprocess test currently contains code for both, x86 and aarch64, so it does not quite fit into this scheme. Rework the test to have a common test class, and target specific files with a target specific class, so that this will fit better into the new scheme. Reviewed-by: Pierrick Bouvier <pierrick.bouvier@linaro.org> Signed-off-by: Thomas Huth <thuth@redhat.com> Message-ID: <20250819112403.432587-3-thuth@redhat.com>
68 lines
2.6 KiB
Python
68 lines
2.6 KiB
Python
# SPDX-License-Identifier: GPL-2.0-or-later
|
|
#
|
|
# Test for multiprocess qemu
|
|
#
|
|
# 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 os
|
|
import socket
|
|
|
|
from qemu_test import QemuSystemTest, wait_for_console_pattern
|
|
from qemu_test import exec_command, exec_command_and_wait_for_pattern
|
|
|
|
class Multiprocess(QemuSystemTest):
|
|
|
|
KERNEL_COMMON_COMMAND_LINE = 'printk.time=0 '
|
|
|
|
def do_test(self, kernel_asset, initrd_asset,
|
|
kernel_command_line, machine_type):
|
|
"""Main test method"""
|
|
self.require_accelerator('kvm')
|
|
self.require_device('x-pci-proxy-dev')
|
|
|
|
# Create socketpair to connect proxy and remote processes
|
|
proxy_sock, remote_sock = socket.socketpair(socket.AF_UNIX,
|
|
socket.SOCK_STREAM)
|
|
os.set_inheritable(proxy_sock.fileno(), True)
|
|
os.set_inheritable(remote_sock.fileno(), True)
|
|
|
|
kernel_path = kernel_asset.fetch()
|
|
initrd_path = initrd_asset.fetch()
|
|
|
|
# Create remote process
|
|
remote_vm = self.get_vm()
|
|
remote_vm.add_args('-machine', 'x-remote')
|
|
remote_vm.add_args('-nodefaults')
|
|
remote_vm.add_args('-device', 'lsi53c895a,id=lsi1')
|
|
remote_vm.add_args('-object', 'x-remote-object,id=robj1,'
|
|
'devid=lsi1,fd='+str(remote_sock.fileno()))
|
|
remote_vm.launch()
|
|
|
|
# Create proxy process
|
|
self.vm.set_console()
|
|
self.vm.add_args('-machine', machine_type)
|
|
self.vm.add_args('-accel', 'kvm')
|
|
self.vm.add_args('-cpu', 'host')
|
|
self.vm.add_args('-object',
|
|
'memory-backend-memfd,id=sysmem-file,size=2G')
|
|
self.vm.add_args('--numa', 'node,memdev=sysmem-file')
|
|
self.vm.add_args('-m', '2048')
|
|
self.vm.add_args('-kernel', kernel_path,
|
|
'-initrd', initrd_path,
|
|
'-append', kernel_command_line)
|
|
self.vm.add_args('-device',
|
|
'x-pci-proxy-dev,'
|
|
'id=lsi1,fd='+str(proxy_sock.fileno()))
|
|
self.vm.launch()
|
|
wait_for_console_pattern(self, 'as init process',
|
|
'Kernel panic - not syncing')
|
|
exec_command(self, 'mount -t sysfs sysfs /sys')
|
|
exec_command_and_wait_for_pattern(self,
|
|
'cat /sys/bus/pci/devices/*/uevent',
|
|
'PCI_ID=1000:0012')
|
|
|
|
proxy_sock.close()
|
|
remote_sock.close()
|