]> git.proxmox.com Git - qemu-server.git/commitdiff
add cpu_hotplug
authorAlexandre Derumier <aderumier@odiso.com>
Tue, 7 Jan 2014 12:32:51 +0000 (13:32 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Tue, 14 Jan 2014 06:29:25 +0000 (07:29 +0100)
Signed-off-by: Alexandre Derumier <aderumier@odiso.com>
PVE/API2/Qemu.pm
PVE/QemuServer.pm

index d038b06f5ad20f3a56a928358b485ea69b385248..b2c8908a90ef9aa7726a40d5d8c578208be5c094 100644 (file)
@@ -988,6 +988,10 @@ my $update_vm_api  = sub {
                    } elsif($opt eq 'tablet' && $param->{$opt} == 0){
                        PVE::QemuServer::vm_deviceunplug($vmid, $conf, $opt);
                    }
+               
+                   if($opt eq 'cores' && $conf->{maxcpus}){
+                       PVE::QemuServer::qemu_cpu_hotplug($vmid, $conf, $param->{$opt});
+                   }
 
                    $conf->{$opt} = $param->{$opt};
                    PVE::QemuServer::update_config_nolock($vmid, $conf, 1);
index a9aeac730f0c5a6be986a9f3569d16e589fe762b..78ab58fb402ce034c56f2ac2388bfa1e33bdd7c5 100644 (file)
@@ -2943,6 +2943,26 @@ sub qemu_netdevdel {
     return 1;
 }
 
+sub qemu_cpu_hotplug {
+    my ($vmid, $conf, $cores) = @_;
+
+    die "new cores config is not defined" if !$cores;
+    die "you can't add more cores than maxcpus" if $conf->{maxcpus} && ($cores > $conf->{maxcpus});
+    return if !check_running($vmid);
+
+    my $currentcores = $conf->{cores} if $conf->{cores};
+    die "current cores is not defined" if !$currentcores;
+    die "maxcpus is not defined" if !$conf->{maxcpus};
+    raise_param_exc({ 'cores' => "online cpu unplug is not yet possible" }) if($cores < $currentcores);
+
+    my $currentrunningcores = vm_mon_cmd($vmid, "query-cpus");
+    raise_param_exc({ 'cores' => "cores number if running vm is different than configuration" }) if scalar (@{$currentrunningcores}) != $currentcores;
+
+    for(my $i = $currentcores; $i < $cores; $i++){
+       vm_mon_cmd($vmid, "cpu-add", id => int($i));
+    }
+}
+
 sub qemu_block_set_io_throttle {
     my ($vmid, $deviceid, $bps, $bps_rd, $bps_wr, $iops, $iops_rd, $iops_wr) = @_;