[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 06/13] libs/guest: replace usage of host featureset in xc_cpuid_apply_policy()
Further changes to the function will require a host policy, hence switch usages now in order to avoid having both a host featureset and a host policy in the same context. No functional change intended. Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- tools/libs/guest/xg_cpuid_x86.c | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x86.c index c67e8c458f24..1e532b255c21 100644 --- a/tools/libs/guest/xg_cpuid_x86.c +++ b/tools/libs/guest/xg_cpuid_x86.c @@ -432,10 +432,8 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, bool restore, bool hvm; xc_domaininfo_t di; unsigned int i; - xc_cpu_policy_t *policy = NULL; + xc_cpu_policy_t *policy = NULL, *host = NULL; struct cpu_policy *p; - uint32_t host_featureset[FEATURESET_NR_ENTRIES] = {}; - uint32_t len = ARRAY_SIZE(host_featureset); if ( (rc = xc_domain_getinfo_single(xch, domid, &di)) < 0 ) { @@ -446,16 +444,14 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, bool restore, hvm = di.flags & XEN_DOMINF_hvm_guest; rc = -ENOMEM; - if ( (policy = xc_cpu_policy_init()) == NULL ) + if ( (policy = xc_cpu_policy_init()) == NULL || + (host = xc_cpu_policy_init()) == NULL ) goto out; /* Get the host policy. */ - rc = xc_get_cpu_featureset(xch, XEN_SYSCTL_cpu_featureset_host, - &len, host_featureset); - /* Tolerate "buffer too small", as we've got the bits we need. */ - if ( rc && errno != ENOBUFS ) + rc = xc_cpu_policy_get_system(xch, XEN_SYSCTL_cpu_policy_host, host); + if ( rc ) { - PERROR("Failed to obtain host featureset"); rc = -errno; goto out; } @@ -485,13 +481,13 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, bool restore, * - Re-enable features which have become (possibly) off by default. */ - p->basic.rdrand = test_bit(X86_FEATURE_RDRAND, host_featureset); - p->feat.hle = test_bit(X86_FEATURE_HLE, host_featureset); - p->feat.rtm = test_bit(X86_FEATURE_RTM, host_featureset); + p->basic.rdrand = host->policy.basic.rdrand; + p->feat.hle = host->policy.feat.hle; + p->feat.rtm = host->policy.feat.rtm; if ( hvm ) { - p->feat.mpx = test_bit(X86_FEATURE_MPX, host_featureset); + p->feat.mpx = host->policy.feat.mpx; } p->basic.max_leaf = min(p->basic.max_leaf, 0xdu); @@ -560,8 +556,8 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, bool restore, * On hardware without CPUID Faulting, PV guests see real topology. * As a consequence, they also need to see the host htt/cmp fields. */ - p->basic.htt = test_bit(X86_FEATURE_HTT, host_featureset); - p->extd.cmp_legacy = test_bit(X86_FEATURE_CMP_LEGACY, host_featureset); + p->basic.htt = host->policy.basic.htt; + p->extd.cmp_legacy = host->policy.extd.cmp_legacy; } else { @@ -635,6 +631,7 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, bool restore, out: xc_cpu_policy_destroy(policy); + xc_cpu_policy_destroy(host); return rc; } -- 2.40.0
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |