From nobody Tue Oct 28 17:28:40 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=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1759757420; cv=none; d=zohomail.com; s=zohoarc; b=CMrY4e0N9GS1qpbBAAzZDAgIee2gvGnyc2QmYGZEujksRQy7nAv0CKzDrrD5Mv8BTpcm/iwaRg4ixGlTyoTSGbnhK5IWYOdCa/QICtJDOswHdwH6sJZX/7j0jibjZcI18AB+zxcyeKdNsA9IWWdL7cWklOq/evAn/iBuJY3me5I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1759757420; h=Content-Type:Content-Transfer-Encoding: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:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id:Cc; bh=6b/I14Zez8nujvwi6Kq/B2eUOjqUwCRDOxDseIDdoH8=; b=D7v+NMmvlNLr2Xub2ZqcxkEt0nYLoObyasGmCDSRrSEZcZZgtIYP/s0wdGCx1axR/nJ/P9gCqLf3muWmsd0byCTZxTzGMZNmBdZk+uEPcU3hzjuC1IFRnZKIOqtGXCf01PYqcDAxqKm2keT7LqmDSJitSo49Zpnm+bz5tWUP5DY= ARC-Authentication-Results: i=1; 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=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1759757420194316.1294215027493; Mon, 6 Oct 2025 06:30:20 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 3C36A4182E; Mon, 6 Oct 2025 09:30:19 -0400 (EDT) Received: from [172.19.199.17] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id 8398D44319; Mon, 6 Oct 2025 09:19:36 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 6254241C81; Mon, 6 Oct 2025 09:15:12 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) (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 EA44341C7F for ; Mon, 6 Oct 2025 09:15:10 -0400 (EDT) Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-680-L68TSUlvNWmYStyiEMtWlw-1; Mon, 06 Oct 2025 09:15:09 -0400 Received: from mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 7FC151955F3C for ; Mon, 6 Oct 2025 13:15:08 +0000 (UTC) Received: from localhost.localdomain (unknown [10.43.3.236]) by mx-prod-int-01.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 745C430002CC for ; Mon, 6 Oct 2025 13:15:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-26) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-3.1 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, 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=redhat.com; s=mimecast20190719; t=1759756510; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=6b/I14Zez8nujvwi6Kq/B2eUOjqUwCRDOxDseIDdoH8=; b=IGUzAkP4/LuG7mL8Z07qhMd+B90hncWBbCCr8IH2gFPS1RQKBFgzzCjXaLAzAAh4ZErbk8 9z3VEHv/Zl1Sq66jGCOo3fs+8OrLCFhfBxI7bcELd4RTmIr56nvh799Nt8Zy0rROrl/Hqy IKRqnp6h3emK4m+++IQfQ9GURbjBbIs= X-MC-Unique: L68TSUlvNWmYStyiEMtWlw-1 X-Mimecast-MFC-AGG-ID: L68TSUlvNWmYStyiEMtWlw_1759756508 To: devel@lists.libvirt.org Subject: [PATCH 10/20] conf: More hyperv related members into a single struct Date: Mon, 6 Oct 2025 15:14:41 +0200 Message-ID: <2dbab69bca5432efd9295e11a93ca146a86ab1ef.1759756003.git.mprivozn@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.4.1 on 10.30.177.4 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: dDWgwuXZ-X09RNGyAtXYIdqzUHaGtCq2L_kAjKdKjWY_1759756508 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 4GEDHJWRKDYSZ6ACE3XWWXTCAHW6S7X7 X-Message-ID-Hash: 4GEDHJWRKDYSZ6ACE3XWWXTCAHW6S7X7 X-MailFrom: mprivozn@redhat.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 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: From: Michal Privoznik via Devel Reply-To: Michal Privoznik X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1759757421990116600 Content-Type: text/plain; charset="utf-8"; x-default="true" From: Michal Privoznik So far, we have an array of integers (hyperv_features), an uint (hyperv_spinlocks), a string (hyperv_vendor_id) and some tristate switches scattered across virDomainDef. Soon, new knobs will be introduced and keeping the current state would only worsen readability. Introduce virDomainHypervFeatures struct to place hyperv related features there. Signed-off-by: Michal Privoznik --- src/conf/domain_conf.c | 77 ++++++++++++++++++++++------------------- src/conf/domain_conf.h | 15 ++++---- src/conf/virconftypes.h | 2 ++ src/libxl/libxl_conf.c | 2 +- src/qemu/qemu_command.c | 16 ++++----- src/qemu/qemu_process.c | 8 ++--- 6 files changed, 66 insertions(+), 54 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 55b1a1a691..99ed633836 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -4020,6 +4020,13 @@ virDomainOSDefClear(virDomainOSDef *os) } =20 =20 +static void +virDomainHypervFeaturesClear(virDomainHypervFeatures *hv) +{ + g_free(hv->vendor_id); +} + + void virDomainDefFree(virDomainDef *def) { size_t i; @@ -4147,8 +4154,8 @@ void virDomainDefFree(virDomainDef *def) g_free(def->emulator); g_free(def->description); g_free(def->title); + virDomainHypervFeaturesClear(&def->hyperv); g_free(def->kvm_features); - g_free(def->hyperv_vendor_id); g_free(def->tcg_features); =20 virBlkioDeviceArrayClear(def->blkio.devices, @@ -17049,7 +17056,7 @@ virDomainFeaturesHyperVDefParse(virDomainDef *def, &value) < 0) return -1; =20 - def->hyperv_features[feature] =3D value; + def->hyperv.features[feature] =3D value; =20 switch ((virDomainHyperv) feature) { case VIR_DOMAIN_HYPERV_RELAXED: @@ -17075,11 +17082,11 @@ virDomainFeaturesHyperVDefParse(virDomainDef *def, while (child) { if (STREQ((const char *)child->name, "direct")) { if (virXMLPropTristateSwitch(child, "state", VIR_XML_P= ROP_REQUIRED, - &def->hyperv_tlbflush_dir= ect) < 0) + &def->hyperv.tlbflush_dir= ect) < 0) return -1; } else if (STREQ((const char *)child->name, "extended")) { if (virXMLPropTristateSwitch(child, "state", VIR_XML_P= ROP_REQUIRED, - &def->hyperv_tlbflush_ext= ended) < 0) + &def->hyperv.tlbflush_ext= ended) < 0) return -1; } else { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, @@ -17106,7 +17113,7 @@ virDomainFeaturesHyperVDefParse(virDomainDef *def, } =20 if (virXMLPropTristateSwitch(child, "state", VIR_XML_PROP_= REQUIRED, - &def->hyperv_stimer_direct) <= 0) + &def->hyperv.stimer_direct) <= 0) return -1; =20 child =3D xmlNextElementSibling(child); @@ -17118,10 +17125,10 @@ virDomainFeaturesHyperVDefParse(virDomainDef *def, break; =20 if (virXMLPropUInt(node, "retries", 0, VIR_XML_PROP_REQUIRED, - &def->hyperv_spinlocks) < 0) + &def->hyperv.spinlocks) < 0) return -1; =20 - if (def->hyperv_spinlocks < 0xFFF) { + if (def->hyperv.spinlocks < 0xFFF) { virReportError(VIR_ERR_XML_ERROR, "%s", _("HyperV spinlock retry count must be at l= east 4095")); return -1; @@ -17132,15 +17139,15 @@ virDomainFeaturesHyperVDefParse(virDomainDef *def, if (value !=3D VIR_TRISTATE_SWITCH_ON) break; =20 - g_clear_pointer(&def->hyperv_vendor_id, g_free); + g_clear_pointer(&def->hyperv.vendor_id, g_free); =20 - if (!(def->hyperv_vendor_id =3D virXMLPropString(node, "value"= ))) { + if (!(def->hyperv.vendor_id =3D virXMLPropString(node, "value"= ))) { virReportError(VIR_ERR_XML_ERROR, "%s", _("missing 'value' attribute for HyperV fea= ture 'vendor_id'")); return -1; } =20 - if (!STRLIM(def->hyperv_vendor_id, VIR_DOMAIN_HYPERV_VENDOR_ID= _MAX)) { + if (!STRLIM(def->hyperv.vendor_id, VIR_DOMAIN_HYPERV_VENDOR_ID= _MAX)) { virReportError(VIR_ERR_XML_ERROR, _("HyperV vendor_id value must not be more = than %1$d characters."), VIR_DOMAIN_HYPERV_VENDOR_ID_MAX); @@ -17148,7 +17155,7 @@ virDomainFeaturesHyperVDefParse(virDomainDef *def, } =20 /* ensure that the string can be passed to qemu */ - if (strchr(def->hyperv_vendor_id, ',')) { + if (strchr(def->hyperv.vendor_id, ',')) { virReportError(VIR_ERR_XML_ERROR, "%s", _("HyperV vendor_id value is invalid")); return -1; @@ -21641,12 +21648,12 @@ virDomainDefFeaturesCheckABIStability(virDomainDe= f *src, case VIR_DOMAIN_HYPERV_AVIC: case VIR_DOMAIN_HYPERV_EMSR_BITMAP: case VIR_DOMAIN_HYPERV_XMM_INPUT: - if (src->hyperv_features[i] !=3D dst->hyperv_features[i]) { + if (src->hyperv.features[i] !=3D dst->hyperv.features[i]) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("State of HyperV enlightenment featur= e '%1$s' differs: source: '%2$s', destination: '%3$s'"), virDomainHypervTypeToString(i), - virTristateSwitchTypeToString(src->hype= rv_features[i]), - virTristateSwitchTypeToString(dst->hype= rv_features[i])); + virTristateSwitchTypeToString(src->hype= rv.features[i]), + virTristateSwitchTypeToString(dst->hype= rv.features[i])); return false; } =20 @@ -21654,21 +21661,21 @@ virDomainDefFeaturesCheckABIStability(virDomainDe= f *src, =20 case VIR_DOMAIN_HYPERV_SPINLOCKS: /* spinlock count matters! */ - if (src->hyperv_spinlocks !=3D dst->hyperv_spinlocks) { + if (src->hyperv.spinlocks !=3D dst->hyperv.spinlocks) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("HyperV spinlock retry count differs:= source: '%1$u', destination: '%2$u'"), - src->hyperv_spinlocks, - dst->hyperv_spinlocks); + src->hyperv.spinlocks, + dst->hyperv.spinlocks); return false; } break; =20 case VIR_DOMAIN_HYPERV_VENDOR_ID: - if (STRNEQ_NULLABLE(src->hyperv_vendor_id, dst->hyperv_ven= dor_id)) { + if (STRNEQ_NULLABLE(src->hyperv.vendor_id, dst->hyperv.ven= dor_id)) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("HyperV vendor_id differs: source: '%= 1$s', destination: '%2$s'"), - src->hyperv_vendor_id, - dst->hyperv_vendor_id); + src->hyperv.vendor_id, + dst->hyperv.vendor_id); return false; } break; @@ -21679,12 +21686,12 @@ virDomainDefFeaturesCheckABIStability(virDomainDe= f *src, } } =20 - if (src->hyperv_features[VIR_DOMAIN_HYPERV_STIMER] =3D=3D VIR_TRISTATE= _SWITCH_ON) { - if (src->hyperv_stimer_direct !=3D dst->hyperv_stimer_direct) { + if (src->hyperv.features[VIR_DOMAIN_HYPERV_STIMER] =3D=3D VIR_TRISTATE= _SWITCH_ON) { + if (src->hyperv.stimer_direct !=3D dst->hyperv.stimer_direct) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("State of HyperV stimer direct feature differ= s: source: '%1$s', destination: '%2$s'"), - virTristateSwitchTypeToString(src->hyperv_stime= r_direct), - virTristateSwitchTypeToString(dst->hyperv_stime= r_direct)); + virTristateSwitchTypeToString(src->hyperv.stime= r_direct), + virTristateSwitchTypeToString(dst->hyperv.stime= r_direct)); return false; } } @@ -28599,11 +28606,11 @@ virDomainFeaturesHyperVDefFormat(virBuffer *buf, g_auto(virBuffer) hypervAttrBuf =3D VIR_BUFFER_INITIALIZER; g_auto(virBuffer) hypervChildBuf =3D VIR_BUFFER_INIT_CHILD(&childB= uf); =20 - if (def->hyperv_features[j] =3D=3D VIR_TRISTATE_SWITCH_ABSENT) + if (def->hyperv.features[j] =3D=3D VIR_TRISTATE_SWITCH_ABSENT) continue; =20 virBufferAsprintf(&hypervAttrBuf, " state=3D'%s'", - virTristateSwitchTypeToString(def->hyperv_featur= es[j])); + virTristateSwitchTypeToString(def->hyperv.featur= es[j])); =20 switch ((virDomainHyperv) j) { case VIR_DOMAIN_HYPERV_RELAXED: @@ -28622,34 +28629,34 @@ virDomainFeaturesHyperVDefFormat(virBuffer *buf, break; =20 case VIR_DOMAIN_HYPERV_SPINLOCKS: - if (def->hyperv_features[j] =3D=3D VIR_TRISTATE_SWITCH_ON) { + if (def->hyperv.features[j] =3D=3D VIR_TRISTATE_SWITCH_ON) { virBufferAsprintf(&hypervAttrBuf, - " retries=3D'%d'", def->hyperv_spinlocks= ); + " retries=3D'%d'", def->hyperv.spinlocks= ); } break; =20 case VIR_DOMAIN_HYPERV_STIMER: - if (def->hyperv_features[j] =3D=3D VIR_TRISTATE_SWITCH_ON && - def->hyperv_stimer_direct =3D=3D VIR_TRISTATE_SWITCH_ON) { + if (def->hyperv.features[j] =3D=3D VIR_TRISTATE_SWITCH_ON && + def->hyperv.stimer_direct =3D=3D VIR_TRISTATE_SWITCH_ON) { virBufferAddLit(&hypervChildBuf, "\n= "); } =20 break; =20 case VIR_DOMAIN_HYPERV_VENDOR_ID: - if (def->hyperv_features[j] =3D=3D VIR_TRISTATE_SWITCH_ON) { + if (def->hyperv.features[j] =3D=3D VIR_TRISTATE_SWITCH_ON) { virBufferEscapeString(&hypervAttrBuf, " value=3D'%s'", - def->hyperv_vendor_id); + def->hyperv.vendor_id); } break; =20 case VIR_DOMAIN_HYPERV_TLBFLUSH: - if (def->hyperv_features[j] !=3D VIR_TRISTATE_SWITCH_ON) + if (def->hyperv.features[j] !=3D VIR_TRISTATE_SWITCH_ON) break; =20 - if (def->hyperv_tlbflush_direct =3D=3D VIR_TRISTATE_SWITCH_ON) + if (def->hyperv.tlbflush_direct =3D=3D VIR_TRISTATE_SWITCH_ON) virBufferAddLit(&hypervChildBuf, "\n= "); - if (def->hyperv_tlbflush_extended =3D=3D VIR_TRISTATE_SWITCH_O= N) + if (def->hyperv.tlbflush_extended =3D=3D VIR_TRISTATE_SWITCH_O= N) virBufferAddLit(&hypervChildBuf, "= \n"); break; =20 diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 39807b5fe3..fe6ea63bd9 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3124,6 +3124,14 @@ struct _virDomainPstoreDef { virDomainDeviceInfo info; }; =20 +struct _virDomainHypervFeatures { + int features[VIR_DOMAIN_HYPERV_LAST]; + unsigned int spinlocks; + virTristateSwitch stimer_direct; + virTristateSwitch tlbflush_direct; + virTristateSwitch tlbflush_extended; + char *vendor_id; +}; =20 #define SCSI_SUPER_WIDE_BUS_MAX_CONT_UNIT 64 #define SCSI_WIDE_BUS_MAX_CONT_UNIT 16 @@ -3195,19 +3203,14 @@ struct _virDomainDef { * See virDomainDefFeaturesCheckABIStability() for details. */ int features[VIR_DOMAIN_FEATURE_LAST]; int caps_features[VIR_DOMAIN_PROCES_CAPS_FEATURE_LAST]; - int hyperv_features[VIR_DOMAIN_HYPERV_LAST]; + virDomainHypervFeatures hyperv; virDomainFeatureKVM *kvm_features; int msrs_features[VIR_DOMAIN_MSRS_LAST]; int xen_features[VIR_DOMAIN_XEN_LAST]; virDomainXenPassthroughMode xen_passthrough_mode; - unsigned int hyperv_spinlocks; - virTristateSwitch hyperv_stimer_direct; - virTristateSwitch hyperv_tlbflush_direct; - virTristateSwitch hyperv_tlbflush_extended; virGICVersion gic_version; virDomainHPTResizing hpt_resizing; unsigned long long hpt_maxpagesize; /* Stored in KiB */ - char *hyperv_vendor_id; virTristateSwitch apic_eoi; virDomainFeatureTCG *tcg_features; =20 diff --git a/src/conf/virconftypes.h b/src/conf/virconftypes.h index 93fc9c9217..6e2573035a 100644 --- a/src/conf/virconftypes.h +++ b/src/conf/virconftypes.h @@ -142,6 +142,8 @@ typedef struct _virDomainHubDef virDomainHubDef; =20 typedef struct _virDomainHugePage virDomainHugePage; =20 +typedef struct _virDomainHypervFeatures virDomainHypervFeatures; + typedef struct _virDomainIOMMUDef virDomainIOMMUDef; =20 typedef struct _virDomainIOThreadIDDef virDomainIOThreadIDDef; diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index 9395ac675e..875e9441a2 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -608,7 +608,7 @@ libxlMakeDomBuildInfo(virDomainDef *def, } =20 for (i =3D 0; i < VIR_DOMAIN_HYPERV_LAST; i++) { - if (def->hyperv_features[i] !=3D VIR_TRISTATE_SWITCH_ON) + if (def->hyperv.features[i] !=3D VIR_TRISTATE_SWITCH_ON) continue; =20 switch ((virDomainHyperv) i) { diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 9276d2d5d2..ffe24ae256 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -6492,7 +6492,7 @@ qemuBuildCpuHypervCommandLine(virBuffer *buf, case VIR_DOMAIN_HYPERV_AVIC: case VIR_DOMAIN_HYPERV_EMSR_BITMAP: case VIR_DOMAIN_HYPERV_XMM_INPUT: - if (def->hyperv_features[i] =3D=3D VIR_TRISTATE_SWITCH_ON) { + if (def->hyperv.features[i] =3D=3D VIR_TRISTATE_SWITCH_ON) { const char *name =3D virDomainHypervTypeToString(i); g_autofree char *full_name =3D g_strdup_printf("hv-%s", na= me); const char *qemu_name =3D virQEMUCapsCPUFeatureToQEMU(def-= >os.arch, @@ -6500,27 +6500,27 @@ qemuBuildCpuHypervCommandLine(virBuffer *buf, virBufferAsprintf(buf, ",%s=3Don", qemu_name); } if ((i =3D=3D VIR_DOMAIN_HYPERV_STIMER) && - (def->hyperv_stimer_direct =3D=3D VIR_TRISTATE_SWITCH_ON)) + (def->hyperv.stimer_direct =3D=3D VIR_TRISTATE_SWITCH_ON)) virBufferAsprintf(buf, ",%s=3Don", VIR_CPU_x86_HV_STIMER_D= IRECT); if (i =3D=3D VIR_DOMAIN_HYPERV_TLBFLUSH) { - if (def->hyperv_tlbflush_direct =3D=3D VIR_TRISTATE_SWITCH= _ON) + if (def->hyperv.tlbflush_direct =3D=3D VIR_TRISTATE_SWITCH= _ON) virBufferAsprintf(buf, ",%s=3Don", VIR_CPU_x86_HV_TLBF= LUSH_DIRECT); - if (def->hyperv_tlbflush_extended =3D=3D VIR_TRISTATE_SWIT= CH_ON) + if (def->hyperv.tlbflush_extended =3D=3D VIR_TRISTATE_SWIT= CH_ON) virBufferAsprintf(buf, ",%s=3Don", VIR_CPU_x86_HV_TLBF= LUSH_EXT); } break; =20 case VIR_DOMAIN_HYPERV_SPINLOCKS: - if (def->hyperv_features[i] =3D=3D VIR_TRISTATE_SWITCH_ON) + if (def->hyperv.features[i] =3D=3D VIR_TRISTATE_SWITCH_ON) virBufferAsprintf(buf, ",%s=3D0x%x", VIR_CPU_x86_HV_SPINLOCKS, - def->hyperv_spinlocks); + def->hyperv.spinlocks); break; =20 case VIR_DOMAIN_HYPERV_VENDOR_ID: - if (def->hyperv_features[i] =3D=3D VIR_TRISTATE_SWITCH_ON) + if (def->hyperv.features[i] =3D=3D VIR_TRISTATE_SWITCH_ON) virBufferAsprintf(buf, ",hv-vendor-id=3D%s", - def->hyperv_vendor_id); + def->hyperv.vendor_id); break; =20 case VIR_DOMAIN_HYPERV_LAST: diff --git a/src/qemu/qemu_process.c b/src/qemu/qemu_process.c index ead5bf3e48..02a03a7ce2 100644 --- a/src/qemu/qemu_process.c +++ b/src/qemu/qemu_process.c @@ -4418,7 +4418,7 @@ qemuProcessVerifyHypervFeatures(virDomainDef *def, i =3D=3D VIR_DOMAIN_HYPERV_SPINLOCKS) continue; =20 - if (def->hyperv_features[i] !=3D VIR_TRISTATE_SWITCH_ON) + if (def->hyperv.features[i] !=3D VIR_TRISTATE_SWITCH_ON) continue; =20 cpuFeature =3D g_strdup_printf("hv-%s", virDomainHypervTypeToStrin= g(i)); @@ -4429,7 +4429,7 @@ qemuProcessVerifyHypervFeatures(virDomainDef *def, return -1; } else if (rc =3D=3D 1) { if (i =3D=3D VIR_DOMAIN_HYPERV_STIMER) { - if (def->hyperv_stimer_direct !=3D VIR_TRISTATE_SWITCH_ON) + if (def->hyperv.stimer_direct !=3D VIR_TRISTATE_SWITCH_ON) continue; =20 rc =3D virCPUDataCheckFeature(cpu, VIR_CPU_x86_HV_STIMER_D= IRECT); @@ -4444,7 +4444,7 @@ qemuProcessVerifyHypervFeatures(virDomainDef *def, return -1; } if (i =3D=3D VIR_DOMAIN_HYPERV_TLBFLUSH) { - if (def->hyperv_tlbflush_direct =3D=3D VIR_TRISTATE_SWITCH= _ON) { + if (def->hyperv.tlbflush_direct =3D=3D VIR_TRISTATE_SWITCH= _ON) { rc =3D virCPUDataCheckFeature(cpu, VIR_CPU_x86_HV_TLBF= LUSH_DIRECT); if (rc < 0) return -1; @@ -4455,7 +4455,7 @@ qemuProcessVerifyHypervFeatures(virDomainDef *def, return -1; } } - if (def->hyperv_tlbflush_extended =3D=3D VIR_TRISTATE_SWIT= CH_ON) { + if (def->hyperv.tlbflush_extended =3D=3D VIR_TRISTATE_SWIT= CH_ON) { rc =3D virCPUDataCheckFeature(cpu, VIR_CPU_x86_HV_TLBF= LUSH_EXT); if (rc < 0) return -1; --=20 2.49.1