]> git.proxmox.com Git - qemu-server.git/commitdiff
cpu hotplug : add new cpu hotplug method for qemu 2.7
authorAlexandre Derumier <aderumier@odiso.com>
Mon, 17 Oct 2016 10:18:57 +0000 (12:18 +0200)
committerWolfgang Bumiller <w.bumiller@proxmox.com>
Mon, 17 Oct 2016 10:51:12 +0000 (12:51 +0200)
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
PVE/QemuServer.pm

index e3c255051857fb65db2ebb4291f03ee6ee20e926..46d040344daf6882746ca064d3c5358552812157 100644 (file)
@@ -3776,7 +3776,7 @@ sub qemu_cpu_hotplug {
 
     my $currentvcpus = $conf->{vcpus} || $maxcpus;
 
-    if ($vcpus < $currentvcpus) { 
+    if ($vcpus < $currentvcpus) {
 
        if (qemu_machine_feature_enabled ($machine_type, undef, 2, 7)) {
 
@@ -3806,8 +3806,30 @@ sub qemu_cpu_hotplug {
     die "vcpus in running vm is different than configuration\n"
        if scalar(@{$currentrunningvcpus}) != $currentvcpus;
 
-    for (my $i = $currentvcpus; $i < $vcpus; $i++) {
-       vm_mon_cmd($vmid, "cpu-add", id => int($i));
+    if (qemu_machine_feature_enabled ($machine_type, undef, 2, 7)) {
+
+       for (my $i = $currentvcpus+1; $i <= $vcpus; $i++) {
+           my $cpustr = print_cpu_device($conf, $i);
+           qemu_deviceadd($vmid, $cpustr);
+
+           my $retry = 0;
+           my $currentrunningvcpus = undef;
+           while (1) {
+               $currentrunningvcpus = vm_mon_cmd($vmid, "query-cpus");
+               last if scalar(@{$currentrunningvcpus}) == $i;
+               raise_param_exc({ "cpu hotplug" => "error hotplug cpu$i" }) if $retry > 10;
+               sleep 1;
+               $retry++;
+           }
+            #update conf after each succesfull cpu hotplug
+           $conf->{vcpus} = scalar(@{$currentrunningvcpus});
+           PVE::QemuConfig->write_config($vmid, $conf);
+       }
+    } else {
+
+       for (my $i = $currentvcpus; $i < $vcpus; $i++) {
+           vm_mon_cmd($vmid, "cpu-add", id => int($i));
+       }
     }
 }