#!/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 # # 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#') exec_command_and_wait_for_pattern(self, 'cd ..', prompt) self.vm.cmd('device_del', id='c1') exec_command_and_wait_for_pattern(self, 'while cd /sys/devices/system/cpu/cpu1 ;' ' do sleep 0.2 ; done', 'No such file or directory') if __name__ == '__main__': LinuxKernelTest.main()