mirror of
https://github.com/xen-project/xen.git
synced 2026-10-28 02:01:24 +01:00
x86/sysctl: Retrofit XEN_SYSCTL_cpu_featureset_{pv,hvm}_max
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 433d012c6c)
This commit is contained in:
1 parent
8c6035b2a9
commit
8b76e103a3
5 files changed
+25
-7
No files matched your search
@@ -245,10 +245,12 @@ static const struct {
|
||||
#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)
|
||||
|
||||
@@ -309,7 +309,13 @@ external version_changeset: handle -> string = "stub_xc_version_changeset"
|
||||
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
|
||||
|
||||
@@ -235,7 +235,13 @@ external version_changeset : handle -> string = "stub_xc_version_changeset"
|
||||
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"
|
||||
|
||||
@@ -327,14 +327,16 @@ long arch_do_sysctl(
|
||||
|
||||
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;
|
||||
|
||||
@@ -796,6 +796,8 @@ struct xen_sysctl_cpu_featureset {
|
||||
#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
|
||||
|
||||