From nobody Mon Sep 8 17:03:36 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=none dis=none) header.from=gmail.com ARC-Seal: i=1; a=rsa-sha256; t=1756138161; cv=none; d=zohomail.com; s=zohoarc; b=iUO50Jshb/oPMUeNEtxuFqK/JJFM56KQ3fIWazRP0DUgDUp0pJxS2QPaY0j2y3tdteIMh9Yw6Yc8yLV3Sn+tuhNIEsXqGfCmlLhjWbRDsDJP4iX385FjzeF9OhC2osJWdbed0NTbsDw3zObpsQr6t9KiBabFBMfC3iZptNx8Z5c= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1756138161; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Owner:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Subject:Subject:To:To:Message-Id:Reply-To; bh=TwUh0oQEmKgiIHhhTVtaeu1VjU/bR5TVRqq40+I2pUQ=; b=SnsjIz3JGfaCUPkVysRUGRK0cyrTWZQLRCh4M8hWeyxYTqwPtvy7OFy1Z8bHSg+mQaflfw3gN+oxjQL7Ur5hpi/fK8TWBW9bbv4YsHNVKi5CuZ6bfU4ybkFajjpFzR+k0Jnu9lNqaE+ftHGRN1eN/OSIl2mscXQXw5i6qFfVJG8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1756138161032887.4259104003573; Mon, 25 Aug 2025 09:09:21 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 19B1C43EA8; Mon, 25 Aug 2025 12:09:20 -0400 (EDT) Received: from [172.19.199.3] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id F114A43FEA; Mon, 25 Aug 2025 11:58:29 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id B514E43E93; Mon, 25 Aug 2025 11:58:09 -0400 (EDT) Received: from mail-oa1-f46.google.com (mail-oa1-f46.google.com [209.85.160.46]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (3072 bits) server-digest SHA256) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id 4A73343E2D for ; Mon, 25 Aug 2025 11:58:04 -0400 (EDT) Received: by mail-oa1-f46.google.com with SMTP id 586e51a60fabf-30cce90227aso1500808fac.1 for ; Mon, 25 Aug 2025 08:58:04 -0700 (PDT) Received: from home ([2603:8081:c640:1::1004]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-314f7d13449sm1861944fac.26.2025.08.25.08.58.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 25 Aug 2025 08:58:02 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.8 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW, RCVD_IN_VALIDITY_CERTIFIED_BLOCKED,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_PASS autolearn=unavailable autolearn_force=no version=4.0.1 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1756137483; x=1756742283; darn=lists.libvirt.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=TwUh0oQEmKgiIHhhTVtaeu1VjU/bR5TVRqq40+I2pUQ=; b=YlW0C9i/ViH9ZksCVqLa6zCrdWlOiJgTl+nrtbZQkPSxbZQeGhQwTi2hwbjEixVNkr htF2bOmZNTGJQ6j1ESmW37rOIeLusXL91P/t9LtFetR5K2zz3dERWco3CNUPC7Zg6Sg9 c3HPI9t2b+89YRPEj+LmfA54YayBXn1xefWb7PjFGU8eUNarB0jdzlsEBzSExQ1ajCe6 l9abzeYZjG7sOmSkN7kr9tsycvwS6JrTxUYuo4P0b7L9cw4Ne7XmrGyRjHhyRHAEIqBR bcFJNm6W9nvt3zbdEokkqqLvDY06K22FDMzgZFOBmE+diSDopRjakwCV+NWaLWJlbmnY z/+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1756137483; x=1756742283; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TwUh0oQEmKgiIHhhTVtaeu1VjU/bR5TVRqq40+I2pUQ=; b=WSC91jkPNobpIDdcKml3UQuvFYndOPTtG+FrsarqhX1QCp1cg12ODvllF7cXGTBuCd uhZcxnAejCRHohLdszwboTpsWI2eSdPrfbdxBwR9ohYldZNIgf3IYI4NW0mUYZrieh3n XgCPageP009G105qpHbeeI8jEC+SLu0QD7BP07oS6XGwHjqqn4NoPCIisUAMySUIhbi4 BTkvQTQKZC6xhyud9kWhheI7RypJZRRoV/9NpqFw4E03Zdk6L8D7N0INB/kgrCX19ExM NCNK601dzgTKrJVqFF6l9TYlQCRw1fheWhX0KqZudhcAnggu1qaePsJKoAQ+VXhn1S5p mZPA== X-Gm-Message-State: AOJu0Yz1pb/QaFuIXD0aVtJFG7ULv2pAvxUFDHkeznRjSLl2Q/nhq9Mp 3x25Zdg5LVeVa8yiE+P5BybgHeBVcsmmaWtQMFMZ9jFPbWeStB2hSku2qFqsIA== X-Gm-Gg: ASbGnctcNWF7AydMa18ZXFJHUjXHFbOFwXwWyK59GwP54lCRfRC3p7GzgrvUWMRD2Te sPJ50xqN/WXoH+NFhB69XDeF63zwOYBLY96jdp6L7ZK0WClwBHRHDRUBYVrTPDVhRmWAGE9aWpo pksIMaBltfvQtKftwsUrT1G6hgeGOYDY5ZpRP7TDoiWXGX6S1HdEdxE91rKGtWEBCBOu+ufkYB3 //VSqcw/2dBKyG7+y8jme5EG2082aXwj+A/KZ7Yv1MBr6A+6mKyuJAzE+eCG+2X6BQ3xoUb8RhI Lch73OJ4/1i67258VKRMBUlEeFhgIdfCBtrU+E0+Lf+SGt4j9q6N9cMlMuA+WH0rS0NwPngNKxL ZYmI= X-Google-Smtp-Source: AGHT+IE5+fqC5bzBVCtmZNJxuei6FMjpLex4Y4OMeIIM429CbAT7e6wV0ZiWGw9DCsrZ9dKdz4HQpA== X-Received: by 2002:a05:6871:290a:10b0:315:2539:a5d with SMTP id 586e51a60fabf-3152539268emr1284726fac.1.1756137483289; Mon, 25 Aug 2025 08:58:03 -0700 (PDT) From: Praveen K Paladugu X-Google-Original-From: Praveen K Paladugu To: devel@lists.libvirt.org Subject: [PATCH v2 4/6] qemu: probe mshv capabilities Date: Mon, 25 Aug 2025 10:57:50 -0500 Message-ID: <20250825155752.5663-5-prapal@linux.microsoft.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250825155752.5663-1-prapal@linux.microsoft.com> References: <20250825155752.5663-1-prapal@linux.microsoft.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: IJYQYMI3WDIJNPBQV7SCXRDZZ7CRCI62 X-Message-ID-Hash: IJYQYMI3WDIJNPBQV7SCXRDZZ7CRCI62 X-MailFrom: praveenkpaladugu@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; header-match-devel.lists.libvirt.org-0; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header CC: liuwe@microsoft.com X-Mailman-Version: 3.3.10 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: pass (identity @gmail.com) X-ZM-MESSAGEID: 1756138162386116600 Content-Type: text/plain; charset="utf-8" Probe mshv capabilities from qemu with QMP commands. Limit probing only to x86_64 architecture with newer versions of QEMU. Signed-off-by: Praveen K Paladugu --- src/qemu/qemu_capabilities.c | 21 +++++++++++++++++++++ src/qemu/qemu_monitor.c | 12 ++++++++++++ src/qemu/qemu_monitor.h | 12 +++++++++--- src/qemu/qemu_monitor_json.c | 32 ++++++++++++++++++++++++++------ src/qemu/qemu_monitor_json.h | 13 +++++++++---- 5 files changed, 77 insertions(+), 13 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index 1e069eb0e5..cc7774a58a 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -3488,6 +3488,22 @@ virQEMUCapsProbeQMPKVMState(virQEMUCaps *qemuCaps, return 0; } =20 +static int +virQEMUCapsProbeQMPMSHVState(virQEMUCaps *qemuCaps, + qemuMonitor *mon) +{ + bool enabled =3D false; + bool present =3D false; + + if (qemuMonitorGetMSHVState(mon, &enabled, &present) < 0) + return -1; + + if (present && enabled) + virQEMUCapsSet(qemuCaps, QEMU_CAPS_MSHV); + + return 0; +} + #ifdef __APPLE__ bool virQEMUCapsProbeHVF(virQEMUCaps *qemuCaps) @@ -5795,6 +5811,11 @@ virQEMUCapsInitQMPMonitor(virQEMUCaps *qemuCaps, if (virQEMUCapsProbeQMPKVMState(qemuCaps, mon) < 0) return -1; =20 + if (qemuCaps->arch =3D=3D VIR_ARCH_X86_64 && qemuCaps->version >=3D 10= 000092) { + if (virQEMUCapsProbeQMPMSHVState(qemuCaps, mon) < 0) + return -1; + } + if (virQEMUCapsProbeHVF(qemuCaps)) virQEMUCapsSet(qemuCaps, QEMU_CAPS_HVF); =20 diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index c1fef8d5de..5acff4125d 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -3434,6 +3434,18 @@ qemuMonitorGetKVMState(qemuMonitor *mon, return qemuMonitorJSONGetKVMState(mon, enabled, present); } =20 +int +qemuMonitorGetMSHVState(qemuMonitor *mon, + bool *enabled, + bool *present) +{ + VIR_DEBUG("enabled=3D%p present=3D%p", enabled, present); + + QEMU_CHECK_MONITOR(mon); + + return qemuMonitorJSONGetMSHVState(mon, enabled, present); +} + =20 int qemuMonitorGetObjectTypes(qemuMonitor *mon, diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 755f347e17..e31a00de56 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1220,9 +1220,15 @@ qemuMonitorCPUModelInfoCopy(const qemuMonitorCPUMode= lInfo *orig); =20 GHashTable *qemuMonitorGetCommandLineOptions(qemuMonitor *mon); =20 -int qemuMonitorGetKVMState(qemuMonitor *mon, - bool *enabled, - bool *present); +int +qemuMonitorGetMSHVState(qemuMonitor *mon, + bool *enabled, + bool *present); + +int +qemuMonitorGetKVMState(qemuMonitor *mon, + bool *enabled, + bool *present); =20 int qemuMonitorGetObjectTypes(qemuMonitor *mon, char ***types); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 9f51421478..2b29399d3b 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -5520,9 +5520,11 @@ qemuMonitorJSONGetCommandLineOptions(qemuMonitor *mo= n) } =20 =20 -int qemuMonitorJSONGetKVMState(qemuMonitor *mon, - bool *enabled, - bool *present) +static int +qemuMonitorJSONGetHypervisorState(qemuMonitor *mon, + const char *query_cmd, + bool *enabled, + bool *present) { g_autoptr(virJSONValue) cmd =3D NULL; g_autoptr(virJSONValue) reply =3D NULL; @@ -5531,7 +5533,7 @@ int qemuMonitorJSONGetKVMState(qemuMonitor *mon, /* Safe defaults */ *enabled =3D *present =3D false; =20 - if (!(cmd =3D qemuMonitorJSONMakeCommand("query-kvm", NULL))) + if (!(cmd =3D qemuMonitorJSONMakeCommand(query_cmd, NULL))) return -1; =20 if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) @@ -5542,8 +5544,8 @@ int qemuMonitorJSONGetKVMState(qemuMonitor *mon, =20 if (virJSONValueObjectGetBoolean(data, "enabled", enabled) < 0 || virJSONValueObjectGetBoolean(data, "present", present) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, "%s", - _("query-kvm replied unexpected data")); + virReportError(VIR_ERR_INTERNAL_ERROR, + _("%1$s replied unexpected data"), query_cmd); return -1; } =20 @@ -5551,6 +5553,24 @@ int qemuMonitorJSONGetKVMState(qemuMonitor *mon, } =20 =20 +int qemuMonitorJSONGetKVMState(qemuMonitor *mon, + bool *enabled, + bool *present) +{ + return qemuMonitorJSONGetHypervisorState(mon, "query-kvm", + enabled, present); +} + + +int qemuMonitorJSONGetMSHVState(qemuMonitor *mon, + bool *enabled, + bool *present) +{ + return qemuMonitorJSONGetHypervisorState(mon, "query-mshv", + enabled, present); +} + + int qemuMonitorJSONGetObjectTypes(qemuMonitor *mon, char ***types) diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index bd437f7938..5c1d626f97 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -451,10 +451,15 @@ qemuMonitorJSONGetCPUModelComparison(qemuMonitor *mon, GHashTable * qemuMonitorJSONGetCommandLineOptions(qemuMonitor *mon); =20 -int -qemuMonitorJSONGetKVMState(qemuMonitor *mon, - bool *enabled, - bool *present) + +int qemuMonitorJSONGetKVMState(qemuMonitor *mon, + bool *enabled, + bool *present) + ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); + +int qemuMonitorJSONGetMSHVState(qemuMonitor *mon, + bool *enabled, + bool *present) ATTRIBUTE_NONNULL(2) ATTRIBUTE_NONNULL(3); =20 int --=20 2.50.1