mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-07-28 12:53:53 -06:00

Since we don't have ssh support in the functional test framework yet, simply use the serial console for this test instead. It's also sufficient to only boot into an initrd here, no need to fire up a full-blown guest, so the test now finishes much faster. While we're at it, also unplug the CPU now and check that it is gone in the guest. Message-ID: <20241217142020.155776-1-thuth@redhat.com> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Thomas Huth <thuth@redhat.com>
69 lines
2.5 KiB
Python
Executable file
69 lines
2.5 KiB
Python
Executable file
#!/usr/bin/env python3
|
|
#
|
|
# Functional test that hotplugs a CPU and checks it on a Linux guest
|
|
#
|
|
# Copyright (c) 2021 Red Hat, Inc.
|
|
#
|
|
# Author:
|
|
# Cleber Rosa <crosa@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 qemu_test import LinuxKernelTest, Asset, exec_command_and_wait_for_pattern
|
|
|
|
|
|
class HotPlugCPU(LinuxKernelTest):
|
|
|
|
ASSET_KERNEL = Asset(
|
|
('https://archives.fedoraproject.org/pub/archive/fedora/linux/releases'
|
|
'/31/Server/x86_64/os/images/pxeboot/vmlinuz'),
|
|
'd4738d03dbbe083ca610d0821d0a8f1488bebbdccef54ce33e3adb35fda00129')
|
|
|
|
ASSET_INITRD = Asset(
|
|
('https://archives.fedoraproject.org/pub/archive/fedora/linux/releases'
|
|
'/31/Server/x86_64/os/images/pxeboot/initrd.img'),
|
|
'277cd6c7adf77c7e63d73bbb2cded8ef9e2d3a2f100000e92ff1f8396513cd8b')
|
|
|
|
def test_hotplug(self):
|
|
|
|
self.require_accelerator('kvm')
|
|
self.vm.add_args('-accel', 'kvm')
|
|
self.vm.add_args('-cpu', 'Haswell')
|
|
self.vm.add_args('-smp', '1,sockets=1,cores=2,threads=1,maxcpus=2')
|
|
self.vm.add_args('-m', '1G')
|
|
self.vm.add_args('-append', 'console=ttyS0 rd.rescue')
|
|
|
|
self.launch_kernel(self.ASSET_KERNEL.fetch(),
|
|
self.ASSET_INITRD.fetch(),
|
|
wait_for='Entering emergency mode.')
|
|
prompt = '# '
|
|
self.wait_for_console_pattern(prompt)
|
|
|
|
exec_command_and_wait_for_pattern(self,
|
|
'cd /sys/devices/system/cpu/cpu0',
|
|
'cpu0#')
|
|
exec_command_and_wait_for_pattern(self,
|
|
'cd /sys/devices/system/cpu/cpu1',
|
|
'No such file or directory')
|
|
|
|
self.vm.cmd('device_add',
|
|
driver='Haswell-x86_64-cpu',
|
|
id='c1',
|
|
socket_id=0,
|
|
core_id=1,
|
|
thread_id=0)
|
|
self.wait_for_console_pattern('CPU1 has been hot-added')
|
|
|
|
exec_command_and_wait_for_pattern(self,
|
|
'cd /sys/devices/system/cpu/cpu1',
|
|
'cpu1#')
|
|
|
|
self.vm.cmd('device_del', id='c1')
|
|
|
|
exec_command_and_wait_for_pattern(self,
|
|
'cd /sys/devices/system/cpu/cpu1',
|
|
'No such file or directory')
|
|
|
|
if __name__ == '__main__':
|
|
LinuxKernelTest.main()
|