On 11/21/19 3:53 PM, Stefan Reiter wrote: > Add two overrides to avoid writing redundant information to the config > file. > > get_custom_model is used to retrieve a custom model configuration by > name. > > Signed-off-by: Stefan Reiter <s.rei...@proxmox.com> > ---
merge this into 04/12 ? > PVE/QemuServer/CPUConfig.pm | 62 +++++++++++++++++++++++++++++++++++++ > 1 file changed, 62 insertions(+) > > diff --git a/PVE/QemuServer/CPUConfig.pm b/PVE/QemuServer/CPUConfig.pm > index be16eba..1cdc3c2 100644 > --- a/PVE/QemuServer/CPUConfig.pm > +++ b/PVE/QemuServer/CPUConfig.pm > @@ -151,6 +151,68 @@ sub type { > return 'cpu-model'; > } > > +sub parse_section_header { > + my ($class, $line) = @_; > + > + my ($type, $sectionId, $errmsg, $config) = > + $class->SUPER::parse_section_header($line); > + > + return undef if !$type; > + return ($type, $sectionId, $errmsg, { > + # to avoid duplicate model name in config file, parse id as cputype > + # models parsed from file are by definition always custom > + cputype => "custom-$sectionId", > + }); > +} > + > +sub write_config { > + my ($class, $filename, $cfg) = @_; > + > + for my $model (keys %{$cfg->{ids}}) { > + my $model_conf = $cfg->{ids}->{$model}; > + > + die "internal error: tried saving built-in CPU model (or missing > prefix)\n" > + if !is_custom_model($model_conf->{cputype}); > + > + die "internal error: tried saving custom cpumodel with cputype > (ignoring prefix) not equal to \$cfg->ids entry\n" > + if "custom-$model" ne $model_conf->{cputype}; > + > + # saved in section header > + delete $model_conf->{cputype}; > + } > + > + $class->SUPER::write_config($filename, $cfg); > +} > + > +sub is_custom_model { > + my ($cputype) = @_; > + return $cputype =~ m/^custom-/; > +} > + > +# Use this to get a single model in the format described by $cpu_fmt. > +# Allows names with and without custom- prefix. > +sub get_custom_model { > + my ($name, $noerr) = @_; > + > + $name =~ s/^custom-//; > + my $conf = load_custom_model_conf(); > + > + my $entry = $conf->{ids}->{$name}; > + if (!defined($entry)) { > + die "Custom cputype '$name' not found\n" if !$noerr; > + return undef; > + } > + > + my $model = {}; > + for my $property (keys %$cpu_fmt) { > + if (my $value = $entry->{$property}) { > + $model->{$property} = $value; > + } > + } > + > + return $model; > +} > + > # Print a QEMU device node for a given VM configuration for hotplugging CPUs > sub print_cpu_device { > my ($conf, $id) = @_; > _______________________________________________ pve-devel mailing list pve-devel@pve.proxmox.com https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel