[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
- To: Roger Pau Monne <roger.pau@xxxxxxxxxx>, <xen-devel@xxxxxxxxxxxxxxxxxxxx>
- From: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
- Date: Thu, 1 Apr 2021 15:55:42 +0100
- Arc-authentication-results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=citrix.com; dmarc=pass action=none header.from=citrix.com; dkim=pass header.d=citrix.com; arc=none
- Arc-message-signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=6gX4/P1sEkNtez5H5Jn1w49A21JyqnDvXYw72qVzBVU=; b=aivdR7Sgl8Thuo+AZcPjxIAZhnmvrF+CmMxUDL4Q1ZzyjfVRZOL9RBwP+g2+s877KPezxHsTFAy8MbR/z0S3rc48qdyOOfj40Zgdz8uaGOisjr6XNYm6NVEjf08B+BQ+eWDdeFr+0mmuzvbnwhgOJbjTQugaRtGKccDKjJy5dweHXmuiOl/eJ6K6LrsLaZum7/7PxB+dqYvD+7M5KoJ9H8wdB6nIJS8crwXZWlIlGCA8akIgh6prj6gvWWdLY7tiERS3OGcrXhUP/XGCOI4BDDERrl3Gn3UX+iog13+Vwi5wXZ6dAHjvAP3N65ZCiCXYF2tCkjvOWuj8JbX6Kr+hBw==
- Arc-seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=lPOlaiP07uarOc2BD7xHcdyKQSFAw2aV6ieXKmk7ZgIJw8y+VLtN4XcYT5G+nHh3jKYUtFq7Re2SdeShIBd6WnWLVqFZHDjZl7DFkphnRvreT/3GujE66aA40hMo5StLKR8gUn3FfVmsLwDgiHn1eMzzmDbBt6u7ZUS9oeXIRC6WH3H4CDOPQxUGJBpA8YPtwjE5qfDbDATLUmZ1nCb9L0+OXAtQfAjFwZq7q1emk/Tcu7nl4z965hCieM1dWWYYMz29hIYqC8BPOx2JKTeQRDiz9d4JBzYBCOzw9gb9mWmdHLSuCH5/mTop7jXeqsfjB36lv6lLCoWQjANKJynqzQ==
- Authentication-results: esa2.hc3370-68.iphmx.com; dkim=pass (signature verified) header.i=@citrix.onmicrosoft.com
- Cc: Ian Jackson <iwj@xxxxxxxxxxxxxx>, Wei Liu <wl@xxxxxxx>
- Delivery-date: Thu, 01 Apr 2021 14:55:55 +0000
- Ironport-hdrordr: A9a23:U6ZuO6C0sqyK7LTlHegBtMeALOonbusQ8zAX/mhLY1h8btGYm8 eynP4SyB/zj3IrVGs9nM2bUZPufVr1zrQwxYUKJ7+tUE3duGWuJJx/9oeK+VHdMgXE3Kpm2a 9kGpISNPTZEUV6gcHm4AOxDtYnx529/Lq1gPrFpk0NcShBQchbnmJEIyycFVB7QxQDIJI/Go aV6MYvnUveRV08aMOnCn4ZG9XZr9rQm578JTIADRgr6A6B5AnYlILSOR6ewxsYTndz0a4vmF K17jDRy4eCl7WAyhHa33LO9Jg+orXc4/ZKGcDksLlsFhzCkQCtDb4RPIGqnDdwm+237UZvrd +kmWZbA+1Wy1f8Ol64ugHs3Q6I6kdc11bHxUWDiXXu5ezVLQhKcvZpvo5SfhvH50dIhrgVu8 gqrgHpwqZ/Nh/OkD/w4NLFTXhR5y6JiEEvjPIJiDhnWZYeAYUh3bA3xl9fE5sLAUvBmeYaOd RpZfushsp+TUmXdDTwsGVp3bWXLw8ONybDaE0DtsuJ6iNRjXB0wmAJrfZv70soxdYTTYJJ6P /DNbktvLZSTtUOZaY4P+sZR9CrY1a9Di7kASa3GxDKBasHM3XCp9re56g03vijfNgtwIEpkJ rMfVtEvQcJCgzTIPzL+KcO3gHGQW27Uzio4NpZ/YJFtrr1Q6euGTGfSXg1+vHQ4Mk3M4n+Yb KeKZhWC/jsIS/FAoBSxTDzXJFUND03TNAVgNAmQFiDy/i7arHCh6j+SrL+NbDtGTErVifUGX 0YRgX+I81G8wSFQXn9rB/NW278W0D28J5qeZKqutQ7+cwoDMlhowIVgVO26oWgMjtZqJE7e0 N4PffGn8qA1C2L1FeNy18sFgtWD05T7rmleWhNvxU2P0T9dqtGn92efGtVzUaWPxMXdbKQLC dv43BMvY6nJZ2Zwi4vT/i9NHiBsncVrHWWC7ARh7OE/sWgXp8jFJ4pVOhQGGzwZl1IsDcvjF 0GRB4PR0fZGD+ro76iloYoCObWcMQ5phyqL85SoXf2rl6duskre3seU1eVIIyqqDdrYwARqk x68qcZjrbFsy2oM3EDjOMxN0AJVH6aG4tcDAOOZJxdn5fifA0YdxbNuRWqzzUIPkb6/UQbgW LsaQmZY+vCDFZmtndE6ary619vemKBf0V/V2BiveRGZBb7k0c29dXOSru40mOXZFdH+O0bPT 3fSRY5Iw9lxbmMpVSosQfHMU9j6oQlP+TbArhmTqra3Wm1LpaU0YscGeVPwZpjPNfyk+MCXO 6FYTWJJDfgB+5B4X3Nml8VfA1P7FU0m/Lh3xPoqFWi1HkkGPzIPRBIQaoYL9z01Rmse9+4lL FCyfQ7suu7Pj+vNpqoyaTLYyVCLR2Wi2isVO0soY1Vu6V3lLYbJeitbRL4kFV8mDM5J4PIsW lbZoJRyrXIIJVucMwfYDgxxCtjqP2/aG8Q9jXrCeo/d2w3h3DVP9m186PFwIBfdnGplU/VAx 2j6CVT8PfOYjub2ZMbA6w2J35KaEJU0gUVwMqyM6nRAh6tbedN4R6TNWK8aqZUTMG+aPgthy c/x9GDhOmMcSXknCjWoDtgO6pLt0KqW9m7Dg7JOelG9bWBSBixq5rvxM64lzHsTzSnL2wemI 1ebEQVKv15tQNKtvx+7gGCDortokwklFNC4TZo0n7Vs7LWnlvzLAVhKg3WgpJfQD9JFGOH5P 61qdSl6A==
- Ironport-sdr: JXuiZUcm8xyHmhfQEOQxQF1GX2B7x/aVj84rkPowYORxD1l7PeAPKZcGqKHgAwaDjDyLRVSL3A nJ1T9oHfht/fAmzV1ghqSAUQR/+ocCePkyzCYbMRbZoszsjK88u8uK9f3qEV04YC9Jfv/7yQhV NmFQuxHicOijo99ClOApve1FD60AMPlHwynF+xNkHfZmo6Z59YCVoRuJo1xUyGXlxvmoQsxwLH RgTAaVGjJOSD4LMkoPsx0YCANfBxAvjAFqkG/2manbitkukbL08SCfZDaRQHrnJCFVYwSxkcFd 0oA=
- List-id: Xen developer discussion <xen-devel.lists.xenproject.org>
On 23/03/2021 09:58, Roger Pau Monne wrote:
> diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x86.c
> index 091aeb70c9c..13c2972ccd3 100644
> --- 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));
> + break;
> + }
> +
> + if ( j == nr_leaves )
> + {
> + /* Failed to find a matching leaf, append to the end. */
> + current = realloc(current, (nr_leaves + 1) * sizeof(*current));
> + memcpy(¤t[nr_leaves], update, sizeof(*update));
> + nr_leaves++;
> + }
> + }
> +
> + rc = x86_cpuid_copy_from_buffer(policy->cpuid, current, nr_leaves,
> + &err_leaf, &err_subleaf);
Why do you need any earlier logic? x86_cpuid_copy_from_buffer() already
does exactly this operation.
~Andrew
|