about summary refs log tree commit diff
path: root/nixos
diff options
context:
space:
mode:
authorAdam Stephens <adam@valkor.net>2024-04-17 18:08:39 -0400
committerAdam Stephens <adam@valkor.net>2024-04-18 10:36:55 -0400
commit76c69af624667a412e0afabdda43b9c3f0c7c649 (patch)
tree51e98e505e0a0b70acf9616bd5d62b1d3ac202fa /nixos
parentb2cd5e15fb5fa5b8faa7a64702e066bfa1e9b1e7 (diff)
nixos/lxd-virtual-machine: enable CPU hotplug for x86 VMs
Diffstat (limited to 'nixos')
-rw-r--r--nixos/modules/virtualisation/lxd-virtual-machine.nix4
-rw-r--r--nixos/tests/incus/virtual-machine.nix9
2 files changed, 13 insertions, 0 deletions
diff --git a/nixos/modules/virtualisation/lxd-virtual-machine.nix b/nixos/modules/virtualisation/lxd-virtual-machine.nix
index 92434cb9babf4..2768e7c259662 100644
--- a/nixos/modules/virtualisation/lxd-virtual-machine.nix
+++ b/nixos/modules/virtualisation/lxd-virtual-machine.nix
@@ -45,6 +45,10 @@ in {
 
     boot.kernelParams = ["console=tty1" "console=${serialDevice}"];
 
+    services.udev.extraRules = ''
+      SUBSYSTEM=="cpu", CONST{arch}=="x86-64", TEST=="online", ATTR{online}=="0", ATTR{online}="1"
+    '';
+
     virtualisation.lxd.agent.enable = lib.mkDefault true;
   };
 }
diff --git a/nixos/tests/incus/virtual-machine.nix b/nixos/tests/incus/virtual-machine.nix
index ab378c7b9490e..48178aaed32c4 100644
--- a/nixos/tests/incus/virtual-machine.nix
+++ b/nixos/tests/incus/virtual-machine.nix
@@ -57,5 +57,14 @@ in
 
     with subtest("lxd-agent has a valid path"):
         machine.succeed("incus exec ${instance-name} -- bash -c 'true'")
+
+    with subtest("guest supports cpu hotplug"):
+        machine.succeed("incus config set ${instance-name} limits.cpu=1")
+        count = int(machine.succeed("incus exec ${instance-name} -- nproc").strip())
+        assert count == 1, f"Wrong number of CPUs reported, want: 1, got: {count}"
+
+        machine.succeed("incus config set ${instance-name} limits.cpu=2")
+        count = int(machine.succeed("incus exec ${instance-name} -- nproc").strip())
+        assert count == 2, f"Wrong number of CPUs reported, want: 2, got: {count}"
   '';
 })