From: Arthur Bied-Charreton <a.bied-charreton@proxmox.com>
To: pve-devel@lists.proxmox.com
Subject: [PATCH qemu-server v5 05/21] cpu flags: normalize CPU flags to QEMU's format
Date: Fri, 15 May 2026 11:28:22 +0200 [thread overview]
Message-ID: <20260515092839.238064-6-a.bied-charreton@proxmox.com> (raw)
In-Reply-To: <20260515092839.238064-1-a.bied-charreton@proxmox.com>
The QMP commands used in query_supported_cpu_flags() return some flags
multiple times in different formats, like for example 'sse4.2', 'sse4-2'
and 'sse4_2'.
In order to have a unified format, add the normalize_cpu_flag helper to
the CPUFlags module, which returns the alias QEMU has for a given flag
value. The list is sourced from x86_cpu_initfn() in
qemu/target/i386/cpu.c.
Suggested-by: Fiona Ebner <f.ebner@proxmox.com>
Signed-off-by: Arthur Bied-Charreton <a.bied-charreton@proxmox.com>
---
src/PVE/QemuServer.pm | 7 ++---
src/PVE/QemuServer/CPUFlags.pm | 53 ++++++++++++++++++++++++++++++++++
2 files changed, 56 insertions(+), 4 deletions(-)
diff --git a/src/PVE/QemuServer.pm b/src/PVE/QemuServer.pm
index 57123e56..af55c322 100644
--- a/src/PVE/QemuServer.pm
+++ b/src/PVE/QemuServer.pm
@@ -69,6 +69,7 @@ use PVE::QemuServer::CPUConfig qw(
get_intel_tdx_object
get_cvm_type
);
+use PVE::QemuServer::CPUFlags;
use PVE::QemuServer::Drive qw(
is_valid_drivename
checked_volume_format
@@ -2992,10 +2993,8 @@ sub query_supported_cpu_flags {
my $props = $cmd_result->{model}->{props};
foreach my $prop (keys %$props) {
next if $props->{$prop} ne JSON::true;
- # QEMU returns some flags multiple times, with '_', '.' or '-'
- # (e.g. lahf_lm and lahf-lm; sse4.2, sse4-2 and sse4_2; ...).
- # We only keep those with underscores, to match /proc/cpuinfo
- $prop =~ s/\.|-/_/g;
+ $prop = PVE::QemuServer::CPUFlags::normalize_cpu_flag($prop);
+
$flags->{$prop} = 1;
}
};
diff --git a/src/PVE/QemuServer/CPUFlags.pm b/src/PVE/QemuServer/CPUFlags.pm
index a681eb75..e17ed00c 100644
--- a/src/PVE/QemuServer/CPUFlags.pm
+++ b/src/PVE/QemuServer/CPUFlags.pm
@@ -14,6 +14,7 @@ our @EXPORT_OK = qw(
supported_cpu_flags_names
get_supported_cpu_flags
query_understood_cpu_flags
+ normalize_cpu_flag
);
my $supported_vm_specific_cpu_flags_by_arch = {
@@ -93,6 +94,58 @@ for my $arch ($supported_vm_specific_cpu_flags_by_arch->%*) {
my @supported_cpu_flags_name_sorted = sort keys $all_supported_vm_specific_cpu_flags->%*;
+# qemu/target/i386/cpu.c, x86_cpu_initfn()
+my $qemu_cpu_flag_alias_map = {
+ sse3 => 'pni',
+ pclmuldq => 'pclmulqdq',
+ 'sse4-1' => 'sse4.1',
+ 'sse4-2' => 'sse4.2',
+ xd => 'nx',
+ ffxsr => 'fxsr-opt',
+ i64 => 'lm',
+ ds_cpl => 'ds-cpl',
+ tsc_adjust => 'tsc-adjust',
+ fxsr_opt => 'fxsr-opt',
+ lahf_lm => 'lahf-lm',
+ cmp_legacy => 'cmp-legacy',
+ nodeid_msr => 'nodeid-msr',
+ perfctr_core => 'perfctr-core',
+ perfctr_nb => 'perfctr-nb',
+ kvm_nopiodelay => 'kvm-nopiodelay',
+ kvm_mmu => 'kvm-mmu',
+ kvm_asyncpf => 'kvm-asyncpf',
+ kvm_asyncpf_int => 'kvm-asyncpf-int',
+ kvm_steal_time => 'kvm-steal-time',
+ kvm_pv_eoi => 'kvm-pv-eoi',
+ kvm_pv_unhalt => 'kvm-pv-unhalt',
+ kvm_poll_control => 'kvm-poll-control',
+ svm_lock => 'svm-lock',
+ nrip_save => 'nrip-save',
+ tsc_scale => 'tsc-scale',
+ vmcb_clean => 'vmcb-clean',
+ pause_filter => 'pause-filter',
+ sse4_1 => 'sse4.1',
+ sse4_2 => 'sse4.2',
+ 'hv-apicv' => 'hv-avic',
+ lbr_fmt => 'lbr-fmt',
+};
+
+=head3 normalize_cpu_flag($flag)
+
+Normalize a CPU flag to its QEMU form.
+
+QEMU defines aliases for some CPU flags (see C<x86_cpu_initfn()> in
+C<target/i386/cpu.c>). For example, C<sse4_2> and C<sse4-2> are both aliases for
+C<sse4.2>.
+
+If C<$flag> has a known alias, return that, otherwise return C<$flag> unchanged.
+
+=cut
+
+sub normalize_cpu_flag($flag) {
+ return $qemu_cpu_flag_alias_map->{$flag} // $flag;
+}
+
# Understood CPU flags are written to a file at 'pve-qemu' compile time and
# shipped below this directory by the pve-qemu-kvm package.
my $understood_cpu_flag_dir = "/usr/share/kvm";
--
2.47.3
next prev parent reply other threads:[~2026-05-15 9:29 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-15 9:28 [PATCH docs/manager/qemu-server v5 00/21] Add API and UI for custom CPU models Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH pve-docs v5 01/21] qm: add anchor to "CPU Type" section Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH qemu-server v5 02/21] cpu config: rename CPU models config path variable Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH qemu-server v5 03/21] cpu flags: move cpu flags-related utilities to their own module Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH qemu-server v5 04/21] cpu flags: compare against JSON::true when querying supported flags Arthur Bied-Charreton
2026-05-15 9:28 ` Arthur Bied-Charreton [this message]
2026-05-15 9:28 ` [PATCH qemu-server v5 06/21] cpu flags: add helper querying CPU flags with nodes supporting them Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH qemu-server v5 07/21] cpu config: rename custom CPU model config loader Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH qemu-server v5 08/21] cpu config: add helpers to lock and write config Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH qemu-server v5 09/21] cpu: register standard option for CPU format Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH qemu-server v5 10/21] api: cpu flags: improve flags list returned by endpoint Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH qemu-server v5 11/21] custom cpu models: avoid redundant config load Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH pve-manager v5 12/21] cluster: reorder imports Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH pve-manager v5 13/21] cluster: makefile: reorder perl sources and align backslashes Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH pve-manager v5 14/21] api: add endpoint querying available CPU flags cluster-wide Arthur Bied-Charreton
2026-05-15 9:45 ` Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH pve-manager v5 15/21] api: add CRUD handlers for custom CPU models Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH pve-manager v5 16/21] ui: cpu model selector: allow filtering out custom models Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH pve-manager v5 17/21] ui: add basic custom CPU model editor Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH pve-manager v5 18/21] ui: cpu flags selector: add CPU flag editor for custom models Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH pve-manager v5 19/21] ui: cpu flags selector: allow filtering out flags supported on 0 nodes Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH pve-manager v5 20/21] ui: cpu flags selector: add search bar for large lists of flags Arthur Bied-Charreton
2026-05-15 9:28 ` [PATCH pve-manager v5 21/21] ui: group custom CPU with resource mappings Arthur Bied-Charreton
2026-05-15 17:05 ` [PATCH docs/manager/qemu-server v5 00/21] Add API and UI for custom CPU models Max R. Carrara
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260515092839.238064-6-a.bied-charreton@proxmox.com \
--to=a.bied-charreton@proxmox.com \
--cc=pve-devel@lists.proxmox.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox