From nobody Fri Nov 21 10:11:10 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=1762546712; cv=none; d=zohomail.com; s=zohoarc; b=e8rcre8xfNH7QRvTgcrWexLg0kHUlDG6xwPKVq5kDBeDJaFfV85wOL+wwi9B8nPBOWj6G6IFI7U/hdOACtR4b6UZWbEcExvUPVThXEkIXsZUNKHwmC6zTyiv+N4wfJgLf1AyAJ00BmVNpUKIg/lQhtj0HRiq3SfEDFpBthTeME4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1762546712; 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=f1T9TWijyFNnG4pLojCjvuIlt2eQs7kIgf5TeanFnYY=; b=nwDwbB4gqdmY+9WRUcxSS9ZMmJH/cHoeWZnL2VMj+xjHrWTE7CD8l3wO/6ln6fqxUvpbxWe3nk1F0LrrJu7+ZgBYs/tCj129hFhVXFPv7xxVm9oIXJW/PbQjaTZJ5985szzolyFWk9PfFJ6HHEohxA/H1EqYVO8wpOVWey5DA58= 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 1762546712748696.5686795195962; Fri, 7 Nov 2025 12:18:32 -0800 (PST) Received: by lists.libvirt.org (Postfix, from userid 993) id DD4F5445C9; Fri, 7 Nov 2025 15:18:31 -0500 (EST) Received: from [172.19.199.29] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 581CD4478C; Fri, 7 Nov 2025 15:15:52 -0500 (EST) Received: by lists.libvirt.org (Postfix, from userid 993) id A79F844406; Fri, 7 Nov 2025 15:14:25 -0500 (EST) Received: from mail-ot1-f42.google.com (mail-ot1-f42.google.com [209.85.210.42]) (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 2563F44423 for ; Fri, 7 Nov 2025 15:14:15 -0500 (EST) Received: by mail-ot1-f42.google.com with SMTP id 46e09a7af769-7c6d3676455so339926a34.2 for ; Fri, 07 Nov 2025 12:14:15 -0800 (PST) Received: from home ([72.191.74.189]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7c6f1132705sm2041451a34.28.2025.11.07.12.14.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 07 Nov 2025 12:14:08 -0800 (PST) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-5.3 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, 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=1762546454; x=1763151254; 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=f1T9TWijyFNnG4pLojCjvuIlt2eQs7kIgf5TeanFnYY=; b=KZjC17NxIrYcPZZCTHKudTjMYvHnx7Z6LtqmAjpkwDXzPnajXjzefLG0GiN6i/qKTM Gt/Virnx5NOHrOHsXHzOeXrOb4RWrDJRL2bzVxlqwhN6Qo5gp252+yT2Kj0JG6KpQvbC WIz617NpgiJJYX7tcXu5XGMraE/u2T223irMUTwVegdzpGSUHeuCEE3brN3Gzq1ojkzs YAqzvvlv/5m3QyfaJLP7WegME0hKH6OJdt+m8+D7HlQDrIM5KM9bfAbwjFwqR1scHwei PW8B2XXA1OyvVE/WE00xR4Uia10C47sTXtWGcBMD9lMckomhA2e4N0fYliaItTBa7imD zv1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1762546454; x=1763151254; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=f1T9TWijyFNnG4pLojCjvuIlt2eQs7kIgf5TeanFnYY=; b=ZXtaA8VPDwPCfQkweLEDlaETZK4k2W3IWK7CgMiCh/gZiQaO+kLGJG0NxYan5GVtNv UekGLHGZXnhiE5CSMIIyuOxE+G6uGEJWAO/pZSwtGWksz+1921sEa/5TT/CkAMF1xvAK KPgttJA8/yCuZ5PONJHvQ79xyVZNAxcxdSX5oNEr+pFmeb+MB81F5XtL2SLxqx/NvaPg 7bhMf5ixza9MrSoS8HCmyYKbF1uyPhObi/dILrfi4Qe4Lj7QQ/yK48YRxSp4Xq57veQ+ YfcKiPr4PGAJkZlN3TT3/xquDsyvayz43JmJsSoOiItZHHsU4a+mmjzmVnNQKcC2XJX8 j5RQ== X-Gm-Message-State: AOJu0YwN4I/A4VRDig3GKj2/taWcpHalY4qY8fdoy+xiwsQUr8VOIPen B/ijfve/W84GtidM1z86deSPwWvv8QVucIDybPXeSBLKDVtk7vAW45bZUzWvsg== X-Gm-Gg: ASbGncvqfx7mSQHNuDcduRpj91UDDlyGC+frSLpf2v23uR9WCeyLRNttXfQMYeSXat9 t0BD8Ow843Akf0Ud0JQTvZKtWBkNQ49Di2qM6SiJqpibelkSmjMna0KwSL9xRQcJShmPz3BVt2L 2WUDMzgx0VrkOM+T3TCkt6iuvVASA5efJH4N0jFDmwzL+miOeSaUluQkeaok1Y4mLdYqRQRZtzt g7jCEtids3gHz8Qjbs/0anKqCSFCOWS2CJe9RQx/KiHPjy4E+l2dNftfG+iosCnRvJbqr0CumI/ Szv7ut0Kb8JMWBSCDugV7w9dT+Uz4R30r1M9ITxM0L19I8EF7GwZqK5Hj+PPVZAyz/qPl+POqDj JlB1cKwYJxrD29oCLSLtLzbHe1hwkpNKlmdQv9Sx13LWUimcGubfMSymWfpKj1OzvAxfjHL6IoO A= X-Google-Smtp-Source: AGHT+IFoNUpmFaWxIV0b9hf9n6JsK7mdlnJNjb41H/YGOWNStmOOiKYYH5S7mlrMXvz12oJTKnjGHA== X-Received: by 2002:a9d:614c:0:b0:746:dba5:eced with SMTP id 46e09a7af769-7c6fd75a30cmr379021a34.14.1762546449330; Fri, 07 Nov 2025 12:14:09 -0800 (PST) From: Praveen K Paladugu To: devel@lists.libvirt.org Subject: [PATCH v4 2/9] qemu: Query and use mshv capabilities Date: Fri, 7 Nov 2025 14:13:53 -0600 Message-ID: <20251107201401.30004-3-praveenkpaladugu@gmail.com> X-Mailer: git-send-email 2.51.0 In-Reply-To: <20251107201401.30004-1-praveenkpaladugu@gmail.com> References: <20251107201401.30004-1-praveenkpaladugu@gmail.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: WGETWHNIY4M3OZFTJ6PWNH2LZZFZGOJA X-Message-ID-Hash: WGETWHNIY4M3OZFTJ6PWNH2LZZFZGOJA 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: wei.liu@kernel.org 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: 1762546714833158500 Content-Type: text/plain; charset="utf-8" From: Praveen K Paladugu Qemu with mshv capabilities can launch VIR_DOMAIN_VIRT_HYPERV domains. Signed-off-by: Praveen K Paladugu Reviewed-by: Martin Kletzander --- src/qemu/qemu_capabilities.c | 38 +++++++++++++++++++++++++++++++++++- 1 file changed, 37 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_capabilities.c b/src/qemu/qemu_capabilities.c index c479a82473..3c22ef80a6 100644 --- a/src/qemu/qemu_capabilities.c +++ b/src/qemu/qemu_capabilities.c @@ -840,6 +840,7 @@ struct _virQEMUCaps { virQEMUCapsAccel kvm; virQEMUCapsAccel hvf; virQEMUCapsAccel tcg; + virQEMUCapsAccel mshv; }; =20 static virClass *virQEMUCapsClass; @@ -938,7 +939,8 @@ bool virQEMUCapsHaveAccel(virQEMUCaps *qemuCaps) { return virQEMUCapsGet(qemuCaps, QEMU_CAPS_KVM) || - virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF); + virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF) || + virQEMUCapsGet(qemuCaps, QEMU_CAPS_MSHV); } =20 =20 @@ -949,6 +951,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"; } @@ -962,6 +966,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; } @@ -1069,6 +1075,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 @@ -1177,6 +1185,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)) @@ -2065,6 +2077,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; @@ -2124,6 +2137,7 @@ void virQEMUCapsDispose(void *obj) virQEMUCapsAccelClear(&qemuCaps->kvm); virQEMUCapsAccelClear(&qemuCaps->hvf); virQEMUCapsAccelClear(&qemuCaps->tcg); + virQEMUCapsAccelClear(&qemuCaps->mshv); } =20 void @@ -2346,6 +2360,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 @@ -2918,6 +2936,7 @@ virQEMUCapsHasMachines(virQEMUCaps *qemuCaps) =20 return !!qemuCaps->kvm.nmachineTypes || !!qemuCaps->hvf.nmachineTypes || + !!qemuCaps->mshv.nmachineTypes || !!qemuCaps->tcg.nmachineTypes; } =20 @@ -3483,6 +3502,8 @@ virQEMUCapsProbeAccels(virQEMUCaps *qemuCaps, virQEMUCapsSet(qemuCaps, QEMU_CAPS_HVF); else if (STREQ(enabled, "kvm")) virQEMUCapsSet(qemuCaps, QEMU_CAPS_KVM); + else if (STREQ(enabled, "mshv")) + virQEMUCapsSet(qemuCaps, QEMU_CAPS_MSHV); =20 return 0; } @@ -4897,6 +4918,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 @@ -4916,6 +4941,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) @@ -5252,6 +5279,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++) { @@ -5759,6 +5788,9 @@ virQEMUCapsGetVirtType(virQEMUCaps *qemuCaps) if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_HVF)) return VIR_DOMAIN_VIRT_HVF; =20 + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_MSHV)) + return VIR_DOMAIN_VIRT_HYPERV; + if (virQEMUCapsGet(qemuCaps, QEMU_CAPS_TCG)) return VIR_DOMAIN_VIRT_QEMU; =20 @@ -5995,6 +6027,9 @@ 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)) { @@ -7203,4 +7238,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); } --=20 2.51.0