[pve-devel] [PATCH qemu-server 4/5] Unify the default value for 'kvm'

Filip Schauer f.schauer at proxmox.com
Fri Feb 23 12:54:46 CET 2024


This is missing a descriptive commit message. It must have accidentally
gone lost during a rebase.

Use this as the commit message:

cpu config: Unify the default value for 'kvm'

Make the default value for 'kvm' consistent, taking into account whether
the VM will run on the same CPU architecture as the host.

This would be a breaking change to CPU hotplug for VMs with a different
CPU architecture running on an x86_64 host, as in this case the default
CPU type for CPU hotplug changes from 'kvm64' to 'qemu64'. However, CPU
hotplug of non x86_64 architectures is not supported anyway, so this is
not a breaking change after all.

It should be noted that this change does alter the CPU hotplug behaviour
when emulating an x86_64 CPU on a non-x86_64 host. This is however not
officially supported in Proxmox VE.

On 21/02/2024 15:33, Filip Schauer wrote:
> Signed-off-by: Filip Schauer <f.schauer at proxmox.com>
> ---
>   PVE/QemuServer.pm           | 5 +++--
>   PVE/QemuServer/CPUConfig.pm | 5 +++--
>   2 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/PVE/QemuServer.pm b/PVE/QemuServer.pm
> index 7600939..6055d40 100644
> --- a/PVE/QemuServer.pm
> +++ b/PVE/QemuServer.pm
> @@ -3744,7 +3744,7 @@ sub config_to_command {
>       if ($hotplug_features->{cpu} && min_version($machine_version, 2, 7)) {
>   	push @$cmd, '-smp', "1,sockets=$sockets,cores=$cores,maxcpus=$maxcpus";
>           for (my $i = 2; $i <= $vcpus; $i++)  {
> -	    my $cpustr = print_cpu_device($conf,$i);
> +	    my $cpustr = print_cpu_device($conf, $arch, $i);
>   	    push @$cmd, '-device', $cpustr;
>   	}
>   
> @@ -4586,9 +4586,10 @@ sub qemu_cpu_hotplug {
>   	if scalar(@{$currentrunningvcpus}) != $currentvcpus;
>   
>       if (PVE::QemuServer::Machine::machine_version($machine_type, 2, 7)) {
> +	my $arch = get_vm_arch($conf);
>   
>   	for (my $i = $currentvcpus+1; $i <= $vcpus; $i++) {
> -	    my $cpustr = print_cpu_device($conf, $i);
> +	    my $cpustr = print_cpu_device($conf, $arch, $i);
>   	    qemu_deviceadd($vmid, $cpustr);
>   
>   	    my $retry = 0;
> diff --git a/PVE/QemuServer/CPUConfig.pm b/PVE/QemuServer/CPUConfig.pm
> index 65ba43f..7d471f4 100644
> --- a/PVE/QemuServer/CPUConfig.pm
> +++ b/PVE/QemuServer/CPUConfig.pm
> @@ -5,6 +5,7 @@ use warnings;
>   
>   use PVE::JSONSchema;
>   use PVE::Cluster qw(cfs_register_file cfs_read_file);
> +use PVE::Tools qw(is_native_arch);
>   use PVE::QemuServer::Helpers qw(min_version);
>   
>   use base qw(PVE::SectionConfig Exporter);
> @@ -414,9 +415,9 @@ sub get_custom_model {
>   
>   # Print a QEMU device node for a given VM configuration for hotplugging CPUs
>   sub print_cpu_device {
> -    my ($conf, $id) = @_;
> +    my ($conf, $arch, $id) = @_;
>   
> -    my $kvm = $conf->{kvm} // 1;
> +    my $kvm = $conf->{kvm} // is_native_arch($arch);
>       my $cpu = get_default_cpu_type('x86_64', $kvm);
>       if (my $cputype = $conf->{cpu}) {
>   	my $cpuconf = PVE::JSONSchema::parse_property_string('pve-vm-cpu-conf', $cputype)




More information about the pve-devel mailing list