[pve-devel] [PATCH v4 qemu-server 06/12] Adapt CPUConfig to handle custom models
Fabian Grünbichler
f.gruenbichler at proxmox.com
Mon Oct 14 13:11:29 CEST 2019
On October 7, 2019 2:47 pm, Stefan Reiter wrote:
> Turn CPUConfig into a SectionConfig with parsing/writing support for
> custom CPU models. IO is handled using cfs.
>
> Namespacing will be provided using "custom-" prefix for custom model
> names (in VM config only, cpu-models.conf will contain unprefixed
> names).
>
> Signed-off-by: Stefan Reiter <s.reiter at proxmox.com>
> ---
>
> v4: Use "custom-" prefix instead of distinct property for namespacing as
> suggested by Thomas. Left the v3 message below, but this fixes that issue.
>
> v3: I changed the "custom" property to "built-in" and negated its uses, as
> Thomas suggested. I'm not sure I like this too much compared to "custom" (with
> "built-in", you have to explicitly set a value in the config to 0, which looks
> weird - basically "unsetting" something to use a feature), but I'm very much
> fine with either.
>
>
> PVE/QemuServer/CPUConfig.pm | 46 +++++++++++++++++++++++++++++++++++--
> 1 file changed, 44 insertions(+), 2 deletions(-)
>
> diff --git a/PVE/QemuServer/CPUConfig.pm b/PVE/QemuServer/CPUConfig.pm
> index c55128f..6ea5811 100644
> --- a/PVE/QemuServer/CPUConfig.pm
> +++ b/PVE/QemuServer/CPUConfig.pm
> @@ -4,6 +4,8 @@ use strict;
> use warnings;
>
> use PVE::JSONSchema;
> +use PVE::Cluster qw(cfs_register_file cfs_read_file);
> +use base qw(PVE::SectionConfig);
>
> use base 'Exporter';
while this seems to work, IMHO it's would be better to merge both 'use
base' into a single statement..
> our @EXPORT_OK = qw(
> @@ -12,6 +14,15 @@ get_cpu_options
> qemu_machine_feature_enabled
> );
>
> +my $default_filename = "cpu-models.conf";
> +cfs_register_file($default_filename,
> + sub { PVE::QemuServer::CPUConfig->parse_config(@_); },
> + sub { PVE::QemuServer::CPUConfig->write_config(@_); });
> +
> +sub load_custom_model_conf {
> + return cfs_read_file($default_filename);
> +}
> +
> my $cpu_vendor_list = {
> # Intel CPUs
> 486 => 'GenuineIntel',
> @@ -83,11 +94,20 @@ my $cpu_flag = qr/[+-](@{[join('|', @supported_cpu_flags)]})/;
>
> our $cpu_fmt = {
> cputype => {
> - description => "Emulated CPU type.",
> + description => "Emulated CPU type. Can be default or custom name (custom model names must be prefixed with 'custom-').",
> type => 'string',
> - enum => [ sort { "\L$a" cmp "\L$b" } keys %$cpu_vendor_list ],
> + format_description => 'string',
> default => 'kvm64',
> default_key => 1,
> + optional => 1,
> + },
> + 'reported-model' => {
> + description => "CPU model and vendor to report to the guest. Must be a QEMU/KVM supported model."
> + . " Only valid for custom CPU model definitions, default models will always report themselves to the guest OS.",
> + type => 'string',
> + enum => [ sort { lc("$a") cmp lc("$b") } keys %$cpu_vendor_list ],
> + default => 'kvm64',
> + optional => 1,
> },
> hidden => {
> description => "Do not identify as a KVM virtual machine.",
> @@ -113,6 +133,24 @@ our $cpu_fmt = {
> },
> };
>
> +# Section config settings
> +my $defaultData = {
> + # shallow copy, since SectionConfig modifies propertyList internally
> + propertyList => { %$cpu_fmt },
> +};
> +
> +sub private {
> + return $defaultData;
> +}
> +
> +sub options {
> + return { %$cpu_fmt };
> +}
> +
> +sub type {
> + return 'cpu-model';
> +}
> +
> # Print a QEMU device node for a given VM configuration for hotplugging CPUs
> sub print_cpu_device {
> my ($conf, $id) = @_;
> @@ -251,4 +289,8 @@ sub qemu_machine_feature_enabled {
> $current_minor >= $version_minor);
> }
>
> +
> +__PACKAGE__->register();
> +__PACKAGE__->init();
> +
> 1;
> --
> 2.20.1
>
>
> _______________________________________________
> pve-devel mailing list
> pve-devel at pve.proxmox.com
> https://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel
>
>
More information about the pve-devel
mailing list