From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 688701FF13A for ; Wed, 01 Apr 2026 10:02:22 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id AEA6212740; Wed, 1 Apr 2026 10:01:05 +0200 (CEST) From: Arthur Bied-Charreton To: pve-devel@lists.proxmox.com Subject: [PATCH qemu-server v2 08/17] cpu flags: Improve flags list returned by endpoint Date: Wed, 1 Apr 2026 10:00:19 +0200 Message-ID: <20260401080028.62513-9-a.bied-charreton@proxmox.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260401080028.62513-1-a.bied-charreton@proxmox.com> References: <20260401080028.62513-1-a.bied-charreton@proxmox.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SPAM-LEVEL: Spam detection results: 0 AWL -0.120 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: HPE4LVYJ42IT7772PDXF3Z7MRQXF3LRE X-Message-ID-Hash: HPE4LVYJ42IT7772PDXF3Z7MRQXF3LRE 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 flag to node compatibility is evaluated. Signed-off-by: Arthur Bied-Charreton --- src/PVE/API2/Qemu/CPUFlags.pm | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/src/PVE/API2/Qemu/CPUFlags.pm b/src/PVE/API2/Qemu/CPUFlags.pm index 672bd2d2..122f0ed9 100644 --- a/src/PVE/API2/Qemu/CPUFlags.pm +++ b/src/PVE/API2/Qemu/CPUFlags.pm @@ -6,7 +6,8 @@ use PVE::JSONSchema qw(get_standard_option); use PVE::RESTHandler; use PVE::Tools qw(extract_param); -use PVE::QemuServer::CPUConfig; +use PVE::QemuServer::Helpers; +use PVE::QemuServer::CPUFlags; 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 => { @@ -35,6 +45,14 @@ __PACKAGE__->register_method({ description => { type => 'string', description => "Description of the CPU flag.", + optional => 1, + }, + '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, }, }, }, @@ -42,9 +60,10 @@ __PACKAGE__->register_method({ 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::CPUConfig::get_supported_cpu_flags($arch); + return PVE::QemuServer::CPUFlags::query_available_cpu_flags($accel, 1, $arch); }, }); -- 2.47.3