From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id 497011FF14C for ; Fri, 15 May 2026 11:30:37 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id AD5ED150C2; Fri, 15 May 2026 11:29:26 +0200 (CEST) From: Arthur Bied-Charreton To: pve-devel@lists.proxmox.com Subject: [PATCH qemu-server v5 10/21] api: cpu flags: improve flags list returned by endpoint Date: Fri, 15 May 2026 11:28:27 +0200 Message-ID: <20260515092839.238064-11-a.bied-charreton@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260515092839.238064-1-a.bied-charreton@proxmox.com> References: <20260515092839.238064-1-a.bied-charreton@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.133 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment KAM_LAZY_DOMAIN_SECURITY 1 Sending domain does not have any anti-forgery methods RDNS_NONE 0.793 Delivered to internal network by a host with no rDNS SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_NONE 0.001 SPF: sender does not publish an SPF Record Message-ID-Hash: VKK277B7PTUSITW6NY7GRUJFAK2MI4C5 X-Message-ID-Hash: VKK277B7PTUSITW6NY7GRUJFAK2MI4C5 X-MailFrom: abied-charreton@jett.proxmox.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: Enhance the cpu-flags endpoint's list of flags by using the new query_available_cpu_flags utility, which for each flag, additionally returns a list of nodes supporting it, e.g.: ``` name: 'aes', 'supported-on': ['node1', 'node2'], description: '...', ``` An `accel` parameter selects the acceleration type, `kvm` (default) or `tcg` for which the flag-to-node compatibility is evaluated. The now- unused get_supported_cpu_flags helper is removed. Signed-off-by: Arthur Bied-Charreton --- src/PVE/API2/Qemu/CPUFlags.pm | 24 +++++++++++++++++++++--- src/PVE/QemuServer/CPUFlags.pm | 14 -------------- 2 files changed, 21 insertions(+), 17 deletions(-) diff --git a/src/PVE/API2/Qemu/CPUFlags.pm b/src/PVE/API2/Qemu/CPUFlags.pm index 4b409a40..873441d9 100644 --- a/src/PVE/API2/Qemu/CPUFlags.pm +++ b/src/PVE/API2/Qemu/CPUFlags.pm @@ -7,6 +7,7 @@ use PVE::RESTHandler; use PVE::Tools qw(extract_param); use PVE::QemuServer::CPUFlags; +use PVE::QemuServer::Helpers; use base qw(PVE::RESTHandler); @@ -14,13 +15,22 @@ __PACKAGE__->register_method({ name => 'index', path => '', method => 'GET', - description => 'List of available VM-specific CPU flags.', + description => + "List of available VM-specific CPU flags. Returns an empty list for 'aarch64' " + . "as no VM-specific flags are defined for it yet.", permissions => { user => 'all' }, parameters => { additionalProperties => 0, properties => { node => get_standard_option('pve-node'), arch => get_standard_option('pve-qm-cpu-arch', { optional => 1 }), + accel => { + description => 'Acceleration type to check node compatibility for.', + type => 'string', + enum => [qw(kvm tcg)], + optional => 1, + default => 'kvm', + }, }, }, returns => { @@ -36,15 +46,23 @@ __PACKAGE__->register_method({ type => 'string', description => "Description of the CPU flag.", }, + 'supported-on' => { + description => + 'List of nodes supporting the CPU flag with the selected acceleration type ("accel").', + type => 'array', + items => get_standard_option('pve-node'), + optional => 1, + }, }, }, }, code => sub { my ($param) = @_; - my $arch = extract_param($param, 'arch'); + my $arch = extract_param($param, 'arch') // PVE::QemuServer::Helpers::get_host_arch(); + my $accel = extract_param($param, 'accel') // 'kvm'; - return PVE::QemuServer::CPUFlags::get_supported_cpu_flags($arch); + return PVE::QemuServer::CPUFlags::query_available_cpu_flags($accel, 1, $arch); }, }); diff --git a/src/PVE/QemuServer/CPUFlags.pm b/src/PVE/QemuServer/CPUFlags.pm index 709828d7..09a4ab0b 100644 --- a/src/PVE/QemuServer/CPUFlags.pm +++ b/src/PVE/QemuServer/CPUFlags.pm @@ -6,13 +6,11 @@ use Exporter qw(import); use PVE::Cluster; use PVE::File; -use PVE::QemuServer::Helpers qw(get_host_arch); our @EXPORT_OK = qw( cpu_flag_supported_re cpu_flag_any_re supported_cpu_flags_names - get_supported_cpu_flags query_understood_cpu_flags normalize_cpu_flag query_available_cpu_flags @@ -168,18 +166,6 @@ sub cpu_flag_any_re() { return qr/([+-])([a-zA-Z0-9\-_\.]+)/; } -=head3 get_supported_cpu_flags($arch) - -Return supported VM-specific CPU flags for $arch. $arch defaults to the host architecture -if C. - -=cut - -sub get_supported_cpu_flags($arch) { - $arch = get_host_arch() if !defined($arch); - return $supported_vm_specific_cpu_flags_by_arch->{$arch}; -} - sub query_understood_cpu_flags($arch) { my $filepath = "$understood_cpu_flag_dir/recognized-CPUID-flags-$arch"; -- 2.47.3