Featuresets are supposed to be disappearing when the CPU policy infrastructure
is complete, but that has taken longer than expected, and isn't going to be
complete imminently either.
In the meantime, Xen does have proper default/max featuresets, and xen-cpuid
can even get them via the XEN_SYSCTL_cpu_policy_* interface, but only knows
now to render them nicely via the featureset interface.
Differences between default and max are a frequent source of errors,
frequently too in secret leading up to an embargo, so extend the featureset
sysctl to allow xen-cpuid to render them all nicely.
Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
Acked-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Christian Lindig <christian.lindig@cloud.com>
(cherry picked from commit
433d012c6c2737ad5a9aaa994355a4140d601852)
#define COL_ALIGN "18"
static const char *const fs_names[] = {
- [XEN_SYSCTL_cpu_featureset_host] = "Host",
- [XEN_SYSCTL_cpu_featureset_raw] = "Raw",
- [XEN_SYSCTL_cpu_featureset_pv] = "PV",
- [XEN_SYSCTL_cpu_featureset_hvm] = "HVM",
+ [XEN_SYSCTL_cpu_featureset_raw] = "Raw",
+ [XEN_SYSCTL_cpu_featureset_host] = "Host",
+ [XEN_SYSCTL_cpu_featureset_pv] = "PV Default",
+ [XEN_SYSCTL_cpu_featureset_hvm] = "HVM Default",
+ [XEN_SYSCTL_cpu_featureset_pv_max] = "PV Max",
+ [XEN_SYSCTL_cpu_featureset_hvm_max] = "HVM Max",
};
static void dump_leaf(uint32_t leaf, const char *const *strs)
external version_capabilities: handle -> string =
"stub_xc_version_capabilities"
-type featureset_index = Featureset_raw | Featureset_host | Featureset_pv | Featureset_hvm
+type featureset_index =
+ | Featureset_raw
+ | Featureset_host
+ | Featureset_pv
+ | Featureset_hvm
+ | Featureset_pv_max
+ | Featureset_hvm_max
external get_cpu_featureset : handle -> featureset_index -> int64 array = "stub_xc_get_cpu_featureset"
external watchdog : handle -> int -> int32 -> int
external version_capabilities : handle -> string
= "stub_xc_version_capabilities"
-type featureset_index = Featureset_raw | Featureset_host | Featureset_pv | Featureset_hvm
+type featureset_index =
+ | Featureset_raw
+ | Featureset_host
+ | Featureset_pv
+ | Featureset_hvm
+ | Featureset_pv_max
+ | Featureset_hvm_max
external get_cpu_featureset : handle -> featureset_index -> int64 array = "stub_xc_get_cpu_featureset"
external pages_to_kib : int64 -> int64 = "stub_pages_to_kib"
case XEN_SYSCTL_get_cpu_featureset:
{
- static const struct cpuid_policy *const policy_table[4] = {
+ static const struct cpuid_policy *const policy_table[6] = {
[XEN_SYSCTL_cpu_featureset_raw] = &raw_cpuid_policy,
[XEN_SYSCTL_cpu_featureset_host] = &host_cpuid_policy,
#ifdef CONFIG_PV
[XEN_SYSCTL_cpu_featureset_pv] = &pv_def_cpuid_policy,
+ [XEN_SYSCTL_cpu_featureset_pv_max] = &pv_max_cpuid_policy,
#endif
#ifdef CONFIG_HVM
[XEN_SYSCTL_cpu_featureset_hvm] = &hvm_def_cpuid_policy,
+ [XEN_SYSCTL_cpu_featureset_hvm_max] = &hvm_max_cpuid_policy,
#endif
};
const struct cpuid_policy *p = NULL;
#define XEN_SYSCTL_cpu_featureset_host 1
#define XEN_SYSCTL_cpu_featureset_pv 2
#define XEN_SYSCTL_cpu_featureset_hvm 3
+#define XEN_SYSCTL_cpu_featureset_pv_max 4
+#define XEN_SYSCTL_cpu_featureset_hvm_max 5
uint32_t index; /* IN: Which featureset to query? */
uint32_t nr_features; /* IN/OUT: Number of entries in/written to
* 'features', or the maximum number of features if