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:
Andrew Cooper committed 2023-08-08 16:02:17 +01:00
1 parent 8c6035b2a9
commit 8b76e103a3
5 files changed
+25 -7

No files matched your search

+6 -4
View File
@@ -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)
+7 -1
View File
@@ -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
+7 -1
View File
@@ -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"
+3 -1
View File
@@ -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;
+2
View File
@@ -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
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.