From nobody Mon Sep 8 17:07:20 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=fail; 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=fail(p=none dis=none) header.from=gmail.com Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1754987262424630.2830556921433; Tue, 12 Aug 2025 01:27:42 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 76CC55FF; Tue, 12 Aug 2025 04:27:41 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 270D0868; Tue, 12 Aug 2025 04:10:59 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 7AAF82A8E; Thu, 7 Aug 2025 16:48:59 -0400 (EDT) Received: from mail-oi1-f176.google.com (mail-oi1-f176.google.com [209.85.167.176]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id E7B502A86 for ; Thu, 7 Aug 2025 16:48:52 -0400 (EDT) Received: by mail-oi1-f176.google.com with SMTP id 5614622812f47-43577ef82b7so456794b6e.3 for ; Thu, 07 Aug 2025 13:48:52 -0700 (PDT) Received: from home ([2603:8081:c640:1::1003]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-742fe78add9sm1605484a34.17.2025.08.07.13.48.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 07 Aug 2025 13:48:51 -0700 (PDT) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.7 required=5.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_INVALID,DKIM_SIGNED,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1754599732; x=1755204532; 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=0Jj9nQh+Dzddxo6vhkc0xl0SBaFmP++oIWlUWnsukVo=; b=TE2jrzC2RdNjA7Kh5anDm6tdClwrc2vBt2+ql6EhQs00rooPDsTZ6vjD9rsKjHScso YR3GBGQxW3ZjSsXkUTHBCVdTzV6YYzfkNC2qKi/vFmwCKAdrYALaIK/XZSsVEPqZ6rtJ kdHUsL5d4PTnutDgDhwu8Q1prSUBvhXq2rIYv5uZe9hDkQGBDBQHOJCBJEG9w7YJt1TI m+cIC2TkJXl9Vf299vjieLP8CJb0qnR/v3Q8LvPwbFYu+BZNgdLsUxiV7UsbQa847nrB xq1lGzuLC/mzNDHaE901Z+5JUbxYlgPUPx+4GIxoZqvNvnujam7MxJtRmjJhGBVo8rSg jnYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1754599732; x=1755204532; 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=0Jj9nQh+Dzddxo6vhkc0xl0SBaFmP++oIWlUWnsukVo=; b=h2EpRbBCcuNqy8vxTxfjZhT40X5derS+QWoTrhHXkO3B0OC/tjAyV06pS5Wo2VsAUU GN9X2bXT44hrZxnC1IMDfepTqVN8wov2C3E1/huLWeaCFBkcNWjmfmX8ei1YF5CKcfza 0dqRrjUBPd1dCA6NQDC9/ymHDeeVk1Yn+ZQ9uSqlIS8A3cwav8mjI//8kCEw/mO3+D2w DtZs9uy7t5JUqln7atPTsSKSvYuo8I1mc9PD0SMBQ7P7/eaYWA8CMNI96qL2SSmZX3Fr HaSMtcyFfMSLCCrPg0Z3ktLkZq8Fe6QLfi7rXGzImAf12J7T3truPDkRPDcW8gC5v/al 8mlg== X-Gm-Message-State: AOJu0Yz/GIG5yU3Xj33sCdIfNpH2FkbDKsthAyjIo6DtgmX1NRzWoL6m gT5mmYRPBei5O9vaPRQ6aGQ1vZAG3ZmuyYb+ncbtBMTzVX4IHgcbSvLebM0kNg== X-Gm-Gg: ASbGncukJ46PZyjxUWLEYEPSt3GTSW9GhwnPC3an//26/x3s47lJke/zrBWpEvqjAud kSOZPc41LfUTR6+PHaPUnD5BI0OsRZxyQe+8JnzPDZ/+MVOfc4c7nuu67lKrvmPmjFI9rBBDqb6 EQIVX3RavCe6SYxM0xWoP+qOhrdvp1r36koliXVNL2t1UcBJmegFAOU4h9hz8yblfCKBHZEwjuW OcND1rpiVVzqiEjr8qkS/z7WRtpW8iAzpbG4JJOaKTSM6F91ooCwnBCbJcqAuEEdrKvzCcedHna LmsxC4G53RxC0UlyGEM8i/IbiZ0/9PrdjIKgr4fABsqsP73VbPgPRth1U0QT4wb3M2j16VdmvDn P8Pg= X-Google-Smtp-Source: AGHT+IFHS18KHjdlgybLtOIz6X/GUtwo5R7eMptdnEn6+uNYNniQfCwggmYofrzL3cV7v/PNarc7Cg== X-Received: by 2002:a05:6808:3205:b0:435:791d:c250 with SMTP id 5614622812f47-43597b658aemr441352b6e.3.1754599731873; Thu, 07 Aug 2025 13:48:51 -0700 (PDT) From: Praveen K Paladugu To: devel@lists.libvirt.org Subject: [PATCH 1/4] qemu: introduce mshv capabilities Date: Thu, 7 Aug 2025 15:48:40 -0500 Message-ID: <20250807204843.17902-2-praveenkpaladugu@gmail.com> X-Mailer: git-send-email 2.50.1 In-Reply-To: <20250807204843.17902-1-praveenkpaladugu@gmail.com> References: <20250807204843.17902-1-praveenkpaladugu@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 3FCZFO32DBY3AAOOJ4RUQW5HIAYX4SEA X-Message-ID-Hash: 3FCZFO32DBY3AAOOJ4RUQW5HIAYX4SEA X-MailFrom: praveenkpaladugu@gmail.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: liuwe@microsoft.com X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1754987263872116600 Content-Type: text/plain; charset="utf-8" From: Praveen K Paladugu Qemu with mshv capabilities can launch domains of type hyperv. Signed-off-by: Praveen K Paladugu Signed-off-by: Praveen K Paladugu Reviewed-by: Daniel P. Berrang=C3=A9 --- src/qemu/qemu_capabilities.c | 40 +++++++++++++++++++++++++++++++++--- src/qemu/qemu_capabilities.h | 1 + 2 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index af238894b5..1e069eb0e5 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -742,6 +742,7 @@ VIR_ENUM_IMPL(virQEMUCaps, "amd-iommu.pci-id", /* QEMU_CAPS_AMD_IOMMU_PCI_ID */ "usb-bot", /* QEMU_CAPS_DEVICE_USB_BOT */ "tdx-guest", /* QEMU_CAPS_TDX_GUEST */ + "mshv", /* QEMU_CAPS_MSHV */ ); =20 =20 @@ -833,6 +834,7 @@ struct _virQEMUCaps { virQEMUCapsAccel kvm; virQEMUCapsAccel hvf; virQEMUCapsAccel tcg; + virQEMUCapsAccel mshv; }; =20 static virClass *virQEMUCapsClass; @@ -930,7 +932,8 @@ virQEMUCapsTypeIsAccelerated(virDomainVirtType type) bool virQEMUCapsHaveAccel(virQEMUCaps *qemuCaps) { - return virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM) || + return virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM) || + virQEMUCapsGet(qemuCaps, QEMU_CAPS_MSHV) || virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF); } =20 @@ -942,6 +945,8 @@ virQEMUCapsAccelStr(virDomainVirtType type) return "kvm"; else if (type =3D=3D VIR_DOMAIN_VIRT_HVF) return "hvf"; + else if (type =3D=3D VIR_DOMAIN_VIRT_HYPERV) + return "mshv"; =20 return "tcg"; } @@ -955,6 +960,8 @@ virQEMUCapsGetAccel(virQEMUCaps *qemuCaps, return &qemuCaps->kvm; else if (type =3D=3D VIR_DOMAIN_VIRT_HVF) return &qemuCaps->hvf; + else if (type =3D=3D VIR_DOMAIN_VIRT_HYPERV) + return &qemuCaps->mshv; =20 return &qemuCaps->tcg; } @@ -1062,6 +1069,8 @@ virQEMUCapsGetMachineTypesCaps(virQEMUCaps *qemuCaps, accel =3D &qemuCaps->kvm; else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF)) accel =3D &qemuCaps->hvf; + else if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MSHV)) + accel =3D &qemuCaps->mshv; else accel =3D &qemuCaps->tcg; =20 @@ -1170,6 +1179,10 @@ virQEMUCapsInitGuestFromBinary(virCaps *caps, virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_HVF, NULL, NULL, 0, NULL); } + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MSHV)) { + virCapabilitiesAddGuestDomain(guest, VIR_DOMAIN_VIRT_HYPERV, + NULL, NULL, 0, NULL); + } =20 if (ARCH_IS_X86(guestarch) || guestarch =3D=3D VIR_ARCH_AARCH64 || ARCH_IS_LOONGARCH(guestarch)) @@ -2049,6 +2062,7 @@ virQEMUCaps *virQEMUCapsNewCopy(virQEMUCaps *qemuCaps) virQEMUCapsAccelCopy(&ret->kvm, &qemuCaps->kvm); virQEMUCapsAccelCopy(&ret->hvf, &qemuCaps->hvf); virQEMUCapsAccelCopy(&ret->tcg, &qemuCaps->tcg); + virQEMUCapsAccelCopy(&ret->mshv, &qemuCaps->mshv); =20 ret->gicCapabilities =3D g_new0(virGICCapability, qemuCaps->ngicCapabi= lities); ret->ngicCapabilities =3D qemuCaps->ngicCapabilities; @@ -2109,6 +2123,7 @@ void virQEMUCapsDispose(void *obj) virQEMUCapsAccelClear(&qemuCaps->kvm); virQEMUCapsAccelClear(&qemuCaps->hvf); virQEMUCapsAccelClear(&qemuCaps->tcg); + virQEMUCapsAccelClear(&qemuCaps->mshv); } =20 void @@ -2331,6 +2346,10 @@ virQEMUCapsIsVirtTypeSupported(virQEMUCaps *qemuCaps, virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM)) return true; =20 + if (virtType =3D=3D VIR_DOMAIN_VIRT_HYPERV && + virQEMUCapsGet(qemuCaps, QEMU_CAPS_MSHV)) + return true; + return false; } =20 @@ -2894,8 +2913,9 @@ bool virQEMUCapsHasMachines(virQEMUCaps *qemuCaps) { =20 - return !!qemuCaps->kvm.nmachineTypes || - !!qemuCaps->hvf.nmachineTypes || + return !!qemuCaps->kvm.nmachineTypes || + !!qemuCaps->hvf.nmachineTypes || + !!qemuCaps->mshv.nmachineTypes || !!qemuCaps->tcg.nmachineTypes; } =20 @@ -4873,6 +4893,10 @@ virQEMUCapsLoadCache(virArch hostArch, virQEMUCapsLoadAccel(qemuCaps, ctxt, VIR_DOMAIN_VIRT_HVF) < 0) { return -1; } + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MSHV) && + virQEMUCapsLoadAccel(qemuCaps, ctxt, VIR_DOMAIN_VIRT_HYPERV) < 0) { + return -1; + } if (virQEMUCapsLoadAccel(qemuCaps, ctxt, VIR_DOMAIN_VIRT_QEMU) < 0) return -1; =20 @@ -4892,6 +4916,8 @@ virQEMUCapsLoadCache(virArch hostArch, virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_KV= M); if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF)) virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_HV= F); + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MSHV)) + virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_HY= PERV); virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_QEMU); =20 if (virXPathBoolean("boolean(./kvmSupportsNesting)", ctxt) > 0) @@ -5209,6 +5235,8 @@ virQEMUCapsFormatCache(virQEMUCaps *qemuCaps) virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_KVM); if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF)) virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_HVF); + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MSHV)) + virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_HYPERV); virQEMUCapsFormatAccel(qemuCaps, &buf, VIR_DOMAIN_VIRT_QEMU); =20 for (i =3D 0; i < qemuCaps->ngicCapabilities; i++) { @@ -5719,6 +5747,9 @@ virQEMUCapsGetVirtType(virQEMUCaps *qemuCaps) if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_TCG)) return VIR_DOMAIN_VIRT_QEMU; =20 + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MSHV)) + return VIR_DOMAIN_VIRT_HYPERV; + return VIR_DOMAIN_VIRT_NONE; } =20 @@ -5951,6 +5982,8 @@ virQEMUCapsNewForBinaryInternal(virArch hostArch, virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_KV= M); if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF)) virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_HV= F); + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MSHV)) + virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_HY= PERV); virQEMUCapsInitHostCPUModel(qemuCaps, hostArch, VIR_DOMAIN_VIRT_QEMU); =20 if (virQEMUCapsHaveAccel(qemuCaps)) { @@ -7160,4 +7193,5 @@ virQEMUCapsStripMachineAliases(virQEMUCaps *qemuCaps) virQEMUCapsStripMachineAliasesForVirtType(qemuCaps, VIR_DOMAIN_VIRT_KV= M); virQEMUCapsStripMachineAliasesForVirtType(qemuCaps, VIR_DOMAIN_VIRT_HV= F); virQEMUCapsStripMachineAliasesForVirtType(qemuCaps, VIR_DOMAIN_VIRT_QE= MU); + virQEMUCapsStripMachineAliasesForVirtType(qemuCaps, VIR_DOMAIN_VIRT_HY= PERV); } diff --git a/src/qemu/qemu_capabilities.h b/src/qemu/qemu_capabilities.h index 55b05bea84..3aee25ab0e 100644 --- a/src/qemu/qemu_capabilities.h +++ b/src/qemu/qemu_capabilities.h @@ -723,6 +723,7 @@ typedef enum { /* virQEMUCapsFlags grouping marker for = syntax-check */ QEMU_CAPS_AMD_IOMMU_PCI_ID, /* amd-iommu.pci-id */ QEMU_CAPS_DEVICE_USB_BOT, /* -device usb-bot */ QEMU_CAPS_TDX_GUEST, /* -object tdx-guest,... */ + QEMU_CAPS_MSHV, /* Whether MSHV is usable / was used during probing */ =20 QEMU_CAPS_LAST /* this must always be the last item */ } virQEMUCapsFlags; --=20 2.50.1