|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH 4/7] tools/xg: Split xc_cpu_policy_set_domain()
xc_cpu_policy_set_domain_from_serialised() converts the cpu policy into its
serialised form first and then sends that to Xen. Meanwhile,
xc_cpu_policy_domain_set_from_deserialised() uses whatever is already in
the internal serialisation buffer of the policy object.
This split helps in a future patch where modifications are done in the
serialized form and we don't want to do a serialization round-trip to
send it to Xen.
Signed-off-by: Alejandro Vallejo <alejandro.vallejo@xxxxxxxxx>
---
tools/include/xenguest.h | 8 ++++++--
tools/libs/guest/xg_cpuid_x86.c | 24 ++++++++++++++----------
tools/tests/tsx/test-tsx.c | 2 +-
3 files changed, 21 insertions(+), 13 deletions(-)
diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h
index 702965addc..a66d9f7807 100644
--- a/tools/include/xenguest.h
+++ b/tools/include/xenguest.h
@@ -795,8 +795,12 @@ int xc_cpu_policy_get_system(xc_interface *xch, unsigned
int policy_idx,
xc_cpu_policy_t *policy);
int xc_cpu_policy_get_domain(xc_interface *xch, uint32_t domid,
xc_cpu_policy_t *policy);
-int xc_cpu_policy_set_domain(xc_interface *xch, uint32_t domid,
- xc_cpu_policy_t *policy);
+int xc_cpu_policy_set_domain_from_serialised(xc_interface *xch,
+ uint32_t domid,
+ xc_cpu_policy_t *policy);
+int xc_cpu_policy_set_domain_from_deserialised(xc_interface *xch,
+ uint32_t domid,
+ xc_cpu_policy_t *policy);
/* Manipulate a policy via architectural representations. */
int xc_cpu_policy_serialise(xc_interface *xch, const xc_cpu_policy_t *policy,
diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x86.c
index ac75ce2b4e..8fafeb2a02 100644
--- a/tools/libs/guest/xg_cpuid_x86.c
+++ b/tools/libs/guest/xg_cpuid_x86.c
@@ -985,20 +985,24 @@ int xc_cpu_policy_get_domain(xc_interface *xch, uint32_t
domid,
return rc;
}
-int xc_cpu_policy_set_domain(xc_interface *xch, uint32_t domid,
- xc_cpu_policy_t *policy)
+int xc_cpu_policy_set_domain_from_deserialised(xc_interface *xch, uint32_t
domid,
+ xc_cpu_policy_t *policy)
{
- uint32_t err_leaf = -1, err_subleaf = -1, err_msr = -1;
int rc;
-
- rc = cpu_policy_serialise_on_self(xch, policy);
- if ( rc )
+ if ( (rc = cpu_policy_serialise_on_self(xch, policy)) )
return rc;
- rc = xc_set_domain_cpu_policy(xch, domid,
- policy->leaves.len, policy->leaves.buf,
- policy->msrs.len, policy->msrs.buf,
- &err_leaf, &err_subleaf, &err_msr);
+ return xc_cpu_policy_set_domain_from_serialised(xch, domid, policy);
+}
+
+int xc_cpu_policy_set_domain_from_serialised(xc_interface *xch, uint32_t domid,
+ xc_cpu_policy_t *policy)
+{
+ uint32_t err_leaf = -1, err_subleaf = -1, err_msr = -1;
+ int rc = xc_set_domain_cpu_policy(xch, domid,
+ policy->leaves.len, policy->leaves.buf,
+ policy->msrs.len, policy->msrs.buf,
+ &err_leaf, &err_subleaf, &err_msr);
if ( rc )
{
ERROR("Failed to set domain %u policy (%d = %s)", domid, -rc,
diff --git a/tools/tests/tsx/test-tsx.c b/tools/tests/tsx/test-tsx.c
index 3371bb26f7..21b5640796 100644
--- a/tools/tests/tsx/test-tsx.c
+++ b/tools/tests/tsx/test-tsx.c
@@ -405,7 +405,7 @@ static void test_guest(struct xen_domctl_createdomain *c)
(bitmaskof(X86_FEATURE_HLE) | bitmaskof(X86_FEATURE_RTM)));
/* Set the new policy. */
- rc = xc_cpu_policy_set_domain(xch, domid, guest_policy);
+ rc = xc_cpu_policy_set_domain_from_deserialised(xch, domid,
guest_policy);
if ( rc )
{
fail(" Failed to set domain policy: %d - %s\n",
--
2.34.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |