all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models
@ 2026-01-29 13:09 Fiona Ebner
  2026-01-29 13:09 ` [PATCH qemu-server v2 1/8] cpu config: introduce pve-qm-cpu-arch standard option for virtual CPU architecture Fiona Ebner
                   ` (9 more replies)
  0 siblings, 10 replies; 14+ messages in thread
From: Fiona Ebner @ 2026-01-29 13:09 UTC (permalink / raw)
  To: pve-devel

Changes in v2:
* also support querying flags for a specific arch
* style: fix include ordering in CPU API module

Previously, only the default 'cortex-a57' CPU model would be used
implicitly. Group models and built-in models by architecture, since
that is what (most) use sites are interested in. Note that the 'host'
model only exists if the host arch matches the emulator/vCPU arch.

Some use sites do require a list of all possible ones, e.g. custom
types, because they are not namespaced by arch.

qemu-server:

Fiona Ebner (8):
  cpu config: introduce pve-qm-cpu-arch standard option for virtual CPU
    architecture
  cpu config: guard adding hyperv enlightenments by arch
  cpu config: 'hidden' option only applies to vCPUs with x86_64 arch
  cpu config: introduce module-wide $host_arch variable
  cpu config: support aarch64 CPU models
  api: cpu: allow querying CPU models for a given architecture
  cpu config: support aarch64 CPU flags
  api: cpu flags: allow querying CPU flags for a given architecture

 src/PVE/API2/Qemu/CPU.pm        |   8 +-
 src/PVE/API2/Qemu/CPUFlags.pm   |  11 +-
 src/PVE/QemuServer.pm           |   7 +-
 src/PVE/QemuServer/CPUConfig.pm | 453 ++++++++++++++++++--------------
 4 files changed, 279 insertions(+), 200 deletions(-)


Summary over all repositories:
  4 files changed, 279 insertions(+), 200 deletions(-)

-- 
Generated by git-murpp 0.5.0




^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH qemu-server v2 1/8] cpu config: introduce pve-qm-cpu-arch standard option for virtual CPU architecture
  2026-01-29 13:09 [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models Fiona Ebner
@ 2026-01-29 13:09 ` Fiona Ebner
  2026-01-29 13:09 ` [PATCH qemu-server v2 2/8] cpu config: guard adding hyperv enlightenments by arch Fiona Ebner
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Fiona Ebner @ 2026-01-29 13:09 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
 src/PVE/QemuServer.pm           | 7 +------
 src/PVE/QemuServer/CPUConfig.pm | 7 +++++++
 2 files changed, 8 insertions(+), 6 deletions(-)

diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm
index 341b4321..dae72c40 100644
--- a/src/PVE/QemuServer.pm
+++ b/src/PVE/QemuServer.pm
@@ -637,12 +637,7 @@ EODESCR
             . ' This is used internally for snapshots.',
     },
     machine => get_standard_option('pve-qemu-machine'),
-    arch => {
-        description => "Virtual processor architecture. Defaults to the host.",
-        optional => 1,
-        type => 'string',
-        enum => [qw(x86_64 aarch64)],
-    },
+    arch => get_standard_option('pve-qm-cpu-arch', { optional => 1 }),
     smbios1 => {
         description => "Specify SMBIOS type 1 fields.",
         type => 'string',
diff --git a/src/PVE/QemuServer/CPUConfig.pm b/src/PVE/QemuServer/CPUConfig.pm
index ec418e73..6240807b 100644
--- a/src/PVE/QemuServer/CPUConfig.pm
+++ b/src/PVE/QemuServer/CPUConfig.pm
@@ -25,6 +25,13 @@ our @EXPORT_OK = qw(
     get_cvm_type
 );
 
+my $arch_desc = {
+    description => "Virtual processor architecture. Defaults to the host architecture.",
+    type => 'string',
+    enum => [qw(x86_64 aarch64)],
+};
+PVE::JSONSchema::register_standard_option("pve-qm-cpu-arch", $arch_desc);
+
 # under certain race-conditions, this module might be loaded before pve-cluster
 # has started completely, so ensure we don't prevent the FUSE mount with our dir
 if (PVE::Cluster::check_cfs_is_mounted(1)) {
-- 
2.47.3





^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH qemu-server v2 2/8] cpu config: guard adding hyperv enlightenments by arch
  2026-01-29 13:09 [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models Fiona Ebner
  2026-01-29 13:09 ` [PATCH qemu-server v2 1/8] cpu config: introduce pve-qm-cpu-arch standard option for virtual CPU architecture Fiona Ebner
@ 2026-01-29 13:09 ` Fiona Ebner
  2026-01-29 13:10 ` [PATCH qemu-server v2 3/8] cpu config: 'hidden' option only applies to vCPUs with x86_64 arch Fiona Ebner
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Fiona Ebner @ 2026-01-29 13:09 UTC (permalink / raw)
  To: pve-devel

These CPU flags are not available for non-x86 archs like aarch64.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
 src/PVE/QemuServer/CPUConfig.pm | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/src/PVE/QemuServer/CPUConfig.pm b/src/PVE/QemuServer/CPUConfig.pm
index 6240807b..dfbe4546 100644
--- a/src/PVE/QemuServer/CPUConfig.pm
+++ b/src/PVE/QemuServer/CPUConfig.pm
@@ -811,7 +811,7 @@ sub get_cpu_options {
     my $pve_flags = get_pve_cpu_flags($conf, $kvm, $cputype, $arch, $machine_version);
 
     my $hv_flags;
-    if ($kvm) {
+    if ($kvm && $arch eq 'x86_64') {
         $hv_flags = get_hyperv_enlightenments(
             $winversion,
             $machine_version,
-- 
2.47.3





^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH qemu-server v2 3/8] cpu config: 'hidden' option only applies to vCPUs with x86_64 arch
  2026-01-29 13:09 [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models Fiona Ebner
  2026-01-29 13:09 ` [PATCH qemu-server v2 1/8] cpu config: introduce pve-qm-cpu-arch standard option for virtual CPU architecture Fiona Ebner
  2026-01-29 13:09 ` [PATCH qemu-server v2 2/8] cpu config: guard adding hyperv enlightenments by arch Fiona Ebner
@ 2026-01-29 13:10 ` Fiona Ebner
  2026-01-29 13:10 ` [PATCH qemu-server v2 4/8] cpu config: introduce module-wide $host_arch variable Fiona Ebner
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Fiona Ebner @ 2026-01-29 13:10 UTC (permalink / raw)
  To: pve-devel

There is no 'kvm' CPU flag for aarch64 CPU types.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
 src/PVE/QemuServer/CPUConfig.pm | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/src/PVE/QemuServer/CPUConfig.pm b/src/PVE/QemuServer/CPUConfig.pm
index dfbe4546..825e691a 100644
--- a/src/PVE/QemuServer/CPUConfig.pm
+++ b/src/PVE/QemuServer/CPUConfig.pm
@@ -277,7 +277,9 @@ my $cpu_fmt = {
         optional => 1,
     },
     hidden => {
-        description => "Do not identify as a KVM virtual machine.",
+        description =>
+            "Do not identify as a KVM virtual machine. Only affects vCPUs with x86-64"
+            . " architecture.",
         type => 'boolean',
         optional => 1,
         default => 0,
@@ -835,7 +837,7 @@ sub get_cpu_options {
             reason => "error if requested CPU settings not available",
         };
     }
-    if ($kvm_off) {
+    if ($kvm_off && $arch eq 'x86_64') {
         $pve_forced_flags->{'kvm'} = {
             value => "off",
             reason => "hide KVM virtualization from guest",
-- 
2.47.3





^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH qemu-server v2 4/8] cpu config: introduce module-wide $host_arch variable
  2026-01-29 13:09 [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models Fiona Ebner
                   ` (2 preceding siblings ...)
  2026-01-29 13:10 ` [PATCH qemu-server v2 3/8] cpu config: 'hidden' option only applies to vCPUs with x86_64 arch Fiona Ebner
@ 2026-01-29 13:10 ` Fiona Ebner
  2026-02-03 13:51   ` Thomas Lamprecht
  2026-01-29 13:10 ` [PATCH qemu-server v2 5/8] cpu config: support aarch64 CPU models Fiona Ebner
                   ` (5 subsequent siblings)
  9 siblings, 1 reply; 14+ messages in thread
From: Fiona Ebner @ 2026-01-29 13:10 UTC (permalink / raw)
  To: pve-devel

It cannot change while the module is loaded. Also, commit "cpu config:
support aarch64 CPU models" will use the host arch as a hash key,
which is cleaner if no additional function call is required.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
 src/PVE/QemuServer/CPUConfig.pm | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/PVE/QemuServer/CPUConfig.pm b/src/PVE/QemuServer/CPUConfig.pm
index 825e691a..2825da46 100644
--- a/src/PVE/QemuServer/CPUConfig.pm
+++ b/src/PVE/QemuServer/CPUConfig.pm
@@ -9,7 +9,7 @@ use PVE::JSONSchema qw(json_bool);
 use PVE::Cluster qw(cfs_register_file cfs_read_file);
 use PVE::ProcFSTools;
 use PVE::RESTEnvironment qw(log_warn);
-use PVE::Tools qw(run_command get_host_arch);
+use PVE::Tools qw(run_command);
 
 use PVE::QemuServer::Helpers qw(min_version);
 
@@ -25,6 +25,8 @@ our @EXPORT_OK = qw(
     get_cvm_type
 );
 
+my $host_arch = PVE::Tools::get_host_arch();
+
 my $arch_desc = {
     description => "Virtual processor architecture. Defaults to the host architecture.",
     type => 'string',
@@ -1016,13 +1018,13 @@ sub get_default_cpu_type {
 
 sub is_native_arch($) {
     my ($arch) = @_;
-    return get_host_arch() eq $arch;
+    return $host_arch eq $arch;
 }
 
 sub get_cpu_bitness {
     my ($cpu_prop_str, $arch) = @_;
 
-    $arch //= get_host_arch();
+    $arch //= $host_arch;
 
     my $cputype = get_default_cpu_type($arch, 0);
 
-- 
2.47.3





^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH qemu-server v2 5/8] cpu config: support aarch64 CPU models
  2026-01-29 13:09 [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models Fiona Ebner
                   ` (3 preceding siblings ...)
  2026-01-29 13:10 ` [PATCH qemu-server v2 4/8] cpu config: introduce module-wide $host_arch variable Fiona Ebner
@ 2026-01-29 13:10 ` Fiona Ebner
  2026-01-29 13:10 ` [PATCH qemu-server v2 6/8] api: cpu: allow querying CPU models for a given architecture Fiona Ebner
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Fiona Ebner @ 2026-01-29 13:10 UTC (permalink / raw)
  To: pve-devel

Previously, only the default 'cortex-a57' CPU model would be used
implicitly. Group models and built-in models by architecture, since
that is what (most) use sites are interested in. Note that the 'host'
model only exists if the host arch matches the emulator/vCPU arch.

Some use sites do require a list of all possible ones, e.g. custom
types, because they are not namespaced by arch.

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
 src/PVE/QemuServer/CPUConfig.pm | 289 ++++++++++++++++++--------------
 1 file changed, 167 insertions(+), 122 deletions(-)

diff --git a/src/PVE/QemuServer/CPUConfig.pm b/src/PVE/QemuServer/CPUConfig.pm
index 2825da46..00d56b22 100644
--- a/src/PVE/QemuServer/CPUConfig.pm
+++ b/src/PVE/QemuServer/CPUConfig.pm
@@ -52,27 +52,37 @@ sub load_custom_model_conf {
 }
 
 #builtin models : reported-model is mandatory
-my $builtin_models = {
-    'x86-64-v2' => {
-        'reported-model' => 'qemu64',
-        flags => "+popcnt;+pni;+sse4.1;+sse4.2;+ssse3",
-    },
-    'x86-64-v2-AES' => {
-        'reported-model' => 'qemu64',
-        flags => "+aes;+popcnt;+pni;+sse4.1;+sse4.2;+ssse3",
-    },
-    'x86-64-v3' => {
-        'reported-model' => 'qemu64',
-        flags =>
-            "+aes;+popcnt;+pni;+sse4.1;+sse4.2;+ssse3;+avx;+avx2;+bmi1;+bmi2;+f16c;+fma;+abm;+movbe;+xsave",
-    },
-    'x86-64-v4' => {
-        'reported-model' => 'qemu64',
-        flags =>
-            "+aes;+popcnt;+pni;+sse4.1;+sse4.2;+ssse3;+avx;+avx2;+bmi1;+bmi2;+f16c;+fma;+abm;+movbe;+xsave;+avx512f;+avx512bw;+avx512cd;+avx512dq;+avx512vl",
+my $builtin_models_by_arch = {
+    x86_64 => {
+        'x86-64-v2' => {
+            'reported-model' => 'qemu64',
+            flags => "+popcnt;+pni;+sse4.1;+sse4.2;+ssse3",
+        },
+        'x86-64-v2-AES' => {
+            'reported-model' => 'qemu64',
+            flags => "+aes;+popcnt;+pni;+sse4.1;+sse4.2;+ssse3",
+        },
+        'x86-64-v3' => {
+            'reported-model' => 'qemu64',
+            flags =>
+                "+aes;+popcnt;+pni;+sse4.1;+sse4.2;+ssse3;+avx;+avx2;+bmi1;+bmi2;+f16c;+fma;+abm;+movbe;+xsave",
+        },
+        'x86-64-v4' => {
+            'reported-model' => 'qemu64',
+            flags =>
+                "+aes;+popcnt;+pni;+sse4.1;+sse4.2;+ssse3;+avx;+avx2;+bmi1;+bmi2;+f16c;+fma;+abm;+movbe;+xsave;+avx512f;+avx512bw;+avx512cd;+avx512dq;+avx512vl",
+        },
     },
+    aarch64 => {},
 };
 
+my $all_builtin_models;
+for my $arch (keys $builtin_models_by_arch->%*) {
+    for my $model (keys $builtin_models_by_arch->{$arch}->%*) {
+        $all_builtin_models->{$model} = $builtin_models_by_arch->{$arch}->{$model};
+    }
+}
+
 my $depreacated_cpu_map = {
     # there never was such a client CPU, so map it to the server one for backward compat
     'Icelake-Client' => 'Icelake-Server',
@@ -90,104 +100,130 @@ my $cputypes_32bit = {
     'qemu32' => 1,
 };
 
-my $cpu_vendor_list = {
-    # Intel CPUs
-    486 => 'GenuineIntel',
-    pentium => 'GenuineIntel',
-    pentium2 => 'GenuineIntel',
-    pentium3 => 'GenuineIntel',
-    coreduo => 'GenuineIntel',
-    core2duo => 'GenuineIntel',
-    Conroe => 'GenuineIntel',
-    Penryn => 'GenuineIntel',
-    Nehalem => 'GenuineIntel',
-    'Nehalem-IBRS' => 'GenuineIntel',
-    Westmere => 'GenuineIntel',
-    'Westmere-IBRS' => 'GenuineIntel',
-    SandyBridge => 'GenuineIntel',
-    'SandyBridge-IBRS' => 'GenuineIntel',
-    IvyBridge => 'GenuineIntel',
-    'IvyBridge-IBRS' => 'GenuineIntel',
-    Haswell => 'GenuineIntel',
-    'Haswell-IBRS' => 'GenuineIntel',
-    'Haswell-noTSX' => 'GenuineIntel',
-    'Haswell-noTSX-IBRS' => 'GenuineIntel',
-    Broadwell => 'GenuineIntel',
-    'Broadwell-IBRS' => 'GenuineIntel',
-    'Broadwell-noTSX' => 'GenuineIntel',
-    'Broadwell-noTSX-IBRS' => 'GenuineIntel',
-    'Skylake-Client' => 'GenuineIntel',
-    'Skylake-Client-IBRS' => 'GenuineIntel',
-    'Skylake-Client-noTSX-IBRS' => 'GenuineIntel',
-    'Skylake-Client-v4' => 'GenuineIntel',
-    'Skylake-Server' => 'GenuineIntel',
-    'Skylake-Server-IBRS' => 'GenuineIntel',
-    'Skylake-Server-noTSX-IBRS' => 'GenuineIntel',
-    'Skylake-Server-v4' => 'GenuineIntel',
-    'Skylake-Server-v5' => 'GenuineIntel',
-    'Cascadelake-Server' => 'GenuineIntel',
-    'Cascadelake-Server-v2' => 'GenuineIntel',
-    'Cascadelake-Server-noTSX' => 'GenuineIntel',
-    'Cascadelake-Server-v4' => 'GenuineIntel',
-    'Cascadelake-Server-v5' => 'GenuineIntel',
-    'Cooperlake' => 'GenuineIntel',
-    'Cooperlake-v2' => 'GenuineIntel',
-    KnightsMill => 'GenuineIntel',
-    'Icelake-Client' => 'GenuineIntel', # depreacated, removed with QEMU 7.1
-    'Icelake-Client-noTSX' => 'GenuineIntel', # depreacated, removed with QEMU 7.1
-    'Icelake-Server' => 'GenuineIntel',
-    'Icelake-Server-noTSX' => 'GenuineIntel',
-    'Icelake-Server-v3' => 'GenuineIntel',
-    'Icelake-Server-v4' => 'GenuineIntel',
-    'Icelake-Server-v5' => 'GenuineIntel',
-    'Icelake-Server-v6' => 'GenuineIntel',
-    'Icelake-Server-v7' => 'GenuineIntel',
-    'SapphireRapids' => 'GenuineIntel',
-    'SapphireRapids-v2' => 'GenuineIntel',
-    'SapphireRapids-v3' => 'GenuineIntel',
-    'SapphireRapids-v4' => 'GenuineIntel',
-    'GraniteRapids' => 'GenuineIntel',
-    'GraniteRapids-v2' => 'GenuineIntel',
-    'GraniteRapids-v3' => 'GenuineIntel',
-    'SierraForest' => 'GenuineIntel',
-    'SierraForest-v2' => 'GenuineIntel',
-    'SierraForest-v3' => 'GenuineIntel',
-    'ClearwaterForest' => 'GenuineIntel',
+my $cpu_models_by_arch = {
+    x86_64 => {
+        # Intel CPUs
+        486 => 'GenuineIntel',
+        pentium => 'GenuineIntel',
+        pentium2 => 'GenuineIntel',
+        pentium3 => 'GenuineIntel',
+        coreduo => 'GenuineIntel',
+        core2duo => 'GenuineIntel',
+        Conroe => 'GenuineIntel',
+        Penryn => 'GenuineIntel',
+        Nehalem => 'GenuineIntel',
+        'Nehalem-IBRS' => 'GenuineIntel',
+        Westmere => 'GenuineIntel',
+        'Westmere-IBRS' => 'GenuineIntel',
+        SandyBridge => 'GenuineIntel',
+        'SandyBridge-IBRS' => 'GenuineIntel',
+        IvyBridge => 'GenuineIntel',
+        'IvyBridge-IBRS' => 'GenuineIntel',
+        Haswell => 'GenuineIntel',
+        'Haswell-IBRS' => 'GenuineIntel',
+        'Haswell-noTSX' => 'GenuineIntel',
+        'Haswell-noTSX-IBRS' => 'GenuineIntel',
+        Broadwell => 'GenuineIntel',
+        'Broadwell-IBRS' => 'GenuineIntel',
+        'Broadwell-noTSX' => 'GenuineIntel',
+        'Broadwell-noTSX-IBRS' => 'GenuineIntel',
+        'Skylake-Client' => 'GenuineIntel',
+        'Skylake-Client-IBRS' => 'GenuineIntel',
+        'Skylake-Client-noTSX-IBRS' => 'GenuineIntel',
+        'Skylake-Client-v4' => 'GenuineIntel',
+        'Skylake-Server' => 'GenuineIntel',
+        'Skylake-Server-IBRS' => 'GenuineIntel',
+        'Skylake-Server-noTSX-IBRS' => 'GenuineIntel',
+        'Skylake-Server-v4' => 'GenuineIntel',
+        'Skylake-Server-v5' => 'GenuineIntel',
+        'Cascadelake-Server' => 'GenuineIntel',
+        'Cascadelake-Server-v2' => 'GenuineIntel',
+        'Cascadelake-Server-noTSX' => 'GenuineIntel',
+        'Cascadelake-Server-v4' => 'GenuineIntel',
+        'Cascadelake-Server-v5' => 'GenuineIntel',
+        'Cooperlake' => 'GenuineIntel',
+        'Cooperlake-v2' => 'GenuineIntel',
+        KnightsMill => 'GenuineIntel',
+        'Icelake-Client' => 'GenuineIntel', # depreacated, removed with QEMU 7.1
+        'Icelake-Client-noTSX' => 'GenuineIntel', # depreacated, removed with QEMU 7.1
+        'Icelake-Server' => 'GenuineIntel',
+        'Icelake-Server-noTSX' => 'GenuineIntel',
+        'Icelake-Server-v3' => 'GenuineIntel',
+        'Icelake-Server-v4' => 'GenuineIntel',
+        'Icelake-Server-v5' => 'GenuineIntel',
+        'Icelake-Server-v6' => 'GenuineIntel',
+        'Icelake-Server-v7' => 'GenuineIntel',
+        'SapphireRapids' => 'GenuineIntel',
+        'SapphireRapids-v2' => 'GenuineIntel',
+        'SapphireRapids-v3' => 'GenuineIntel',
+        'SapphireRapids-v4' => 'GenuineIntel',
+        'GraniteRapids' => 'GenuineIntel',
+        'GraniteRapids-v2' => 'GenuineIntel',
+        'GraniteRapids-v3' => 'GenuineIntel',
+        'SierraForest' => 'GenuineIntel',
+        'SierraForest-v2' => 'GenuineIntel',
+        'SierraForest-v3' => 'GenuineIntel',
+        'ClearwaterForest' => 'GenuineIntel',
 
-    # AMD CPUs
-    athlon => 'AuthenticAMD',
-    phenom => 'AuthenticAMD',
-    Opteron_G1 => 'AuthenticAMD',
-    Opteron_G2 => 'AuthenticAMD',
-    Opteron_G3 => 'AuthenticAMD',
-    Opteron_G4 => 'AuthenticAMD',
-    Opteron_G5 => 'AuthenticAMD',
-    EPYC => 'AuthenticAMD',
-    'EPYC-IBPB' => 'AuthenticAMD',
-    'EPYC-v3' => 'AuthenticAMD',
-    'EPYC-v4' => 'AuthenticAMD',
-    'EPYC-v5' => 'AuthenticAMD',
-    'EPYC-Rome' => 'AuthenticAMD',
-    'EPYC-Rome-v2' => 'AuthenticAMD',
-    'EPYC-Rome-v3' => 'AuthenticAMD',
-    'EPYC-Rome-v4' => 'AuthenticAMD',
-    'EPYC-Rome-v5' => 'AuthenticAMD',
-    'EPYC-Milan' => 'AuthenticAMD',
-    'EPYC-Milan-v2' => 'AuthenticAMD',
-    'EPYC-Milan-v3' => 'AuthenticAMD',
-    'EPYC-Genoa' => 'AuthenticAMD',
-    'EPYC-Genoa-v2' => 'AuthenticAMD',
-    'EPYC-Turin' => 'AuthenticAMD',
+        # AMD CPUs
+        athlon => 'AuthenticAMD',
+        phenom => 'AuthenticAMD',
+        Opteron_G1 => 'AuthenticAMD',
+        Opteron_G2 => 'AuthenticAMD',
+        Opteron_G3 => 'AuthenticAMD',
+        Opteron_G4 => 'AuthenticAMD',
+        Opteron_G5 => 'AuthenticAMD',
+        EPYC => 'AuthenticAMD',
+        'EPYC-IBPB' => 'AuthenticAMD',
+        'EPYC-v3' => 'AuthenticAMD',
+        'EPYC-v4' => 'AuthenticAMD',
+        'EPYC-v5' => 'AuthenticAMD',
+        'EPYC-Rome' => 'AuthenticAMD',
+        'EPYC-Rome-v2' => 'AuthenticAMD',
+        'EPYC-Rome-v3' => 'AuthenticAMD',
+        'EPYC-Rome-v4' => 'AuthenticAMD',
+        'EPYC-Rome-v5' => 'AuthenticAMD',
+        'EPYC-Milan' => 'AuthenticAMD',
+        'EPYC-Milan-v2' => 'AuthenticAMD',
+        'EPYC-Milan-v3' => 'AuthenticAMD',
+        'EPYC-Genoa' => 'AuthenticAMD',
+        'EPYC-Genoa-v2' => 'AuthenticAMD',
+        'EPYC-Turin' => 'AuthenticAMD',
 
-    # generic types, use vendor from host node
-    host => 'default',
-    kvm32 => 'default',
-    kvm64 => 'default',
-    qemu32 => 'default',
-    qemu64 => 'default',
-    max => 'default',
+        # generic types, use vendor from host node
+        kvm32 => 'default',
+        kvm64 => 'default',
+        qemu32 => 'default',
+        qemu64 => 'default',
+        max => 'default',
+    },
+    aarch64 => {
+        'a64fx' => 'ARM',
+        'cortex-a35' => 'ARM',
+        'cortex-a53' => 'ARM',
+        'cortex-a55' => 'ARM',
+        'cortex-a57' => 'ARM',
+        'cortex-a710' => 'ARM',
+        'cortex-a72' => 'ARM',
+        'cortex-a76' => 'ARM',
+        'neoverse-n1' => 'ARM',
+        'neoverse-n2' => 'ARM',
+        'neoverse-v1' => 'ARM',
+        # 32 bit and deprecated models were not added
+        max => 'default',
+    },
 };
 
+# The host CPU model only exists if the arch matches
+$cpu_models_by_arch->{$host_arch}->{host} = 'default';
+
+my $all_cpu_models;
+for my $arch (keys $cpu_models_by_arch->%*) {
+    for my $model (keys $cpu_models_by_arch->{$arch}->%*) {
+        $all_cpu_models->{$model} = $cpu_models_by_arch->{$arch}->{$model};
+    }
+}
+
 my $supported_cpu_flags = [
     {
         name => 'nested-virt',
@@ -274,7 +310,7 @@ my $cpu_fmt = {
             "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],
+        enum => [sort { lc("$a") cmp lc("$b") } keys $all_cpu_models->%*],
         default => 'kvm64',
         optional => 1,
     },
@@ -439,7 +475,7 @@ sub validate_vm_cpu_conf {
     if (is_custom_model($cputype)) {
         # dies on unknown model
         get_custom_model($cputype);
-    } elsif (!defined($cpu_vendor_list->{$cputype}) && !defined($builtin_models->{$cputype})) {
+    } elsif (!defined($all_cpu_models->{$cputype}) && !defined($all_builtin_models->{$cputype})) {
         die "Built-in cputype '$cputype' is not defined (missing 'custom-' prefix?)\n";
     }
 
@@ -529,7 +565,10 @@ sub add_cpu_json_properties {
 }
 
 sub get_cpu_models {
-    my ($include_custom) = @_;
+    my ($include_custom, $arch) = @_;
+
+    $arch = $host_arch if !defined($arch);
+    my $cpu_vendor_list = $cpu_models_by_arch->{$arch};
 
     my $models = [];
 
@@ -542,6 +581,7 @@ sub get_cpu_models {
             };
     }
 
+    my $builtin_models = $builtin_models_by_arch->{$arch};
     for my $model (keys %{$builtin_models}) {
         my $reported_model = $builtin_models->{$model}->{'reported-model'};
         my $vendor = $cpu_vendor_list->{$reported_model};
@@ -559,7 +599,7 @@ sub get_cpu_models {
     for my $custom_model (keys %{ $conf->{ids} }) {
         my $reported_model = $conf->{ids}->{$custom_model}->{'reported-model'};
         $reported_model //= $cpu_fmt->{'reported-model'}->{default};
-        my $vendor = $cpu_vendor_list->{$reported_model};
+        my $vendor = $all_cpu_models->{$reported_model};
         push @$models,
             {
                 name => "custom-$custom_model",
@@ -614,6 +654,7 @@ sub print_cpu_device {
             or die "Cannot parse cpu description: $cputype\n";
         $cpu = $cpuconf->{cputype};
 
+        my $builtin_models = $builtin_models_by_arch->{$arch};
         if (my $model = $builtin_models->{$cpu}) {
             $cpu = $model->{'reported-model'};
         } elsif (is_custom_model($cputype)) {
@@ -792,6 +833,7 @@ sub get_cpu_options {
             or die "Cannot parse cpu description: $cpu_prop_str\n";
 
         $cputype = $cpu->{cputype};
+        my $builtin_models = $builtin_models_by_arch->{$arch};
         if (my $model = $builtin_models->{$cputype}) {
             $cputype = $model->{'reported-model'};
             $builtin_cpu->{flags} = $model->{'flags'};
@@ -812,6 +854,9 @@ sub get_cpu_options {
         $hv_vendor_id = $cpu->{'hv-vendor-id'} if defined($cpu->{'hv-vendor-id'});
     }
 
+    die "CPU model '$cputype' does not exist for configured vCPU architecture '$arch'\n"
+        if !defined($cpu_models_by_arch->{$arch}->{$cputype});
+
     my $pve_flags = get_pve_cpu_flags($conf, $kvm, $cputype, $arch, $machine_version);
 
     my $hv_flags;
@@ -846,13 +891,12 @@ sub get_cpu_options {
         };
     }
 
-    # $cputype is the "reported-model" for custom types, so we can just look up
-    # the vendor in the default list
-    my $cpu_vendor = $cpu_vendor_list->{$cputype};
-    if ($cpu_vendor) {
+    # For aarch64, QEMU does not have a vendor property for the -cpu commandline.
+    if ($arch eq 'x86_64') {
+        # $cputype is the "reported-model" for custom types, so we can just look up
+        # the vendor in the default list
+        my $cpu_vendor = $cpu_models_by_arch->{$arch}->{$cputype} or die "internal error";
         $pve_forced_flags->{'vendor'} = { value => $cpu_vendor } if $cpu_vendor ne 'default';
-    } elsif ($arch ne 'aarch64') {
-        die "internal error"; # should not happen
     }
 
     my $cpu_str = $cputype;
@@ -1034,6 +1078,7 @@ sub get_cpu_bitness {
 
         $cputype = $cpu->{cputype};
 
+        my $builtin_models = $builtin_models_by_arch->{$arch};
         if (my $model = $builtin_models->{$cputype}) {
             $cputype = $model->{'reported-model'};
         } elsif (is_custom_model($cputype)) {
-- 
2.47.3





^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH qemu-server v2 6/8] api: cpu: allow querying CPU models for a given architecture
  2026-01-29 13:09 [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models Fiona Ebner
                   ` (4 preceding siblings ...)
  2026-01-29 13:10 ` [PATCH qemu-server v2 5/8] cpu config: support aarch64 CPU models Fiona Ebner
@ 2026-01-29 13:10 ` Fiona Ebner
  2026-01-29 13:10 ` [PATCH qemu-server v2 7/8] cpu config: support aarch64 CPU flags Fiona Ebner
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Fiona Ebner @ 2026-01-29 13:10 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---

Changes in v2:
* fix include ordering.

 src/PVE/API2/Qemu/CPU.pm | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/src/PVE/API2/Qemu/CPU.pm b/src/PVE/API2/Qemu/CPU.pm
index 812ef4f7..f8a7e11d 100644
--- a/src/PVE/API2/Qemu/CPU.pm
+++ b/src/PVE/API2/Qemu/CPU.pm
@@ -6,6 +6,7 @@ use warnings;
 use PVE::JSONSchema qw(get_standard_option);
 use PVE::RPCEnvironment;
 use PVE::RESTHandler;
+use PVE::Tools qw(extract_param);
 
 use PVE::QemuServer::CPUConfig;
 
@@ -25,6 +26,7 @@ __PACKAGE__->register_method({
         additionalProperties => 0,
         properties => {
             node => get_standard_option('pve-node'),
+            arch => get_standard_option('pve-qm-cpu-arch', { optional => 1 }),
         },
     },
     returns => {
@@ -53,11 +55,15 @@ __PACKAGE__->register_method({
         links => [{ rel => 'child', href => '{name}' }],
     },
     code => sub {
+        my ($param) = @_;
+
         my $rpcenv = PVE::RPCEnvironment::get();
         my $authuser = $rpcenv->get_user();
         my $include_custom = $rpcenv->check($authuser, "/nodes", ['Sys.Audit'], 1);
 
-        return PVE::QemuServer::CPUConfig::get_cpu_models($include_custom);
+        my $arch = extract_param($param, 'arch');
+
+        return PVE::QemuServer::CPUConfig::get_cpu_models($include_custom, $arch);
     },
 });
 
-- 
2.47.3





^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH qemu-server v2 7/8] cpu config: support aarch64 CPU flags
  2026-01-29 13:09 [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models Fiona Ebner
                   ` (5 preceding siblings ...)
  2026-01-29 13:10 ` [PATCH qemu-server v2 6/8] api: cpu: allow querying CPU models for a given architecture Fiona Ebner
@ 2026-01-29 13:10 ` Fiona Ebner
  2026-01-29 13:10 ` [PATCH qemu-server v2 8/8] api: cpu flags: allow querying CPU flags for a given architecture Fiona Ebner
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 14+ messages in thread
From: Fiona Ebner @ 2026-01-29 13:10 UTC (permalink / raw)
  To: pve-devel

Do not add any flags for now and wait until requested. Available would
be (for kvm and tcg):

"aarch64"
"kvm-no-adjvtime" (kvm only)
"kvm-steal-time" (kvm only)
"pauth"
"pmu"
"sve"
"sve1024"
"sve1152"
"sve128"
"sve1280"
"sve1408"
"sve1536"
"sve1664"
"sve1792"
"sve1920"
"sve2048"
"sve256"
"sve384"
"sve512"
"sve640"
"sve768"
"sve896"

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---

New in v2.

 src/PVE/QemuServer/CPUConfig.pm | 139 ++++++++++++++++++--------------
 1 file changed, 77 insertions(+), 62 deletions(-)

diff --git a/src/PVE/QemuServer/CPUConfig.pm b/src/PVE/QemuServer/CPUConfig.pm
index 00d56b22..32ec4954 100644
--- a/src/PVE/QemuServer/CPUConfig.pm
+++ b/src/PVE/QemuServer/CPUConfig.pm
@@ -224,72 +224,87 @@ for my $arch (keys $cpu_models_by_arch->%*) {
     }
 }
 
-my $supported_cpu_flags = [
-    {
-        name => 'nested-virt',
-        description => "Controls nested virtualization, namely 'svm' for AMD CPUs and 'vmx' for"
-            . " Intel CPUs. Live migration still only works if it's the same flag on both sides."
-            . " Use a CPU model similar to the host, with the same vendor, not x86-64-vX!",
-    },
-    {
-        name => 'md-clear',
-        description => "Required to let the guest OS know if MDS is mitigated correctly.",
-    },
-    {
-        name => 'pcid',
-        description =>
-            "Meltdown fix cost reduction on Westmere, Sandy-, and IvyBridge Intel CPUs.",
-    },
-    {
-        name => 'spec-ctrl',
-        description => "Allows improved Spectre mitigation with Intel CPUs.",
-    },
-    {
-        name => 'ssbd',
-        description => "Protection for 'Speculative Store Bypass' for Intel models.",
-    },
-    {
-        name => 'ibpb',
-        description => "Allows improved Spectre mitigation with AMD CPUs.",
-    },
-    {
-        name => 'virt-ssbd',
-        description => "Basis for 'Speculative Store Bypass' protection for AMD models.",
-    },
-    {
-        name => 'amd-ssbd',
-        description => "Improves Spectre mitigation performance with AMD CPUs, best used with"
-            . " 'virt-ssbd'.",
-    },
-    {
-        name => 'amd-no-ssb',
-        description => "Notifies guest OS that host is not vulnerable for Spectre on AMD CPUs.",
-    },
-    {
-        name => 'pdpe1gb',
-        description => "Allow guest OS to use 1GB size pages, if host HW supports it.",
-    },
-    {
-        name => 'hv-tlbflush',
-        description => "Improve performance in overcommitted Windows guests. May lead to guest"
-            . " bluescreens on old CPUs.",
-    },
-    {
-        name => 'hv-evmcs',
-        description => "Improve performance for nested virtualization. Only supported on Intel"
-            . " CPUs.",
-    },
-    {
-        name => 'aes',
-        description => "Activate AES instruction set for HW acceleration.",
-    },
-];
+my $supported_cpu_flags_by_arch = {
+    x86_64 => [
+        {
+            name => 'nested-virt',
+            description =>
+                "Controls nested virtualization, namely 'svm' for AMD CPUs and 'vmx' for"
+                . " Intel CPUs. Live migration still only works if it's the same flag on both sides."
+                . " Use a CPU model similar to the host, with the same vendor, not x86-64-vX!",
+        },
+        {
+            name => 'md-clear',
+            description => "Required to let the guest OS know if MDS is mitigated correctly.",
+        },
+        {
+            name => 'pcid',
+            description =>
+                "Meltdown fix cost reduction on Westmere, Sandy-, and IvyBridge Intel CPUs.",
+        },
+        {
+            name => 'spec-ctrl',
+            description => "Allows improved Spectre mitigation with Intel CPUs.",
+        },
+        {
+            name => 'ssbd',
+            description => "Protection for 'Speculative Store Bypass' for Intel models.",
+        },
+        {
+            name => 'ibpb',
+            description => "Allows improved Spectre mitigation with AMD CPUs.",
+        },
+        {
+            name => 'virt-ssbd',
+            description => "Basis for 'Speculative Store Bypass' protection for AMD models.",
+        },
+        {
+            name => 'amd-ssbd',
+            description =>
+                "Improves Spectre mitigation performance with AMD CPUs, best used with"
+                . " 'virt-ssbd'.",
+        },
+        {
+            name => 'amd-no-ssb',
+            description =>
+                "Notifies guest OS that host is not vulnerable for Spectre on AMD CPUs.",
+        },
+        {
+            name => 'pdpe1gb',
+            description => "Allow guest OS to use 1GB size pages, if host HW supports it.",
+        },
+        {
+            name => 'hv-tlbflush',
+            description =>
+                "Improve performance in overcommitted Windows guests. May lead to guest"
+                . " bluescreens on old CPUs.",
+        },
+        {
+            name => 'hv-evmcs',
+            description =>
+                "Improve performance for nested virtualization. Only supported on Intel" . " CPUs.",
+        },
+        {
+            name => 'aes',
+            description => "Activate AES instruction set for HW acceleration.",
+        },
+    ],
+    aarch64 => [],
+};
 
 sub get_supported_cpu_flags {
-    return $supported_cpu_flags;
+    my ($arch) = @_;
+    $arch = $host_arch if !defined($arch);
+    return $supported_cpu_flags_by_arch->{$arch};
 }
 
-my @supported_cpu_flags_names = map { $_->{name} } $supported_cpu_flags->@*;
+my $all_supported_cpu_flags = {};
+for my $arch ($supported_cpu_flags_by_arch->%*) {
+    for my $flag ($supported_cpu_flags_by_arch->{$arch}->@*) {
+        $all_supported_cpu_flags->{ $flag->{name} } = 1;
+    }
+}
+my @supported_cpu_flags_names = sort keys $all_supported_cpu_flags->%*;
 my $cpu_flag_supported_re = qr/([+-])(@{[join('|', @supported_cpu_flags_names)]})/;
 my $cpu_flag_any_re = qr/([+-])([a-zA-Z0-9\-_\.]+)/;
 
-- 
2.47.3





^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH qemu-server v2 8/8] api: cpu flags: allow querying CPU flags for a given architecture
  2026-01-29 13:09 [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models Fiona Ebner
                   ` (6 preceding siblings ...)
  2026-01-29 13:10 ` [PATCH qemu-server v2 7/8] cpu config: support aarch64 CPU flags Fiona Ebner
@ 2026-01-29 13:10 ` Fiona Ebner
  2026-02-03 14:09 ` [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models Dominik Csapak
  2026-02-04 15:48 ` applied-series: " Thomas Lamprecht
  9 siblings, 0 replies; 14+ messages in thread
From: Fiona Ebner @ 2026-01-29 13:10 UTC (permalink / raw)
  To: pve-devel

Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---

New in v2.

 src/PVE/API2/Qemu/CPUFlags.pm | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/src/PVE/API2/Qemu/CPUFlags.pm b/src/PVE/API2/Qemu/CPUFlags.pm
index 6201654f..672bd2d2 100644
--- a/src/PVE/API2/Qemu/CPUFlags.pm
+++ b/src/PVE/API2/Qemu/CPUFlags.pm
@@ -2,8 +2,10 @@ package PVE::API2::Qemu::CPUFlags;
 
 use v5.36;
 
-use PVE::RESTHandler;
 use PVE::JSONSchema qw(get_standard_option);
+use PVE::RESTHandler;
+use PVE::Tools qw(extract_param);
+
 use PVE::QemuServer::CPUConfig;
 
 use base qw(PVE::RESTHandler);
@@ -18,6 +20,7 @@ __PACKAGE__->register_method({
         additionalProperties => 0,
         properties => {
             node => get_standard_option('pve-node'),
+            arch => get_standard_option('pve-qm-cpu-arch', { optional => 1 }),
         },
     },
     returns => {
@@ -37,7 +40,11 @@ __PACKAGE__->register_method({
         },
     },
     code => sub {
-        return PVE::QemuServer::CPUConfig::get_supported_cpu_flags();
+        my ($param) = @_;
+
+        my $arch = extract_param($param, 'arch');
+
+        return PVE::QemuServer::CPUConfig::get_supported_cpu_flags($arch);
     },
 });
 
-- 
2.47.3





^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH qemu-server v2 4/8] cpu config: introduce module-wide $host_arch variable
  2026-01-29 13:10 ` [PATCH qemu-server v2 4/8] cpu config: introduce module-wide $host_arch variable Fiona Ebner
@ 2026-02-03 13:51   ` Thomas Lamprecht
       [not found]     ` <f567ae7c-39aa-40bb-9270-5f7cec6560eb@kohly.de>
  0 siblings, 1 reply; 14+ messages in thread
From: Thomas Lamprecht @ 2026-02-03 13:51 UTC (permalink / raw)
  To: Fiona Ebner, pve-devel

Am 29.01.26 um 14:09 schrieb Fiona Ebner:
> It cannot change while the module is loaded. Also, commit "cpu config:
> support aarch64 CPU models" will use the host arch as a hash key,
> which is cleaner if no additional function call is required.

Note that this is already cached in pve-common, so adding another 
module variable is not really giving us anything here.

I would rather slightly prefer moving the initialization code for the
CPU models from the module level into a singleton cache method, that way
one only executes that stuff if really needed for the current code path.

But that would be mostly a code clean-up that can be done later in any
case.




^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models
  2026-01-29 13:09 [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models Fiona Ebner
                   ` (7 preceding siblings ...)
  2026-01-29 13:10 ` [PATCH qemu-server v2 8/8] api: cpu flags: allow querying CPU flags for a given architecture Fiona Ebner
@ 2026-02-03 14:09 ` Dominik Csapak
  2026-02-03 14:48   ` Thomas Lamprecht
  2026-02-04 15:48 ` applied-series: " Thomas Lamprecht
  9 siblings, 1 reply; 14+ messages in thread
From: Dominik Csapak @ 2026-02-03 14:09 UTC (permalink / raw)
  To: Fiona Ebner, pve-devel

Aside from what Thomas found with 'get_host_arch'
there is one high level comment i have, but IMHO it's not a blocker:

I'm not a super fan of "sprinkling" `eq 'x86_64'` or similar throughout
the code, but for the cases used here it's probably ok.

If we encounter more such things though, I'd really like some
more general lookup for arch -> values or something like this.

even if it's just a 'supports_x' helper that has a hash
like
{
x86_64 => 1,
aarch64 => 0,
xxx => yyy,
}
etc

But as I wrote, for these use cases here probably ok, and
definitely no blocker for now since that can be cleaned
up whenever we see fit.

Aside from that,

Reviewed-by: Dominik Csapak <d.csapak@proxmox.com>
Tested-by: Dominik Csapak <d.csapak@proxmox.com>

On 1/29/26 2:09 PM, Fiona Ebner wrote:
> Changes in v2:
> * also support querying flags for a specific arch
> * style: fix include ordering in CPU API module
> 
> Previously, only the default 'cortex-a57' CPU model would be used
> implicitly. Group models and built-in models by architecture, since
> that is what (most) use sites are interested in. Note that the 'host'
> model only exists if the host arch matches the emulator/vCPU arch.
> 
> Some use sites do require a list of all possible ones, e.g. custom
> types, because they are not namespaced by arch.
> 
> qemu-server:
> 
> Fiona Ebner (8):
>    cpu config: introduce pve-qm-cpu-arch standard option for virtual CPU
>      architecture
>    cpu config: guard adding hyperv enlightenments by arch
>    cpu config: 'hidden' option only applies to vCPUs with x86_64 arch
>    cpu config: introduce module-wide $host_arch variable
>    cpu config: support aarch64 CPU models
>    api: cpu: allow querying CPU models for a given architecture
>    cpu config: support aarch64 CPU flags
>    api: cpu flags: allow querying CPU flags for a given architecture
> 
>   src/PVE/API2/Qemu/CPU.pm        |   8 +-
>   src/PVE/API2/Qemu/CPUFlags.pm   |  11 +-
>   src/PVE/QemuServer.pm           |   7 +-
>   src/PVE/QemuServer/CPUConfig.pm | 453 ++++++++++++++++++--------------
>   4 files changed, 279 insertions(+), 200 deletions(-)
> 
> 
> Summary over all repositories:
>    4 files changed, 279 insertions(+), 200 deletions(-)
> 





^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models
  2026-02-03 14:09 ` [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models Dominik Csapak
@ 2026-02-03 14:48   ` Thomas Lamprecht
  0 siblings, 0 replies; 14+ messages in thread
From: Thomas Lamprecht @ 2026-02-03 14:48 UTC (permalink / raw)
  To: Dominik Csapak, Fiona Ebner, pve-devel

Am 03.02.26 um 15:08 schrieb Dominik Csapak:
> I'm not a super fan of "sprinkling" `eq 'x86_64'` or similar throughout
> the code, but for the cases used here it's probably ok.
> 
> If we encounter more such things though, I'd really like some
> more general lookup for arch -> values or something like this.
> 
> even if it's just a 'supports_x' helper that has a hash
> like
> {
> x86_64 => 1,
> aarch64 => 0,
> xxx => yyy,
> }
> etc
> 
> But as I wrote, for these use cases here probably ok, and
> definitely no blocker for now since that can be cleaned
> up whenever we see fit.

FWIW, this is also something I noticed, but I too found it OK
for the use case now. In the midterm it might be indeed nicer
to move those checks in local helpers like, e.g., a method named
arch_supports_hv_enlightment (and in there I would then care less
how it's checked), but again, not really a problem now.




^ permalink raw reply	[flat|nested] 14+ messages in thread

* Re: [PATCH qemu-server v2 4/8] cpu config: introduce module-wide $host_arch variable
       [not found]     ` <f567ae7c-39aa-40bb-9270-5f7cec6560eb@kohly.de>
@ 2026-02-03 16:21       ` Thomas Lamprecht
  0 siblings, 0 replies; 14+ messages in thread
From: Thomas Lamprecht @ 2026-02-03 16:21 UTC (permalink / raw)
  To: proxmox, Fiona Ebner, pve-devel

Hallo,

Am 03.02.26 um 17:07 schrieb proxmox@kohly.de:
> ist es absicht, dass in den letzten tagen mails in die mailingliste/n gesendet werden, die sich nicht mehr an den 'früheren standard' halten?
> 
> früher
> 
> [pve-devel] [PATCH ...] ...
> 
> seit einigen tagen nur noch
> 
> [PATCH ...] ...

Ja, das ist Absicht, siehe das Announcement-Mail zur Umstellung:

https://lore.proxmox.com/pve-devel/20260128181347.47674d4d@rosa.proxmox.com/

Für Mail filter Empfehlen wir den "List-Id" Header auf "pve-devel.lists.proxmox.com" zu prüfen.

LG Thomas




^ permalink raw reply	[flat|nested] 14+ messages in thread

* applied-series: [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models
  2026-01-29 13:09 [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models Fiona Ebner
                   ` (8 preceding siblings ...)
  2026-02-03 14:09 ` [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models Dominik Csapak
@ 2026-02-04 15:48 ` Thomas Lamprecht
  9 siblings, 0 replies; 14+ messages in thread
From: Thomas Lamprecht @ 2026-02-04 15:48 UTC (permalink / raw)
  To: pve-devel, Fiona Ebner

On Thu, 29 Jan 2026 14:09:57 +0100, Fiona Ebner wrote:
> Changes in v2:
> * also support querying flags for a specific arch
> * style: fix include ordering in CPU API module
> 
> Previously, only the default 'cortex-a57' CPU model would be used
> implicitly. Group models and built-in models by architecture, since
> that is what (most) use sites are interested in. Note that the 'host'
> model only exists if the host arch matches the emulator/vCPU arch.
> 
> [...]

Applied, thanks!

[1/8] cpu config: introduce pve-qm-cpu-arch standard option for virtual CPU architecture
      commit: 295207f1f17c22e0d2532bd1eccc2ec63cd48296
[2/8] cpu config: guard adding hyperv enlightenments by arch
      commit: b4807ba0cb9f745858eeb6814652fcde9f1b15c3
[3/8] cpu config: 'hidden' option only applies to vCPUs with x86_64 arch
      commit: 1034ed3e6dcb38203db2f92b9b6e3391d77107f0
[4/8] cpu config: introduce module-wide $host_arch variable
      commit: da67dc32f90260fcb58bf24af370306c602971bc
[5/8] cpu config: support aarch64 CPU models
      commit: 96f5566c0def3f79bba4fa8a45813d6fad0b833a
[6/8] api: cpu: allow querying CPU models for a given architecture
      commit: 3dd62cc7fd7639d17105de44cce412a30f0a2dcf
[7/8] cpu config: support aarch64 CPU flags
      commit: e53dd61cf106fd872beff5dea97d97ebfcbf16e6
[8/8] api: cpu flags: allow querying CPU flags for a given architecture
      commit: 7f74387c9e62bc95d07a29152b9b6ad3b4d10b47




^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2026-02-04 15:48 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-01-29 13:09 [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models Fiona Ebner
2026-01-29 13:09 ` [PATCH qemu-server v2 1/8] cpu config: introduce pve-qm-cpu-arch standard option for virtual CPU architecture Fiona Ebner
2026-01-29 13:09 ` [PATCH qemu-server v2 2/8] cpu config: guard adding hyperv enlightenments by arch Fiona Ebner
2026-01-29 13:10 ` [PATCH qemu-server v2 3/8] cpu config: 'hidden' option only applies to vCPUs with x86_64 arch Fiona Ebner
2026-01-29 13:10 ` [PATCH qemu-server v2 4/8] cpu config: introduce module-wide $host_arch variable Fiona Ebner
2026-02-03 13:51   ` Thomas Lamprecht
     [not found]     ` <f567ae7c-39aa-40bb-9270-5f7cec6560eb@kohly.de>
2026-02-03 16:21       ` Thomas Lamprecht
2026-01-29 13:10 ` [PATCH qemu-server v2 5/8] cpu config: support aarch64 CPU models Fiona Ebner
2026-01-29 13:10 ` [PATCH qemu-server v2 6/8] api: cpu: allow querying CPU models for a given architecture Fiona Ebner
2026-01-29 13:10 ` [PATCH qemu-server v2 7/8] cpu config: support aarch64 CPU flags Fiona Ebner
2026-01-29 13:10 ` [PATCH qemu-server v2 8/8] api: cpu flags: allow querying CPU flags for a given architecture Fiona Ebner
2026-02-03 14:09 ` [PATCH-SERIES qemu-server v2 0/8] cpu config: support aarch64 CPU models Dominik Csapak
2026-02-03 14:48   ` Thomas Lamprecht
2026-02-04 15:48 ` applied-series: " Thomas Lamprecht

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.
Service provided by Proxmox Server Solutions GmbH | Privacy | Legal