[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH 11/21] libs/guest: allow updating a cpu policy CPUID data
On 23.03.2021 10:58, Roger Pau Monne wrote: > --- a/tools/libs/guest/xg_cpuid_x86.c > +++ b/tools/libs/guest/xg_cpuid_x86.c > @@ -966,3 +966,70 @@ int xc_cpu_policy_get_msr(xc_interface *xch, const > xc_cpu_policy_t policy, > free(msrs); > return rc; > } > + > +int xc_cpu_policy_update_cpuid(xc_interface *xch, xc_cpu_policy_t policy, > + const xen_cpuid_leaf_t *leaves, > + uint32_t nr) > +{ > + unsigned int err_leaf = -1, err_subleaf = -1; > + unsigned int nr_leaves, nr_msrs, i, j; > + xen_cpuid_leaf_t *current; > + int rc = xc_cpu_policy_get_size(xch, &nr_leaves, &nr_msrs); > + > + if ( rc ) > + { > + PERROR("Failed to obtain policy info size"); > + return -1; > + } > + > + current = calloc(nr_leaves, sizeof(*current)); > + if ( !current ) > + { > + PERROR("Failed to allocate resources"); > + errno = ENOMEM; > + return -1; > + } > + > + rc = xc_cpu_policy_serialise(xch, policy, current, &nr_leaves, NULL, 0); > + if ( rc ) > + goto out; > + > + for ( i = 0; i < nr; i++ ) > + { > + const xen_cpuid_leaf_t *update = &leaves[i]; > + > + for ( j = 0; j < nr_leaves; j++ ) > + if ( current[j].leaf == update->leaf && > + current[j].subleaf == update->subleaf ) > + { > + /* > + * NB: cannot use an assignation because of the const vs > + * non-const difference. > + */ > + memcpy(¤t[j], update, sizeof(*update)); I'm having trouble understanding the comment. In current[j] = *update; the lvalue is xen_cpuid_leaf_t and the rvalue is const xen_cpuid_leaf_t. That the usual (and permitted) arrangement afaics. Jan
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |