From nobody Mon Feb 9 16:18:30 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) client-ip=192.237.175.120; envelope-from=xen-devel-bounces@lists.xenproject.org; helo=lists.xenproject.org; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass(p=reject dis=none) header.from=citrix.com ARC-Seal: i=1; a=rsa-sha256; t=1680123139; cv=none; d=zohomail.com; s=zohoarc; b=K6IhuoC00zVXHxOUM2p2T591NmJJrCzDuiyCnQcI1lCO1E+YoU+OIMYWCLMGxlFlqH3b/pNX+C6hpElLhCsvajoSqY7JhQzgmBMOWl3gDIdBF3Odp4DR1ayH9xKQiwCGPJW7GNC+IH8Tw6CHYHDBucBlGp1zBfiu0aqB0dubvS8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1680123139; h=Content-Type:Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=vpTQMhnuxXo2/78qvUrkI6Kg/oxKbE85+5hRET/79AQ=; b=PAtK4uJ/3zKEE0yqZnZrj6xI1FnqgAKsOhA/qY3AilmJoSWmAQg9HskS3HVwfkYSf3cE+WqE0PZebl9tEvuRW4qwG3DW6LzDSG+/s2bALzByYWiMaBwu4047TAyv0GYxIt7OJ/SzE9DN1R5jrB578trBVRHG43tgt0BqCSdnK1g= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of lists.xenproject.org designates 192.237.175.120 as permitted sender) smtp.mailfrom=xen-devel-bounces@lists.xenproject.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) by mx.zohomail.com with SMTPS id 1680123139530912.3196247973999; Wed, 29 Mar 2023 13:52:19 -0700 (PDT) Received: from list by lists.xenproject.org with outflank-mailman.516347.800304 (Exim 4.92) (envelope-from ) id 1phclp-0005Ne-D2; Wed, 29 Mar 2023 20:51:49 +0000 Received: by outflank-mailman (output) from mailman id 516347.800304; Wed, 29 Mar 2023 20:51:49 +0000 Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1phclp-0005N3-8O; Wed, 29 Mar 2023 20:51:49 +0000 Received: by outflank-mailman (input) for mailman id 516347; Wed, 29 Mar 2023 20:51:48 +0000 Received: from se1-gles-flk1-in.inumbo.com ([94.247.172.50] helo=se1-gles-flk1.inumbo.com) by lists.xenproject.org with esmtp (Exim 4.92) (envelope-from ) id 1phclo-0005Jv-Ek for xen-devel@lists.xenproject.org; Wed, 29 Mar 2023 20:51:48 +0000 Received: from esa3.hc3370-68.iphmx.com (esa3.hc3370-68.iphmx.com [216.71.145.155]) by se1-gles-flk1.inumbo.com (Halon) with ESMTPS id 8313cab4-ce73-11ed-b464-930f4c7d94ae; Wed, 29 Mar 2023 22:51:45 +0200 (CEST) X-Outflank-Mailman: Message body and most headers restored to incoming version X-BeenThere: xen-devel@lists.xenproject.org List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Precedence: list Sender: "Xen-devel" X-Inumbo-ID: 8313cab4-ce73-11ed-b464-930f4c7d94ae DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1680123105; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=raoiTPIVEhjF7vT5N1JRCacx7iW6LptTnC0J47F8mRM=; b=RX3DDa3Fg2P9F58tKbVPNFo/8CvcjY2GHe0Fbw2RhUbCtbfOMPGJvEhL ZplGiqQsRGMkL+fLMM207qSAoJamiZSvnFRYs83UirCCJ0aBHU7Pmo45F T9rTxM7Cy3WV3xHlVhwi3Od8ZARUiR41SUTuFRFHhiVZkvP4rQGOXyfSQ 0=; Authentication-Results: esa3.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none X-SBRS: 4.0 X-MesageID: 103609849 X-Ironport-Server: esa3.hc3370-68.iphmx.com X-Remote-IP: 162.221.156.123 X-Policy: $RELAYED IronPort-Data: A9a23:wnQ1pKnFCoocOOHpHqwGpCDo5gz7JkRdPkR7XQ2eYbSJt1+Wr1Gzt xJKXDuEPqnbY2OnfYolao2+9ksGuMXRz4c2T1Fq/igxFyMWpZLJC+rCIxarNUt+DCFhoGFPt JxCN4aafKjYaleG+39B55C49SEUOZmgH+a6U6icfHgqH2eIcQ954Tp7gek1n4V0ttawBgKJq LvartbWfVSowFaYCEpNg064gE4p7aSaVA8w5ARkPqgQ5g6GzRH5MbpETU2PByqgKmVrNrbSq 9brlNmR4m7f9hExPdKp+p6TnpoiG+O60aCm0xK6aoD66vRwjnVaPpUTbZLwXXx/mTSR9+2d/ f0W3XCGpaXFCYWX8AgVe0Ew/yiTpsSq8pefSZS0mZT7I0Er7xIAahihZa07FdRwxwp5PY1B3 dAFCioCUFe7vf315IqrQK5dmdUyKeC+aevzulk4pd3YJfMvQJSFSKTW/95Imjw3g6iiH96HO ZBfM2A2Kk2dPVsWYAx/5JEWxY9EglHWdTFCpU3Tjq0w+2XJlyR60aT3McqTcduPLSlQth/A/ TyerjSlU3n2MvSg5X2kyGKQhNTduirLXoRVE57/9qRD1Qj7Kms7V0RNCArTTeOColG6c8JSL QoT4CVGhbg/8gmnQ8fwWzW8oWWYpVgMVtxICeo45QqRjK3O7G6xJEIJUzpAY9wOr9ItSHoh0 Vrhoj/yLWUx6vvPEyvbr+rK62roYkD5MFPuewcoUCkf7OekmLsszTb3XtwkIbGkn9jcTGSYL y+xkMQuu1kCpZdViPTqrQCb32LESovhFVBsuFiONo6xxkYgPdP+OdT1gbTOxawYRLt1WGVtq 5TtdyK2yOkVRa+AmyWWKAnmNOH4vq3VWNEwbLMGInXAy9hO0yT5FWyoyGsiTHqFy+5dEdMTX GfduBlK+LhYN2awYKl8buqZUpp6lfG5SYq6CKCKMLKih6SdkifdpEmCgmbOt10BbWB2yf1vU XtlWZ3E4Ykm5VRPk2PtGrZ1PU4DzSEi32LDLa3GI+Cc+ePGPha9EO5VWGZim8hltMtoVi2Jq YcAXyZLoj0DONDDjt7/qtBDcA9WdSFjXPgbaaV/L4a+H+avI0l5Y9e5/F/rU9YNc3h9/gsQw kyAZw== IronPort-HdrOrdr: A9a23:sKti+6zNbgcdxPUMM6DhKrPw6L1zdoMgy1knxilNoHxuH/Bw9v re+cjzsCWftN9/Yh4dcLy7VpVoIkmsl6Kdg7NwAV7KZmCP1FdARLsI0WKI+UyCJ8SRzI9gPa cLSdkFNDXzZ2IK8PoTNmODYqodKNrsytHWuQ/HpU0dKT2D88tbnn9E4gDwKDwQeCB2QaAXOb C7/cR9qz+paR0sH7+G7ilsZZmkmzXT/qiWGCI7Ow== X-IronPort-AV: E=Sophos;i="5.98,301,1673931600"; d="scan'208";a="103609849" From: Andrew Cooper To: Xen-devel CC: Andrew Cooper , Jan Beulich , =?UTF-8?q?Roger=20Pau=20Monn=C3=A9?= , Wei Liu Subject: [PATCH 7/9] x86: Merge xc_cpu_policy's cpuid and msr objects Date: Wed, 29 Mar 2023 21:51:35 +0100 Message-ID: <20230329205137.323253-8-andrew.cooper3@citrix.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20230329205137.323253-1-andrew.cooper3@citrix.com> References: <20230329205137.323253-1-andrew.cooper3@citrix.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @citrix.com) X-ZM-MESSAGEID: 1680123140731100006 Right now, they're the same underlying type, containing disjoint informatio= n. Use a single object instead. Also take the opportunity to rename 'entries'= to 'msrs' which is more descriptive, and more in line with nr_msrs being the count of MSR entries in the API. test-tsx uses xg_private.h to access the internals of xc_cpu_policy, so nee= ds updating at the same time. No practical change, but it does reduce the size of struct xc_cpu_policy by ~2k. Signed-off-by: Andrew Cooper --- CC: Jan Beulich CC: Roger Pau Monn=C3=A9 CC: Wei Liu --- tools/libs/guest/xg_cpuid_x86.c | 36 ++++++++++---------- tools/libs/guest/xg_private.h | 5 ++- tools/tests/tsx/test-tsx.c | 58 ++++++++++++++++----------------- 3 files changed, 48 insertions(+), 51 deletions(-) diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x8= 6.c index 5fae06e77804..5061fe357767 100644 --- a/tools/libs/guest/xg_cpuid_x86.c +++ b/tools/libs/guest/xg_cpuid_x86.c @@ -431,7 +431,7 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t d= omid, bool restore, xc_dominfo_t di; unsigned int i, nr_leaves, nr_msrs; xen_cpuid_leaf_t *leaves =3D NULL; - struct cpuid_policy *p =3D NULL; + struct cpu_policy *p =3D NULL; uint32_t err_leaf =3D -1, err_subleaf =3D -1, err_msr =3D -1; uint32_t host_featureset[FEATURESET_NR_ENTRIES] =3D {}; uint32_t len =3D ARRAY_SIZE(host_featureset); @@ -692,7 +692,7 @@ static int deserialize_policy(xc_interface *xch, xc_cpu= _policy_t *policy, uint32_t err_leaf =3D -1, err_subleaf =3D -1, err_msr =3D -1; int rc; =20 - rc =3D x86_cpuid_copy_from_buffer(&policy->cpuid, policy->leaves, + rc =3D x86_cpuid_copy_from_buffer(&policy->policy, policy->leaves, nr_leaves, &err_leaf, &err_subleaf); if ( rc ) { @@ -702,7 +702,7 @@ static int deserialize_policy(xc_interface *xch, xc_cpu= _policy_t *policy, return rc; } =20 - rc =3D x86_msr_copy_from_buffer(&policy->msr, policy->entries, + rc =3D x86_msr_copy_from_buffer(&policy->policy, policy->msrs, nr_entries, &err_msr); if ( rc ) { @@ -719,18 +719,18 @@ int xc_cpu_policy_get_system(xc_interface *xch, unsig= ned int policy_idx, xc_cpu_policy_t *policy) { unsigned int nr_leaves =3D ARRAY_SIZE(policy->leaves); - unsigned int nr_entries =3D ARRAY_SIZE(policy->entries); + unsigned int nr_msrs =3D ARRAY_SIZE(policy->msrs); int rc; =20 rc =3D get_system_cpu_policy(xch, policy_idx, &nr_leaves, policy->leav= es, - &nr_entries, policy->entries); + &nr_msrs, policy->msrs); if ( rc ) { PERROR("Failed to obtain %u policy", policy_idx); return rc; } =20 - rc =3D deserialize_policy(xch, policy, nr_leaves, nr_entries); + rc =3D deserialize_policy(xch, policy, nr_leaves, nr_msrs); if ( rc ) { errno =3D -rc; @@ -744,18 +744,18 @@ int xc_cpu_policy_get_domain(xc_interface *xch, uint3= 2_t domid, xc_cpu_policy_t *policy) { unsigned int nr_leaves =3D ARRAY_SIZE(policy->leaves); - unsigned int nr_entries =3D ARRAY_SIZE(policy->entries); + unsigned int nr_msrs =3D ARRAY_SIZE(policy->msrs); int rc; =20 rc =3D get_domain_cpu_policy(xch, domid, &nr_leaves, policy->leaves, - &nr_entries, policy->entries); + &nr_msrs, policy->msrs); if ( rc ) { PERROR("Failed to obtain domain %u policy", domid); return rc; } =20 - rc =3D deserialize_policy(xch, policy, nr_leaves, nr_entries); + rc =3D deserialize_policy(xch, policy, nr_leaves, nr_msrs); if ( rc ) { errno =3D -rc; @@ -770,16 +770,16 @@ int xc_cpu_policy_set_domain(xc_interface *xch, uint3= 2_t domid, { uint32_t err_leaf =3D -1, err_subleaf =3D -1, err_msr =3D -1; unsigned int nr_leaves =3D ARRAY_SIZE(policy->leaves); - unsigned int nr_entries =3D ARRAY_SIZE(policy->entries); + unsigned int nr_msrs =3D ARRAY_SIZE(policy->msrs); int rc; =20 rc =3D xc_cpu_policy_serialise(xch, policy, policy->leaves, &nr_leaves, - policy->entries, &nr_entries); + policy->msrs, &nr_msrs); if ( rc ) return rc; =20 rc =3D xc_set_domain_cpu_policy(xch, domid, nr_leaves, policy->leaves, - nr_entries, policy->entries, + nr_msrs, policy->msrs, &err_leaf, &err_subleaf, &err_msr); if ( rc ) { @@ -802,7 +802,7 @@ int xc_cpu_policy_serialise(xc_interface *xch, const xc= _cpu_policy_t *p, =20 if ( leaves ) { - rc =3D x86_cpuid_copy_to_buffer(&p->cpuid, leaves, nr_leaves); + rc =3D x86_cpuid_copy_to_buffer(&p->policy, leaves, nr_leaves); if ( rc ) { ERROR("Failed to serialize CPUID policy"); @@ -813,7 +813,7 @@ int xc_cpu_policy_serialise(xc_interface *xch, const xc= _cpu_policy_t *p, =20 if ( msrs ) { - rc =3D x86_msr_copy_to_buffer(&p->msr, msrs, nr_msrs); + rc =3D x86_msr_copy_to_buffer(&p->policy, msrs, nr_msrs); if ( rc ) { ERROR("Failed to serialize MSR policy"); @@ -831,7 +831,7 @@ int xc_cpu_policy_update_cpuid(xc_interface *xch, xc_cp= u_policy_t *policy, uint32_t nr) { unsigned int err_leaf =3D -1, err_subleaf =3D -1; - int rc =3D x86_cpuid_copy_from_buffer(&policy->cpuid, leaves, nr, + int rc =3D x86_cpuid_copy_from_buffer(&policy->policy, leaves, nr, &err_leaf, &err_subleaf); =20 if ( rc ) @@ -850,7 +850,7 @@ int xc_cpu_policy_update_msrs(xc_interface *xch, xc_cpu= _policy_t *policy, const xen_msr_entry_t *msrs, uint32_t nr) { unsigned int err_msr =3D -1; - int rc =3D x86_msr_copy_from_buffer(&policy->msr, msrs, nr, &err_msr); + int rc =3D x86_msr_copy_from_buffer(&policy->policy, msrs, nr, &err_ms= r); =20 if ( rc ) { @@ -868,8 +868,8 @@ bool xc_cpu_policy_is_compatible(xc_interface *xch, xc_= cpu_policy_t *host, xc_cpu_policy_t *guest) { struct cpu_policy_errors err =3D INIT_CPU_POLICY_ERRORS; - struct old_cpu_policy h =3D { &host->cpuid, &host->msr }; - struct old_cpu_policy g =3D { &guest->cpuid, &guest->msr }; + struct old_cpu_policy h =3D { &host->policy, &host->policy }; + struct old_cpu_policy g =3D { &guest->policy, &guest->policy }; int rc =3D x86_cpu_policies_are_compatible(&h, &g, &err); =20 if ( !rc ) diff --git a/tools/libs/guest/xg_private.h b/tools/libs/guest/xg_private.h index 09e24f122760..e729a8106c3e 100644 --- a/tools/libs/guest/xg_private.h +++ b/tools/libs/guest/xg_private.h @@ -173,10 +173,9 @@ int pin_table(xc_interface *xch, unsigned int type, un= signed long mfn, #include =20 struct xc_cpu_policy { - struct cpuid_policy cpuid; - struct msr_policy msr; + struct cpu_policy policy; xen_cpuid_leaf_t leaves[CPUID_MAX_SERIALISED_LEAVES]; - xen_msr_entry_t entries[MSR_MAX_SERIALISED_ENTRIES]; + xen_msr_entry_t msrs[MSR_MAX_SERIALISED_ENTRIES]; }; #endif /* x86 */ =20 diff --git a/tools/tests/tsx/test-tsx.c b/tools/tests/tsx/test-tsx.c index d6d98c299bf9..6164cd86c466 100644 --- a/tools/tests/tsx/test-tsx.c +++ b/tools/tests/tsx/test-tsx.c @@ -151,15 +151,15 @@ static void test_tsx_msrs(void) { printf("Testing MSR_TSX_FORCE_ABORT consistency\n"); test_tsx_msr_consistency( - MSR_TSX_FORCE_ABORT, host.cpuid.feat.tsx_force_abort); + MSR_TSX_FORCE_ABORT, host.policy.feat.tsx_force_abort); =20 printf("Testing MSR_TSX_CTRL consistency\n"); test_tsx_msr_consistency( - MSR_TSX_CTRL, host.msr.arch_caps.tsx_ctrl); + MSR_TSX_CTRL, host.policy.arch_caps.tsx_ctrl); =20 printf("Testing MSR_MCU_OPT_CTRL consistency\n"); test_tsx_msr_consistency( - MSR_MCU_OPT_CTRL, host.cpuid.feat.srbds_ctrl); + MSR_MCU_OPT_CTRL, host.policy.feat.srbds_ctrl); } =20 /* @@ -281,7 +281,7 @@ static void test_rtm_behaviour(void) else return fail(" Got unexpected behaviour %d\n", rtm_behaviour); =20 - if ( host.cpuid.feat.rtm ) + if ( host.policy.feat.rtm ) { if ( rtm_behaviour =3D=3D RTM_UD ) fail(" Host reports RTM, but appears unavailable\n"); @@ -297,53 +297,51 @@ static void dump_tsx_details(const struct xc_cpu_poli= cy *p, const char *pref) { printf(" %s RTM %u, HLE %u, TSX_FORCE_ABORT %u, RTM_ALWAYS_ABORT %u, = TSX_CTRL %u\n", pref, - p->cpuid.feat.rtm, - p->cpuid.feat.hle, - p->cpuid.feat.tsx_force_abort, - p->cpuid.feat.rtm_always_abort, - p->msr.arch_caps.tsx_ctrl); + p->policy.feat.rtm, + p->policy.feat.hle, + p->policy.feat.tsx_force_abort, + p->policy.feat.rtm_always_abort, + p->policy.arch_caps.tsx_ctrl); } =20 /* Sanity test various invariants we expect in the default/max policies. */ static void test_guest_policies(const struct xc_cpu_policy *max, const struct xc_cpu_policy *def) { - const struct cpuid_policy *cm =3D &max->cpuid; - const struct cpuid_policy *cd =3D &def->cpuid; - const struct msr_policy *mm =3D &max->msr; - const struct msr_policy *md =3D &def->msr; + const struct cpu_policy *m =3D &max->policy; + const struct cpu_policy *d =3D &def->policy; =20 dump_tsx_details(max, "Max:"); dump_tsx_details(def, "Def:"); =20 - if ( ((cm->feat.raw[0].d | cd->feat.raw[0].d) & + if ( ((m->feat.raw[0].d | d->feat.raw[0].d) & (bitmaskof(X86_FEATURE_TSX_FORCE_ABORT) | bitmaskof(X86_FEATURE_RTM_ALWAYS_ABORT) | bitmaskof(X86_FEATURE_SRBDS_CTRL))) || - ((mm->arch_caps.raw | md->arch_caps.raw) & ARCH_CAPS_TSX_CTRL) ) + ((m->arch_caps.raw | d->arch_caps.raw) & ARCH_CAPS_TSX_CTRL) ) fail(" Xen-only TSX controls offered to guest\n"); =20 switch ( rtm_behaviour ) { case RTM_UD: - if ( (cm->feat.raw[0].b | cd->feat.raw[0].b) & + if ( (m->feat.raw[0].b | d->feat.raw[0].b) & (bitmaskof(X86_FEATURE_HLE) | bitmaskof(X86_FEATURE_RTM)) ) fail(" HLE/RTM offered to guests despite not being available= \n"); break; =20 case RTM_ABORT: - if ( cd->feat.raw[0].b & + if ( d->feat.raw[0].b & (bitmaskof(X86_FEATURE_HLE) | bitmaskof(X86_FEATURE_RTM)) ) fail(" HLE/RTM offered to guests by default despite not bein= g usable\n"); break; =20 case RTM_OK: - if ( !cm->feat.rtm || !cd->feat.rtm ) + if ( !m->feat.rtm || !d->feat.rtm ) fail(" RTM not offered to guests despite being available\n"); break; } =20 - if ( cd->feat.hle ) + if ( d->feat.hle ) fail(" Fail: HLE offered in default policy\n"); } =20 @@ -387,18 +385,18 @@ static void test_guest(struct xen_domctl_createdomain= *c) /* * Check defaults given to the guest. */ - if ( guest_policy.cpuid.feat.rtm !=3D (rtm_behaviour =3D=3D RTM_OK) ) + if ( guest_policy.policy.feat.rtm !=3D (rtm_behaviour =3D=3D RTM_OK) ) fail(" RTM %u in guest, despite rtm behaviour\n", - guest_policy.cpuid.feat.rtm); + guest_policy.policy.feat.rtm); =20 - if ( guest_policy.cpuid.feat.hle || - guest_policy.cpuid.feat.tsx_force_abort || - guest_policy.cpuid.feat.rtm_always_abort || - guest_policy.cpuid.feat.srbds_ctrl || - guest_policy.msr.arch_caps.tsx_ctrl ) + if ( guest_policy.policy.feat.hle || + guest_policy.policy.feat.tsx_force_abort || + guest_policy.policy.feat.rtm_always_abort || + guest_policy.policy.feat.srbds_ctrl || + guest_policy.policy.arch_caps.tsx_ctrl ) fail(" Unexpected features advertised\n"); =20 - if ( host.cpuid.feat.rtm ) + if ( host.policy.feat.rtm ) { unsigned int _7b0; =20 @@ -406,7 +404,7 @@ static void test_guest(struct xen_domctl_createdomain *= c) * If host RTM is available, all combinations of guest flags shoul= d be * possible. Flip both HLE/RTM to check non-default settings. */ - _7b0 =3D (guest_policy.cpuid.feat.raw[0].b ^=3D + _7b0 =3D (guest_policy.policy.feat.raw[0].b ^=3D (bitmaskof(X86_FEATURE_HLE) | bitmaskof(X86_FEATURE_RTM))); =20 /* Set the new policy. */ @@ -429,10 +427,10 @@ static void test_guest(struct xen_domctl_createdomain= *c) =20 dump_tsx_details(&guest_policy, "Cur:"); =20 - if ( guest_policy.cpuid.feat.raw[0].b !=3D _7b0 ) + if ( guest_policy.policy.feat.raw[0].b !=3D _7b0 ) { fail(" Expected CPUID.7[1].b 0x%08x differs from actual 0x%08= x\n", - _7b0, guest_policy.cpuid.feat.raw[0].b); + _7b0, guest_policy.policy.feat.raw[0].b); goto out; } } --=20 2.30.2