use PVE::Exception qw(raise raise_param_exc);
use PVE::QemuServer;
+use PVE::QemuServer::Monitor qw(mon_cmd);
my $MAX_NUMA = 8;
my $MAX_MEM = 4194304;
my $hugepages_host_topology = hugepages_host_topology();
hugepages_allocate($hugepages_topology, $hugepages_host_topology);
- eval { PVE::QemuServer::vm_mon_cmd($vmid, "object-add", 'qom-type' => "memory-backend-file", id => "mem-$name", props => {
+ eval { mon_cmd($vmid, "object-add", 'qom-type' => "memory-backend-file", id => "mem-$name", props => {
size => int($dimm_size*1024*1024), 'mem-path' => $path, share => JSON::true, prealloc => JSON::true } ); };
if (my $err = $@) {
hugepages_reset($hugepages_host_topology);
eval { hugepages_update_locked($code); };
} else {
- eval { PVE::QemuServer::vm_mon_cmd($vmid, "object-add", 'qom-type' => "memory-backend-ram", id => "mem-$name", props => { size => int($dimm_size*1024*1024) } ) };
+ eval { mon_cmd($vmid, "object-add", 'qom-type' => "memory-backend-ram", id => "mem-$name", props => { size => int($dimm_size*1024*1024) } ) };
}
if (my $err = $@) {
die $err;
}
- eval { PVE::QemuServer::vm_mon_cmd($vmid, "device_add", driver => "pc-dimm", id => "$name", memdev => "mem-$name", node => $numanode) };
+ eval { mon_cmd($vmid, "device_add", driver => "pc-dimm", id => "$name", memdev => "mem-$name", node => $numanode) };
if (my $err = $@) {
eval { PVE::QemuServer::qemu_objectdel($vmid, "mem-$name"); };
die $err;
sub qemu_dimm_list {
my ($vmid) = @_;
- my $dimmarray = PVE::QemuServer::vm_mon_cmd_nocheck($vmid, "query-memory-devices");
+ my $dimmarray = mon_cmd($vmid, "query-memory-devices");
my $dimms = {};
foreach my $dimm (@$dimmarray) {
if ($hotplug_features->{memory}) {
die "NUMA needs to be enabled for memory hotplug\n" if !$conf->{numa};
die "Total memory is bigger than ${MAX_MEM}MB\n" if $memory > $MAX_MEM;
+
+ for (my $i = 0; $i < $MAX_NUMA; $i++) {
+ die "cannot enable memory hotplugging with custom NUMA topology\n"
+ if $conf->{"numa$i"};
+ }
+
my $sockets = 1;
$sockets = $conf->{sockets} if $conf->{sockets};
push @$cmd, "-object" , $mem_object;
push @$cmd, "-device", "pc-dimm,id=$name,memdev=mem-$name,node=$numanode";
- #if dimm_memory is not aligned to dimm map
- if($current_size > $memory) {
- $conf->{memory} = $current_size;
- PVE::QemuConfig->write_config($vmid, $conf);
- }
+ die "memory size ($memory) must be aligned to $dimm_size for hotplugging\n"
+ if $current_size > $memory;
});
}
}