all lists on lists.proxmox.com
 help / color / mirror / Atom feed
* [PATCH-SERIES qemu/qemu-server 0/2] generate and ship static list of CPU models with pve-qemu-kvm
@ 2026-02-10 13:52 Fiona Ebner
  2026-02-10 13:52 ` [PATCH qemu 1/2] generate and ship static list of CPU models Fiona Ebner
  2026-02-10 13:52 ` [PATCH qemu-server 2/2] cpu config: use static CPU model list shipped by QEMU package if available Fiona Ebner
  0 siblings, 2 replies; 6+ messages in thread
From: Fiona Ebner @ 2026-02-10 13:52 UTC (permalink / raw)
  To: pve-devel

Before, it was often forgotten to pick up new QEMU CPU models and
hard-coding the information in Perl is also not the cleanest way to do
it.

Generate a list of supported models during build of the pve-qemu-kvm
and use that instead. The build will fail when any changes appear, so
they are not missed and can be adapted to.

The qemu-server patch requires the following series by Dominik to be
applied:
https://lore.proxmox.com/pve-devel/20260205141959.3615131-1-d.csapak@proxmox.com/T/

qemu:

Fiona Ebner (1):
  generate and ship static list of CPU models

 debian/cpu-models-aarch64.json |   1 +
 debian/cpu-models-x86_64.json  |   1 +
 debian/parse-cpu-models.pl     | 121 +++++++++++++++++++++++++++++++++
 debian/rules                   |  12 ++++
 4 files changed, 135 insertions(+)
 create mode 100644 debian/cpu-models-aarch64.json
 create mode 100644 debian/cpu-models-x86_64.json
 create mode 100755 debian/parse-cpu-models.pl


qemu-server:

Fiona Ebner (1):
  cpu config: use static CPU model list shipped by QEMU package if
    available

 src/PVE/QemuServer/CPUConfig.pm | 237 +++++++++++++++++---------------
 1 file changed, 126 insertions(+), 111 deletions(-)


Summary over all repositories:
  5 files changed, 261 insertions(+), 111 deletions(-)

-- 
Generated by git-murpp 0.5.0




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

* [PATCH qemu 1/2] generate and ship static list of CPU models
  2026-02-10 13:52 [PATCH-SERIES qemu/qemu-server 0/2] generate and ship static list of CPU models with pve-qemu-kvm Fiona Ebner
@ 2026-02-10 13:52 ` Fiona Ebner
  2026-02-11 10:33   ` Thomas Lamprecht
  2026-02-17 18:28   ` applied: " Thomas Lamprecht
  2026-02-10 13:52 ` [PATCH qemu-server 2/2] cpu config: use static CPU model list shipped by QEMU package if available Fiona Ebner
  1 sibling, 2 replies; 6+ messages in thread
From: Fiona Ebner @ 2026-02-10 13:52 UTC (permalink / raw)
  To: pve-devel

Fail the build when the list changes, so that new models can be
picked up selectively and other changes that might require adaptations
are not missed.

Suggested-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---
 debian/cpu-models-aarch64.json |   1 +
 debian/cpu-models-x86_64.json  |   1 +
 debian/parse-cpu-models.pl     | 121 +++++++++++++++++++++++++++++++++
 debian/rules                   |  12 ++++
 4 files changed, 135 insertions(+)
 create mode 100644 debian/cpu-models-aarch64.json
 create mode 100644 debian/cpu-models-x86_64.json
 create mode 100755 debian/parse-cpu-models.pl

diff --git a/debian/cpu-models-aarch64.json b/debian/cpu-models-aarch64.json
new file mode 100644
index 0000000..a69c05f
--- /dev/null
+++ b/debian/cpu-models-aarch64.json
@@ -0,0 +1 @@
+{"a64fx":"ARM","cortex-a35":"ARM","cortex-a53":"ARM","cortex-a55":"ARM","cortex-a57":"ARM","cortex-a710":"ARM","cortex-a72":"ARM","cortex-a76":"ARM","max":"default","neoverse-n1":"ARM","neoverse-n2":"ARM","neoverse-v1":"ARM"}
\ No newline at end of file
diff --git a/debian/cpu-models-x86_64.json b/debian/cpu-models-x86_64.json
new file mode 100644
index 0000000..178dbf0
--- /dev/null
+++ b/debian/cpu-models-x86_64.json
@@ -0,0 +1 @@
+{"486":"GenuineIntel","Broadwell":"GenuineIntel","Broadwell-IBRS":"GenuineIntel","Broadwell-noTSX":"GenuineIntel","Broadwell-noTSX-IBRS":"GenuineIntel","Cascadelake-Server":"GenuineIntel","Cascadelake-Server-noTSX":"GenuineIntel","Cascadelake-Server-v2":"GenuineIntel","Cascadelake-Server-v4":"GenuineIntel","Cascadelake-Server-v5":"GenuineIntel","ClearwaterForest":"GenuineIntel","Conroe":"GenuineIntel","Cooperlake":"GenuineIntel","Cooperlake-v2":"GenuineIntel","EPYC":"AuthenticAMD","EPYC-Genoa":"AuthenticAMD","EPYC-Genoa-v2":"AuthenticAMD","EPYC-IBPB":"AuthenticAMD","EPYC-Milan":"AuthenticAMD","EPYC-Milan-v2":"AuthenticAMD","EPYC-Milan-v3":"AuthenticAMD","EPYC-Rome":"AuthenticAMD","EPYC-Rome-v2":"AuthenticAMD","EPYC-Rome-v3":"AuthenticAMD","EPYC-Rome-v4":"AuthenticAMD","EPYC-Rome-v5":"AuthenticAMD","EPYC-Turin":"AuthenticAMD","EPYC-v3":"AuthenticAMD","EPYC-v4":"AuthenticAMD","EPYC-v5":"AuthenticAMD","GraniteRapids":"GenuineIntel","GraniteRapids-v2":"GenuineIntel","GraniteRapids-v3":"GenuineIntel","Haswell":"GenuineIntel","Haswell-IBRS":"GenuineIntel","Haswell-noTSX":"GenuineIntel","Haswell-noTSX-IBRS":"GenuineIntel","Icelake-Client":"GenuineIntel","Icelake-Client-noTSX":"GenuineIntel","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","IvyBridge":"GenuineIntel","IvyBridge-IBRS":"GenuineIntel","KnightsMill":"GenuineIntel","Nehalem":"GenuineIntel","Nehalem-IBRS":"GenuineIntel","Opteron_G1":"AuthenticAMD","Opteron_G2":"AuthenticAMD","Opteron_G3":"AuthenticAMD","Opteron_G4":"AuthenticAMD","Opteron_G5":"AuthenticAMD","Penryn":"GenuineIntel","SandyBridge":"GenuineIntel","SandyBridge-IBRS":"GenuineIntel","SapphireRapids":"GenuineIntel","SapphireRapids-v2":"GenuineIntel","SapphireRapids-v3":"GenuineIntel","SapphireRapids-v4":"GenuineIntel","SierraForest":"GenuineIntel","SierraForest-v2":"GenuineIntel","SierraForest-v3":"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","Westmere":"GenuineIntel","Westmere-IBRS":"GenuineIntel","athlon":"AuthenticAMD","core2duo":"GenuineIntel","coreduo":"GenuineIntel","kvm32":"default","kvm64":"default","max":"default","pentium":"GenuineIntel","pentium2":"GenuineIntel","pentium3":"GenuineIntel","phenom":"AuthenticAMD","qemu32":"default","qemu64":"default"}
\ No newline at end of file
diff --git a/debian/parse-cpu-models.pl b/debian/parse-cpu-models.pl
new file mode 100755
index 0000000..02086db
--- /dev/null
+++ b/debian/parse-cpu-models.pl
@@ -0,0 +1,121 @@
+#!/usr/bin/perl
+
+use v5.36;
+
+use JSON qw(to_json);
+
+# NOTE: Only the alias names were exposed in qemu-server before the info was created during build
+# of pve-qemu. Continue to do so.
+
+my @skip_models = (
+    'base',
+    'host', # added in qemu-server depending on arch
+
+    # x86_64
+    'n270',
+    'Denverton',
+    'Snowridge',
+    # some more are skipped based on vendor
+
+    # aarch64
+    'arm1026',
+    'arm1136',
+    'arm1136-r2',
+    'arm1176',
+    'arm11mpcore',
+    'arm926',
+    'arm946',
+    'cortex-a7',
+    'cortex-a8',
+    'cortex-a9',
+    'cortex-a15',
+    'cortex-m0',
+    'cortex-m3',
+    'cortex-m33',
+    'cortex-m4',
+    'cortex-m55',
+    'cortex-m7',
+    'cortex-r5',
+    'cortex-r52',
+    'cortex-r5f',
+    'sa1100',
+    'sa1110',
+    'ti925t',
+    # some more are skipped based on being deprecated
+);
+my $skip_models_re = qr/(@{[join('|', @skip_models)]})/;
+
+my $cpu_models = {};
+my $aliases = {};
+
+while (my $line = <STDIN>) {
+    last if $line =~ /^\s*Recognized CPUID flags:/;
+    next if $line =~ /^\s*Available CPUs:/;
+    next if $line =~ /^$/;
+
+    $line =~ s/^\s+//;
+    $line =~ s/\s+$//;
+
+    my ($model, $info) = ($line =~ m/^(\S+)\s*(.*)$/) or die "unexpected line '$line'\n";
+
+    if ($model eq 'athlon-v1') {
+        # has unusual info: QEMU Virtual CPU version 2.5+
+        $cpu_models->{$model} = 'AuthenticAMD';
+        next;
+    } elsif ($model =~ m/^((kvm|qemu)(32|64)-v1|max)$/) {
+        $cpu_models->{$model} = 'default';
+        next;
+    } elsif ($model =~ m/^$skip_models_re(-v\d)?$/) {
+        next; # skip
+    }
+
+    if (!$info) {
+        if ($model =~ m/^(486|pentium(2|3)?)-v1$/) {
+            $cpu_models->{$model} = 'GenuineIntel';
+            next;
+        } elsif ($model =~ m/^(a64fx|cortex-|neoverse-).*$/) {
+            $cpu_models->{$model} = 'ARM';
+            next;
+        }
+        die "unable to deal with line '$line' - implement me"
+    } elsif ($info =~ m/^\(deprecated\)$/) {
+        next;
+    } elsif ($info =~ m/^\(alias configured by machine type\)/) {
+        # For now, such an alias always corresponds to the -v1 for q35 and i440fx (not for microvm)
+        $aliases->{$model} = "${model}-v1";
+        next;
+    } elsif ($info =~ m/^\(alias of (\S+)\)/) {
+        # alias will be resolved later
+        $aliases->{$model} = $1;
+        next;
+    } elsif ($info =~ m/^(Hygon|YongFeng|Zhaoxin)/) {
+        next; # skip
+    } elsif ($info =~ m/^AMD/) {
+        $cpu_models->{$model} = 'AuthenticAMD';
+        next;
+    } elsif ($info =~ m/^(Intel|Genuine Intel|Westmere)/) {
+        $cpu_models->{$model} = 'GenuineIntel';
+        next;
+    }
+
+    die "unable to deal with line '$line' - implement me";
+}
+
+# Backwards compat - resolve the alias and only expose the alias.
+for my $alias (keys $aliases->%*) {
+    my $target = $aliases->{$alias};
+    # an alias might refer to a model that was skipped
+    next if !exists($cpu_models->{$target});
+    $cpu_models->{$alias} = $cpu_models->{$target};
+    delete $cpu_models->{$target};
+}
+
+# Backwards compat - there never was such a client CPU, but it was exposed in the past - mapped to
+# the corresponding server CPU model in qemu-server.
+if ($cpu_models->{'Icelake-Server'}) {
+    $cpu_models->{'Icelake-Client'} = 'GenuineIntel';
+    $cpu_models->{'Icelake-Client-noTSX'} = 'GenuineIntel';
+}
+
+print to_json($cpu_models, { utf8 => 1, canonical => 1 })
+    or die "failed to encode detected CPU models as JSON - $!\n";
diff --git a/debian/rules b/debian/rules
index c407172..04e8f53 100755
--- a/debian/rules
+++ b/debian/rules
@@ -14,6 +14,9 @@ flagfile := $(destdir)/usr/share/kvm/recognized-CPUID-flags-x86_64
 machine_file_x86_64 := $(destdir)/usr/share/kvm/machine-versions-x86_64.json
 machine_file_aarch64 := $(destdir)/usr/share/kvm/machine-versions-aarch64.json
 
+cpu_models_file_x86_64 := $(destdir)/usr/share/kvm/cpu-models-x86_64.json
+cpu_models_file_aarch64 := $(destdir)/usr/share/kvm/cpu-models-aarch64.json
+
 # default QEMU out-of-tree build directory is ./build
 BUILDDIR=build
 
@@ -126,6 +129,15 @@ install: build
 	$(destdir)/usr/bin/qemu-system-x86_64 -machine help | ./debian/parse-machines.pl > $(machine_file_x86_64)
 	$(destdir)/usr/bin/qemu-system-aarch64 -machine help | ./debian/parse-machines.pl > $(machine_file_aarch64)
 
+	# Supported CPU models are static for a given QEMU binary.
+	$(destdir)/usr/bin/qemu-system-x86_64 -cpu help | ./debian/parse-cpu-models.pl > $(cpu_models_file_x86_64)
+	$(destdir)/usr/bin/qemu-system-aarch64 -cpu help | ./debian/parse-cpu-models.pl > $(cpu_models_file_aarch64)
+	# NOTE: If the diff fails here after upgrading the QEMU submodule, check which new models
+	# are to be picked up and which are to be excluded, adapt to other changes and commit the
+	# new expected files (and parse-cpu-models.pl script).
+	diff $(cpu_models_file_x86_64) ./debian/cpu-models-x86_64.json
+	diff $(cpu_models_file_aarch64) ./debian/cpu-models-aarch64.json
+
 # Build architecture-independent files here.
 binary-indep: build install
 # We have nothing to do by default.
-- 
2.47.3





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

* [PATCH qemu-server 2/2] cpu config: use static CPU model list shipped by QEMU package if available
  2026-02-10 13:52 [PATCH-SERIES qemu/qemu-server 0/2] generate and ship static list of CPU models with pve-qemu-kvm Fiona Ebner
  2026-02-10 13:52 ` [PATCH qemu 1/2] generate and ship static list of CPU models Fiona Ebner
@ 2026-02-10 13:52 ` Fiona Ebner
  1 sibling, 0 replies; 6+ messages in thread
From: Fiona Ebner @ 2026-02-10 13:52 UTC (permalink / raw)
  To: pve-devel

Suggested-by: Thomas Lamprecht <t.lamprecht@proxmox.com>
Signed-off-by: Fiona Ebner <f.ebner@proxmox.com>
---

Requires the following series by Dominik to be applied:
https://lore.proxmox.com/pve-devel/20260205141959.3615131-1-d.csapak@proxmox.com/T/

 src/PVE/QemuServer/CPUConfig.pm | 237 +++++++++++++++++---------------
 1 file changed, 126 insertions(+), 111 deletions(-)

diff --git a/src/PVE/QemuServer/CPUConfig.pm b/src/PVE/QemuServer/CPUConfig.pm
index 165c48a7..a52e7815 100644
--- a/src/PVE/QemuServer/CPUConfig.pm
+++ b/src/PVE/QemuServer/CPUConfig.pm
@@ -104,119 +104,134 @@ my $all_cpu_models;
 # helper to make it easier for testing
 # initializes both '$cpu_models_by_arch' and '$all_cpu_models'
 sub initialize_cpu_models {
-    $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',
+    my $cpu_models_x86_64_file = '/usr/share/kvm/cpu-models-x86_64.json';
+    my $cpu_models_aarch64_file = '/usr/share/kvm/cpu-models-aarch64.json';
 
-            # 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',
+    if (-f $cpu_models_x86_64_file) { # QEMU package is new enough to ship static model files
+        my $json_text = PVE::Tools::file_get_contents($cpu_models_x86_64_file);
+        ($json_text) = $json_text =~ /(.*)/; # untaint
+        $cpu_models_by_arch->{'x86_64'} = eval { decode_json($json_text) }
+            or die "unable to decode contents of '$cpu_models_x86_64_file' - $@\n";
 
-            # 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',
-        },
-    };
+        $json_text = PVE::Tools::file_get_contents($cpu_models_aarch64_file);
+        ($json_text) = $json_text =~ /(.*)/; # untaint
+        $cpu_models_by_arch->{'aarch64'} = eval { decode_json($json_text) }
+            or die "unable to decode contents of '$cpu_models_aarch64_file' - $@\n";
+    } else { # FIXME PVE 10.x - remove hard-coded list
+        $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',
+
+                # 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',
+            },
+        };
+    }
 
     my $host_arch = get_host_arch();
     # The host CPU model only exists if the arch matches
-- 
2.47.3





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

* Re: [PATCH qemu 1/2] generate and ship static list of CPU models
  2026-02-10 13:52 ` [PATCH qemu 1/2] generate and ship static list of CPU models Fiona Ebner
@ 2026-02-11 10:33   ` Thomas Lamprecht
  2026-02-11 11:41     ` Fiona Ebner
  2026-02-17 18:28   ` applied: " Thomas Lamprecht
  1 sibling, 1 reply; 6+ messages in thread
From: Thomas Lamprecht @ 2026-02-11 10:33 UTC (permalink / raw)
  To: Fiona Ebner, pve-devel

Am 10.02.26 um 14:53 schrieb Fiona Ebner:
> Fail the build when the list changes, so that new models can be
> picked up selectively and other changes that might require adaptations
> are not missed.

thanks, any objection in storing this as pretty-formatted json?
As then the default line-based git diff is making comparisons simpler,
as while word-diff is great, it has it's limits IMO.

No need for a v2 in any case, as that change is easy enough to squash in.

btw. starting to wonder if we should produce an extra architecture "all"
packages for such files, could reduce churn on selective uploads; but I'd
figure that the current rate of change will slow down a bit soon.




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

* Re: [PATCH qemu 1/2] generate and ship static list of CPU models
  2026-02-11 10:33   ` Thomas Lamprecht
@ 2026-02-11 11:41     ` Fiona Ebner
  0 siblings, 0 replies; 6+ messages in thread
From: Fiona Ebner @ 2026-02-11 11:41 UTC (permalink / raw)
  To: Thomas Lamprecht, pve-devel

Am 11.02.26 um 11:32 AM schrieb Thomas Lamprecht:
> Am 10.02.26 um 14:53 schrieb Fiona Ebner:
>> Fail the build when the list changes, so that new models can be
>> picked up selectively and other changes that might require adaptations
>> are not missed.
> 
> thanks, any objection in storing this as pretty-formatted json?
> As then the default line-based git diff is making comparisons simpler,
> as while word-diff is great, it has it's limits IMO. 

No objection, I was considering it too after sending and seeing the very
long line in the patch. But wasn't sure :)

> No need for a v2 in any case, as that change is easy enough to squash in.

Thanks!

> btw. starting to wonder if we should produce an extra architecture "all"
> packages for such files, could reduce churn on selective uploads; but I'd
> figure that the current rate of change will slow down a bit soon.

One file for recognized aarch64 CPU flags might still come along in the
context of the custom CPU model edit API/UI. Otherwise, changes to those
files usually come together with switching to a new upstream version.




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

* applied: [PATCH qemu 1/2] generate and ship static list of CPU models
  2026-02-10 13:52 ` [PATCH qemu 1/2] generate and ship static list of CPU models Fiona Ebner
  2026-02-11 10:33   ` Thomas Lamprecht
@ 2026-02-17 18:28   ` Thomas Lamprecht
  1 sibling, 0 replies; 6+ messages in thread
From: Thomas Lamprecht @ 2026-02-17 18:28 UTC (permalink / raw)
  To: pve-devel, Fiona Ebner

On Tue, 10 Feb 2026 14:52:28 +0100, Fiona Ebner wrote:
> Fail the build when the list changes, so that new models can be
> picked up selectively and other changes that might require adaptations
> are not missed.
> 
> 

Applied, thanks!

[1/2] generate and ship static list of CPU models
      commit: fead726cc2c8352d41f3efb6957c282433b10a80




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

end of thread, other threads:[~2026-02-17 18:28 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-02-10 13:52 [PATCH-SERIES qemu/qemu-server 0/2] generate and ship static list of CPU models with pve-qemu-kvm Fiona Ebner
2026-02-10 13:52 ` [PATCH qemu 1/2] generate and ship static list of CPU models Fiona Ebner
2026-02-11 10:33   ` Thomas Lamprecht
2026-02-11 11:41     ` Fiona Ebner
2026-02-17 18:28   ` applied: " Thomas Lamprecht
2026-02-10 13:52 ` [PATCH qemu-server 2/2] cpu config: use static CPU model list shipped by QEMU package if available Fiona Ebner

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