|
[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 |