|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 10/13] libxl: introduce MSR data in libxl_cpuid_policy
Add a new array field to libxl_cpuid_policy in order to store the MSR
policies.
Note that libxl_cpuid_policy_list_{copy,length,parse_json,gen_json}
are not adjusted to deal with the new MSR array now part of
libxl_cpuid_policy_list.
Adding the MSR data in the libxl_cpuid_policy_list type is done so
that existing users can seamlessly pass MSR features as part of the
CPUID data, without requiring the introduction of a separate
domain_build_info field, and a new set of handlers functions.
Signed-off-by: Roger Pau Monné <roger.pau@xxxxxxxxxx>
---
tools/include/libxl.h | 1 +
tools/libs/light/libxl_cpuid.c | 31 +++++++++++++++++++------------
2 files changed, 20 insertions(+), 12 deletions(-)
diff --git a/tools/include/libxl.h b/tools/include/libxl.h
index 41e19f2af7f5..4e7b08ab5027 100644
--- a/tools/include/libxl.h
+++ b/tools/include/libxl.h
@@ -1461,6 +1461,7 @@ void libxl_bitmap_dispose(libxl_bitmap *map);
*/
typedef struct libxl_cpu_policy {
struct xc_xend_cpuid *cpuid;
+ struct xc_msr *msr;
} libxl_cpuid_policy;
typedef libxl_cpuid_policy libxl_cpuid_policy_list;
void libxl_cpuid_dispose(libxl_cpuid_policy_list *cpuid_list);
diff --git a/tools/libs/light/libxl_cpuid.c b/tools/libs/light/libxl_cpuid.c
index ded0d0b8bc15..7261c1f1fd82 100644
--- a/tools/libs/light/libxl_cpuid.c
+++ b/tools/libs/light/libxl_cpuid.c
@@ -21,20 +21,26 @@ int libxl__cpuid_policy_is_empty(libxl_cpuid_policy_list
*pl)
void libxl_cpuid_dispose(libxl_cpuid_policy_list *policy)
{
- int i, j;
struct xc_xend_cpuid *cpuid_list = policy->cpuid;
- if (cpuid_list == NULL)
- return;
- for (i = 0; cpuid_list[i].input[0] != XEN_CPUID_INPUT_UNUSED; i++) {
- for (j = 0; j < 4; j++)
- if (cpuid_list[i].policy[j] != NULL) {
- free(cpuid_list[i].policy[j]);
- cpuid_list[i].policy[j] = NULL;
- }
+ if (cpuid_list) {
+ unsigned int i, j;
+
+ for (i = 0; cpuid_list[i].input[0] != XEN_CPUID_INPUT_UNUSED; i++) {
+ for (j = 0; j < 4; j++)
+ if (cpuid_list[i].policy[j] != NULL) {
+ free(cpuid_list[i].policy[j]);
+ cpuid_list[i].policy[j] = NULL;
+ }
+ }
+ free(policy->cpuid);
+ policy->cpuid = NULL;
+ }
+
+ if (policy->msr) {
+ free(policy->msr);
+ policy->msr = NULL;
}
- free(policy->cpuid);
- policy->cpuid = NULL;
return;
}
@@ -503,7 +509,8 @@ int libxl__cpuid_legacy(libxl_ctx *ctx, uint32_t domid,
bool restore,
info->tsc_mode == LIBXL_TSC_MODE_ALWAYS_EMULATE);
r = xc_cpuid_apply_policy(ctx->xch, domid, restore, NULL, 0,
- pae, itsc, nested_virt, info->cpuid.cpuid, NULL);
+ pae, itsc, nested_virt, info->cpuid.cpuid,
+ info->cpuid.msr);
if (r)
LOGEVD(ERROR, -r, domid, "Failed to apply CPUID policy");
--
2.40.0
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |