Successful new verification on noble (with updated s390-tools). Updating the tags accordingly.
** Attachment added: "verification noble_new.txt" https://bugs.launchpad.net/ubuntu/+source/s390-tools/+bug/2078347/+attachment/5903448/+files/verification%20noble_new.txt ** Tags removed: verification-needed-noble ** Tags added: verification-done-noble -- You received this bug notification because you are a member of Debcrafters packages, which is subscribed to s390-tools in Ubuntu. https://bugs.launchpad.net/bugs/2078347 Title: [UBUNTU 24.04] Udev/rules: Missing rules causes newly added CPUs to stay offline Status in Ubuntu on IBM z Systems: Fix Committed Status in s390-tools package in Ubuntu: Fix Released Status in s390-tools-signed package in Ubuntu: Fix Released Status in s390-tools source package in Noble: Fix Committed Status in s390-tools-signed source package in Noble: Fix Committed Status in s390-tools source package in Plucky: Fix Committed Status in s390-tools-signed source package in Plucky: Fix Committed Status in s390-tools source package in Questing: Fix Released Status in s390-tools-signed source package in Questing: Fix Released Bug description: SRU Justification: [ Impact ] * Newly (online) CPUs that are hotpluggable and that are added to a live system, are not immediately used and stay offline. * They only become online after a reboot. But the reason to add CPUs is usually an immediate need for more capacity, so that a reboot with downtime is not wanted. * This can be addressed by a udev rule in /etc/udev/rules.d/ like: SUBSYSTEM=="cpu", ACTION=="add", CONST{arch}=="s390*", \ ATTR{configure}=="1", TEST=="online", ATTR{online}!="1", ATTR{online}="1" that automatically hotplugs any (new) CPUs added to the system to configured state. [ Fix ] * 8dc06d14d769 ("udev: Introduce a rule to set newly hotplugged CPUs online") https://github.com/ibm-s390-linux/s390-tools/commit/\ 8dc06d14d76940b3059cd6063fc7d8e7f0150271 [ Test Plan ] * Adding CPU to a system in online and configured state is possible in LPARs, z/VM guests or KVM virtual machines. It's easiest to test this with the help of KVM. * Setup an Ubuntu Server 24.04 LPAR with KVM vrt-stack. * Define a KVM guest with hotpluggable and non-hotpluggable CPUs whereas the amount of used (current) CPUs is lower than the overall amount (let's say 6 out of 8): virsh dumpxml vm | grep vcpu <vcpu placement='static' current='6'>8</vcpu> <vcpus> <vcpu id='0' enabled='yes' hotpluggable='no' order='1'/> <vcpu id='1' enabled='yes' hotpluggable='no' order='2'/> <vcpu id='2' enabled='yes' hotpluggable='yes' order='3'/> <vcpu id='3' enabled='yes' hotpluggable='yes' order='4'/> <vcpu id='4' enabled='yes' hotpluggable='yes' order='5'/> <vcpu id='5' enabled='yes' hotpluggable='yes' order='6'/> <vcpu id='6' enabled='no' hotpluggable='yes'/> <vcpu id='7' enabled='no' hotpluggable='yes'/> </vcpus> * Now attempt to add CPUs to the guest in a live "running" state. $ virsh setvcpus vm 8 --live * The KVM guest XML is updated: virsh dumpxml vm | grep vcpu <vcpu placement='static'>8</vcpu> <vcpus> <vcpu id='0' enabled='yes' hotpluggable='no' order='1'/> <vcpu id='1' enabled='yes' hotpluggable='no' order='2'/> <vcpu id='2' enabled='yes' hotpluggable='yes' order='3'/> <vcpu id='3' enabled='yes' hotpluggable='yes' order='4'/> <vcpu id='4' enabled='yes' hotpluggable='yes' order='5'/> <vcpu id='5' enabled='yes' hotpluggable='yes' order='6'/> <vcpu id='6' enabled='yes' hotpluggable='yes' order='7'/> <vcpu id='7' enabled='yes' hotpluggable='yes' order='8'/> </vcpus> * But the CPUs inside of the guest still stay offline: $ lscpu | grep CPU\(s\) CPU(s): 6 On-line CPU(s) list: 0-5 NUMA node0 CPU(s): 0-5 * The desired result, achieved with the help of the new udev rule $ lscpu | grep CPU\(s\) CPU(s): 8 On-line CPU(s) list: 0-7 NUMA node0 CPU(s): 0-7 * Without the udev rule, this can only be achieved with a reboot. But it's not desired, since in cases where immediately new CPU capacity is needed, a downtime (caused by a reboot) is counterproductive. [ Where problems could occur ] * This is only a configuration change and not a code change. However, things could still go wrong: - No or not desired functionality in case the udev rules is installed in a wrong folder. - The udev rule itself could be wrong. - wrong subsystem would lead to listen to a wrong event - wrong action would lead to wrong behavior - wrong architecture would run the rule not on s390x (as architecture constant "s390*" is used here, which covers s390x and s390, but Ubuntu supports s390x (64-bit) only, but since it's upstream like this it should be kept) - wrong attribute would lead to wrong behavior, action or status. * Since the architecture constant is s390(x), this affects IBM Z and LinuxONE only, and has no impact on other architectures. [ Other Info ] * Since this is the same for all Linux distros, this udev rule was added to the s390-tools in general. (The s390-tools package already ships udev rules for other purposes.) * It's already included in questing, with the updated s390-tools version 2.38.0 (as part of LP: #2115416). __________ ---Problem Description---------------------------------------------------------------------------------- Adding a configured CPU to a system (LPAR, ZVM or KVM) leaves that CPU configured but hotplugged off. # lscpu -e CPU NODE DRAWER BOOK SOCKET CORE L1d:L1i:L2 ONLINE CONFIGURED POLARIZATION ADDRESS 0 0 0 0 0 0 0:0:0 yes yes horizontal 0 1 0 0 0 1 1 1:1:1 yes yes horizontal 1 2 0 0 0 2 2 2:2:2 yes yes horizontal 2 3 0 0 0 3 3 3:3:3 yes yes horizontal 3 4 0 0 0 4 4 4:4:4 yes yes horizontal 4 5 0 0 0 5 5 5:5:5 yes yes horizontal 5 6 - - - - - - no yes horizontal 6 7 - - - - - - no yes horizontal 7 ---Debugger--- A debugger is not configured Machine Type = z/VM, LPAR ---uname output--- 6.8.0-41-generic #41-Ubuntu SMP Fri Aug 2 19:51:49 UTC 2024 s390x s390x s390x GNU/Linux ---Steps to Reproduce--- Easiest way to reproduce is using a KVM guest to add new CPUs. 1. Before adding CPUs: $ virsh dumpxml vm <domain type='kvm' id='106'> ... <vcpu placement='static' current='6'>8</vcpu> <vcpus> <vcpu id='0' enabled='yes' hotpluggable='no' order='1'/> <vcpu id='1' enabled='yes' hotpluggable='no' order='2'/> <vcpu id='2' enabled='yes' hotpluggable='yes' order='3'/> <vcpu id='3' enabled='yes' hotpluggable='yes' order='4'/> <vcpu id='4' enabled='yes' hotpluggable='yes' order='5'/> <vcpu id='5' enabled='yes' hotpluggable='yes' order='6'/> <vcpu id='6' enabled='no' hotpluggable='yes'/> <vcpu id='7' enabled='no' hotpluggable='yes'/> 2. Attempt to add CPUs to the guest in a "running" state. $ virsh setvcpus vm 8 --live 3. The guest XML is updated : ... <vcpu placement='static'>8</vcpu> <vcpus> <vcpu id='0' enabled='yes' hotpluggable='no' order='1'/> <vcpu id='1' enabled='yes' hotpluggable='no' order='2'/> <vcpu id='2' enabled='yes' hotpluggable='yes' order='3'/> <vcpu id='3' enabled='yes' hotpluggable='yes' order='4'/> <vcpu id='4' enabled='yes' hotpluggable='yes' order='5'/> <vcpu id='5' enabled='yes' hotpluggable='yes' order='6'/> <vcpu id='6' enabled='yes' hotpluggable='yes' order='7'/> <vcpu id='7' enabled='yes' hotpluggable='yes' order='8'/> </vcpus> 4. But inside the guest, the CPUs are in offline state: $ lscpu -e CPU NODE DRAWER BOOK SOCKET CORE L1d:L1i:L2 ONLINE CONFIGURED POLARIZATION ADDRESS 0 0 0 0 0 0 0:0:0 yes yes horizontal 0 1 0 0 0 1 1 1:1:1 yes yes horizontal 1 2 0 0 0 2 2 2:2:2 yes yes horizontal 2 3 0 0 0 3 3 3:3:3 yes yes horizontal 3 4 0 0 0 4 4 4:4:4 yes yes horizontal 4 5 0 0 0 5 5 5:5:5 yes yes horizontal 5 6 - - - - - - no yes horizontal 6 7 - - - - - - no yes horizontal 7 5. Post rebooting the guest, the CPUs are online: $ virsh reboot vm Inside the guest: $ lscpu -e CPU NODE DRAWER BOOK SOCKET CORE L1d:L1i:L2 ONLINE CONFIGURED POLARIZATION ADDRESS 0 0 0 0 0 0 0:0:0 yes yes horizontal 0 1 0 0 0 1 1 1:1:1 yes yes horizontal 1 2 0 0 0 2 2 2:2:2 yes yes horizontal 2 3 0 0 0 3 3 3:3:3 yes yes horizontal 3 4 0 0 0 4 4 4:4:4 yes yes horizontal 4 5 0 0 0 5 5 5:5:5 yes yes horizontal 5 6 0 0 0 6 6 6:6:6 yes yes horizontal 6 7 0 0 0 7 7 7:7:7 yes yes horizontal 7 The CPUs should be online after adding them to the system. Other distros already have a udev rule to circumvent this under; /etc/udev/rules.d/ The rule does a check if a newly added CPUs are configured but not online, then hotplugs it to make it online. If CPUs are NOT configured then they should stay offline. Contact Information = [email protected] To manage notifications about this bug go to: https://bugs.launchpad.net/ubuntu-z-systems/+bug/2078347/+subscriptions -- Mailing list: https://launchpad.net/~debcrafters-packages Post to : [email protected] Unsubscribe : https://launchpad.net/~debcrafters-packages More help : https://help.launchpad.net/ListHelp

