From: Alexandre Derumier Date: Tue, 7 Jan 2014 12:32:51 +0000 (+0100) Subject: add cpu_hotplug X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=838776ab650f0593b48c234070c1a189fdbd72c7;p=qemu-server.git add cpu_hotplug Signed-off-by: Alexandre Derumier --- diff --git a/PVE/API2/Qemu.pm b/PVE/API2/Qemu.pm index d038b06f..b2c8908a 100644 --- a/PVE/API2/Qemu.pm +++ b/PVE/API2/Qemu.pm @@ -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); diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm index a9aeac73..78ab58fb 100644 --- a/PVE/QemuServer.pm +++ b/PVE/QemuServer.pm @@ -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) = @_;