[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 01/13] libs/guest: simplify xc_cpuid_apply_policy()
Introduce a local xc_cpu_policy_t and use it to simplify some of the logic in the function: * Populate the introduced xc_cpu_policy_t with the current domain policy, which will already be the default for the given domain type. This avoids fetching and processing any default policy. * Use xc_cpu_policy_set_domain() to apply the adjusted policy to the domain, thus avoiding open-coding the policy serialization. Note that some error messages are removed, as the newly used xc_cpu_policy_ functions already print an error message themselves. No functional change intended. Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx> --- tools/libs/guest/xg_cpuid_x86.c | 51 ++++++--------------------------- 1 file changed, 9 insertions(+), 42 deletions(-) diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x86.c index 5b035223f4f5..67e0dc9b4ad2 100644 --- a/tools/libs/guest/xg_cpuid_x86.c +++ b/tools/libs/guest/xg_cpuid_x86.c @@ -431,10 +431,9 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, bool restore, int rc; bool hvm; xc_domaininfo_t di; - unsigned int i, nr_leaves, nr_msrs; - xen_cpuid_leaf_t *leaves = NULL; - struct cpu_policy *p = NULL; - uint32_t err_leaf = -1, err_subleaf = -1, err_msr = -1; + unsigned int i; + xc_cpu_policy_t *policy = NULL; + struct cpu_policy *p; uint32_t host_featureset[FEATURESET_NR_ENTRIES] = {}; uint32_t len = ARRAY_SIZE(host_featureset); @@ -446,17 +445,8 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, bool restore, } hvm = di.flags & XEN_DOMINF_hvm_guest; - rc = xc_cpu_policy_get_size(xch, &nr_leaves, &nr_msrs); - if ( rc ) - { - PERROR("Failed to obtain policy info size"); - rc = -errno; - goto out; - } - rc = -ENOMEM; - if ( (leaves = calloc(nr_leaves, sizeof(*leaves))) == NULL || - (p = calloc(1, sizeof(*p))) == NULL ) + if ( (policy = xc_cpu_policy_init()) == NULL ) goto out; /* Get the host policy. */ @@ -470,26 +460,14 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, bool restore, goto out; } - /* Get the domain's default policy. */ - nr_msrs = 0; - rc = get_system_cpu_policy(xch, hvm ? XEN_SYSCTL_cpu_policy_hvm_default - : XEN_SYSCTL_cpu_policy_pv_default, - &nr_leaves, leaves, &nr_msrs, NULL); + /* Get the domain's policy. */ + rc = xc_cpu_policy_get_domain(xch, domid, policy); if ( rc ) { - PERROR("Failed to obtain %s default policy", hvm ? "hvm" : "pv"); rc = -errno; goto out; } - - rc = x86_cpuid_copy_from_buffer(p, leaves, nr_leaves, - &err_leaf, &err_subleaf); - if ( rc ) - { - ERROR("Failed to deserialise CPUID (err leaf %#x, subleaf %#x) (%d = %s)", - err_leaf, err_subleaf, -rc, strerror(-rc)); - goto out; - } + p = &policy->policy; if ( restore ) { @@ -643,19 +621,9 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, bool restore, } } - rc = x86_cpuid_copy_to_buffer(p, leaves, &nr_leaves); - if ( rc ) - { - ERROR("Failed to serialise CPUID (%d = %s)", -rc, strerror(-rc)); - goto out; - } - - rc = xc_set_domain_cpu_policy(xch, domid, nr_leaves, leaves, 0, NULL, - &err_leaf, &err_subleaf, &err_msr); + rc = xc_cpu_policy_set_domain(xch, domid, policy); if ( rc ) { - PERROR("Failed to set d%d's policy (err leaf %#x, subleaf %#x, msr %#x)", - domid, err_leaf, err_subleaf, err_msr); rc = -errno; goto out; } @@ -666,8 +634,7 @@ int xc_cpuid_apply_policy(xc_interface *xch, uint32_t domid, bool restore, rc = 0; out: - free(p); - free(leaves); + xc_cpu_policy_destroy(policy); return rc; } -- 2.40.0
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |