From nobody Wed Oct 22 12:19:35 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=1759929956; cv=none; d=zohomail.com; s=zohoarc; b=IQNwICcd78l8RaJDHJwyFnzda5bg3HIUNVcQfYntEOMbG1hg0puO9yhoeuLAa9MGsj1kDgo3pyMptVWtZ5+asCu7a6KJYTxQsLOuRUHUFNZU0UnVCQfjVtvyF25kSjHhFku60L0Kn8LwT62m8HiSdBzhLMmUc8Jj1I/6vvHtgXE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1759929956; 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=tM0WBl1PeFxziEkGB3cE/FG2drfj1b+2tLW0IVrV+nE=; b=SubzhfflktkrWH8/aUIuXSW+BwsWMB8u6nj2pJ7lPAel9jhnLvrjH3RuAET5EkCeYA03p6YYm5svHHNytwuldOBA6B75hePkZk3085XDU0+WYD2hHCtJt4ImZrbm8AEzjjcwhBLYRZ8UlEk2mBuu7feWPQFSP0CrY9bJPhlTZms= 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 1759929956283455.1497388301965; Wed, 8 Oct 2025 06:25:56 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 993) id ABB1741C3A; Wed, 8 Oct 2025 09:25:55 -0400 (EDT) Received: from [172.19.199.17] (lists.libvirt.org [8.43.85.245]) by lists.libvirt.org (Postfix) with ESMTP id AC735446FE; Wed, 8 Oct 2025 09:17:57 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 993) id 8A7E844144; Wed, 8 Oct 2025 08:55:43 -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 93B5844268 for ; Wed, 8 Oct 2025 08:54:32 -0400 (EDT) Received: from mx-prod-mc-06.mail-002.prod.us-west-2.aws.redhat.com (ec2-35-165-154-97.us-west-2.compute.amazonaws.com [35.165.154.97]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-490-Scw9GUWdPyed9p24vtxUvw-1; Wed, 08 Oct 2025 08:54:30 -0400 Received: from mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.12]) (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-06.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 2A673180057E for ; Wed, 8 Oct 2025 12:54:30 +0000 (UTC) Received: from localhost.localdomain (unknown [10.43.3.236]) by mx-prod-int-03.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 63A4919560A2 for ; Wed, 8 Oct 2025 12:54:29 +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=1759928072; 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=tM0WBl1PeFxziEkGB3cE/FG2drfj1b+2tLW0IVrV+nE=; b=ePiXFN79sNG9DRW5qjqr6nHswlMHs8BWxsJOTmVkDtcJ0EwVoUHwPEGrsXhLx/U7XVexsN 07ouLz9ncIUZOJE5YJPsvDYfxe4pNBjHF7ckY5v5hja/9YxYNemrjjCxry7avAqEOQBern 1FoHv8VxQ+ck6gU2Ruw0KXD77jXw92M= X-MC-Unique: Scw9GUWdPyed9p24vtxUvw-1 X-Mimecast-MFC-AGG-ID: Scw9GUWdPyed9p24vtxUvw_1759928070 To: devel@lists.libvirt.org Subject: [PATCH v2 21/29] conf: More hyperv related members into a single struct Date: Wed, 8 Oct 2025 14:53:53 +0200 Message-ID: In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.12 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: pWnqHZdWhpbG7B4QIY_AhwmZNP-_eRuGr0MAiS5GfOo_1759928070 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: MX7667Y3SRIIS53QEE2G7Y4EG5SGYLSD X-Message-ID-Hash: MX7667Y3SRIIS53QEE2G7Y4EG5SGYLSD 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: 1759929958065154100 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 ++--- src/qemu/qemu_validate.c | 12 +++---- 7 files changed, 72 insertions(+), 60 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index d095454283..8c42f95af4 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 9159a69833..5e37ef7b0d 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 cea4bd801c..3962a7dba2 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 65b50740ce..7a31848d6f 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 57b14f640e..d42e3f612b 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; diff --git a/src/qemu/qemu_validate.c b/src/qemu/qemu_validate.c index 930ba3543f..3e8fdb2268 100644 --- a/src/qemu/qemu_validate.c +++ b/src/qemu/qemu_validate.c @@ -89,8 +89,8 @@ qemuValidateDomainDefPSeriesFeature(const virDomainDef *d= ef, =20 =20 #define CHECK_HV_FEAT(feat, requires) \ - if (def->hyperv_features[feat] =3D=3D VIR_TRISTATE_SWITCH_ON && \ - def->hyperv_features[requires] !=3D VIR_TRISTATE_SWITCH_ON) { \ + if (def->hyperv.features[feat] =3D=3D VIR_TRISTATE_SWITCH_ON && \ + def->hyperv.features[requires] !=3D VIR_TRISTATE_SWITCH_ON) { \ virReportError(VIR_ERR_CONFIG_UNSUPPORTED, \ _("'%1$s' hyperv feature requires '%2$s' feature"),= \ virDomainHypervTypeToString(feat), \ @@ -114,7 +114,7 @@ qemuValidateDomainDefHypervFeatures(const virDomainDef = *def) =20 CHECK_HV_FEAT(VIR_DOMAIN_HYPERV_SYNIC, VIR_DOMAIN_HYPERV_VPINDEX); =20 - if (def->hyperv_features[VIR_DOMAIN_HYPERV_STIMER] =3D=3D VIR_TRISTATE= _SWITCH_ON) { + if (def->hyperv.features[VIR_DOMAIN_HYPERV_STIMER] =3D=3D VIR_TRISTATE= _SWITCH_ON) { if (!virDomainDefHasTimer(def, VIR_DOMAIN_TIMER_NAME_HYPERVCLOCK))= { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("'%1$s' hyperv feature requires '%2$s' timer"= ), @@ -133,9 +133,9 @@ qemuValidateDomainDefHypervFeatures(const virDomainDef = *def) =20 CHECK_HV_FEAT(VIR_DOMAIN_HYPERV_EVMCS, VIR_DOMAIN_HYPERV_VAPIC); =20 - if (def->hyperv_features[VIR_DOMAIN_HYPERV_TLBFLUSH] =3D=3D VIR_TRISTA= TE_SWITCH_ON && - def->hyperv_tlbflush_direct =3D=3D VIR_TRISTATE_SWITCH_ON) { - if (def->hyperv_features[VIR_DOMAIN_HYPERV_VAPIC] !=3D VIR_TRISTAT= E_SWITCH_ON) { + if (def->hyperv.features[VIR_DOMAIN_HYPERV_TLBFLUSH] =3D=3D VIR_TRISTA= TE_SWITCH_ON && + def->hyperv.tlbflush_direct =3D=3D VIR_TRISTATE_SWITCH_ON) { + if (def->hyperv.features[VIR_DOMAIN_HYPERV_VAPIC] !=3D VIR_TRISTAT= E_SWITCH_ON) { virReportError(VIR_ERR_CONFIG_UNSUPPORTED, _("'%1$s' hyperv feature requires '%2$s' featur= e"), VIR_CPU_x86_HV_TLBFLUSH_DIRECT, --=20 2.49.1