Introduce an interface that returns a specific leaf/subleaf from a cpu
policy in xen_cpuid_leaf_t format.
This is useful to callers can peek data from the opaque
xc_cpu_policy_t type.
No caller of the interface introduced on this patch.
Note that callers of find_leaf need to be slightly adjusted to use the
new helper parameters.
Signed-off-by: Roger Pau Monné <roger.pau@citrix.com>
---
Changes since v3:
- Use x86_cpuid_get_leaf.
Changes since v1:
- Use find leaf.
---
tools/include/xenguest.h | 3 +++
tools/libs/guest/xg_cpuid_x86.c | 23 +++++++++++++++++++++++
2 files changed, 26 insertions(+)
diff --git a/tools/include/xenguest.h b/tools/include/xenguest.h
index e01f494b77..0a6fd99306 100644
--- a/tools/include/xenguest.h
+++ b/tools/include/xenguest.h
@@ -807,6 +807,9 @@ int xc_cpu_policy_update_cpuid(xc_interface *xch, xc_cpu_policy_t *policy,
uint32_t nr);
int xc_cpu_policy_update_msrs(xc_interface *xch, xc_cpu_policy_t *policy,
const xen_msr_entry_t *msrs, uint32_t nr);
+int xc_cpu_policy_get_cpuid(xc_interface *xch, const xc_cpu_policy_t *policy,
+ uint32_t leaf, uint32_t subleaf,
+ xen_cpuid_leaf_t *out);
/* Compatibility calculations. */
bool xc_cpu_policy_is_compatible(xc_interface *xch, xc_cpu_policy_t *host,
diff --git a/tools/libs/guest/xg_cpuid_x86.c b/tools/libs/guest/xg_cpuid_x86.c
index b9e827ce7e..7779a3e1dd 100644
--- a/tools/libs/guest/xg_cpuid_x86.c
+++ b/tools/libs/guest/xg_cpuid_x86.c
@@ -855,6 +855,29 @@ int xc_cpu_policy_update_msrs(xc_interface *xch, xc_cpu_policy_t *policy,
return rc;
}
+int xc_cpu_policy_get_cpuid(xc_interface *xch, const xc_cpu_policy_t *policy,
+ uint32_t leaf, uint32_t subleaf,
+ xen_cpuid_leaf_t *out)
+{
+ const struct cpuid_leaf *tmp;
+
+ tmp = x86_cpuid_get_leaf(&policy->cpuid, leaf, subleaf);
+ if ( !tmp )
+ {
+ /* Unable to find a matching leaf. */
+ errno = ENOENT;
+ return -1;
+ }
+
+ out->leaf = leaf;
+ out->subleaf = subleaf;
+ out->a = tmp->a;
+ out->b = tmp->b;
+ out->c = tmp->c;
+ out->d = tmp->d;
+ return 0;
+}
+
bool xc_cpu_policy_is_compatible(xc_interface *xch, xc_cpu_policy_t *host,
xc_cpu_policy_t *guest)
{
--
2.33.0