** Description changed:

+ 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
+    <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'/>
+      </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 :
+       ...
+      <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 -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
+ 
+  * The desired result, achieved with the help of the new udev rule
+    is like this:
+    $ 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
+ 
+  * 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
-  
+   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 
-  
+ 
+ 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. 
+    ...
+   <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>
+    ...
+   <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
+   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
+   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.
-  
+ 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]

-- 
You received this bug notification because you are a member of Ubuntu
Bugs, which is subscribed to Ubuntu.
https://bugs.launchpad.net/bugs/2078347

Title:
  [UBUNTU 24.04] Udev/rules: Missing rules causes newly added CPUs to
  stay offline

To manage notifications about this bug go to:
https://bugs.launchpad.net/ubuntu-z-systems/+bug/2078347/+subscriptions


-- 
ubuntu-bugs mailing list
[email protected]
https://lists.ubuntu.com/mailman/listinfo/ubuntu-bugs

Reply via email to