enum xc_static_cpu_featuremask {
XC_FEATUREMASK_KNOWN,
XC_FEATUREMASK_SPECIAL,
- XC_FEATUREMASK_PV,
- XC_FEATUREMASK_HVM_SHADOW,
- XC_FEATUREMASK_HVM_HAP,
+ XC_FEATUREMASK_PV_MAX,
+ XC_FEATUREMASK_PV_DEF,
+ XC_FEATUREMASK_HVM_SHADOW_MAX,
+ XC_FEATUREMASK_HVM_SHADOW_DEF,
+ XC_FEATUREMASK_HVM_HAP_MAX,
+ XC_FEATUREMASK_HVM_HAP_DEF,
};
const uint32_t *xc_get_static_cpu_featuremask(enum xc_static_cpu_featuremask);
MASK(KNOWN),
MASK(SPECIAL),
- MASK(PV),
- MASK(HVM_SHADOW),
- MASK(HVM_HAP),
+ MASK(PV_MAX),
+ MASK(PV_DEF),
+ MASK(HVM_SHADOW_MAX),
+ MASK(HVM_SHADOW_DEF),
+ MASK(HVM_HAP_MAX),
+ MASK(HVM_HAP_DEF),
#undef MASK
};
nr_features, "Known", detail);
decode_featureset(xc_get_static_cpu_featuremask(XC_FEATUREMASK_SPECIAL),
nr_features, "Special", detail);
- decode_featureset(xc_get_static_cpu_featuremask(XC_FEATUREMASK_PV),
- nr_features, "PV Mask", detail);
- decode_featureset(xc_get_static_cpu_featuremask(XC_FEATUREMASK_HVM_SHADOW),
- nr_features, "HVM Shadow Mask", detail);
- decode_featureset(xc_get_static_cpu_featuremask(XC_FEATUREMASK_HVM_HAP),
- nr_features, "HVM Hap Mask", detail);
+ decode_featureset(xc_get_static_cpu_featuremask(XC_FEATUREMASK_PV_MAX),
+ nr_features, "PV Max", detail);
+ decode_featureset(xc_get_static_cpu_featuremask(XC_FEATUREMASK_PV_DEF),
+ nr_features, "PV Default", detail);
+ decode_featureset(xc_get_static_cpu_featuremask(XC_FEATUREMASK_HVM_SHADOW_MAX),
+ nr_features, "HVM Shadow Max", detail);
+ decode_featureset(xc_get_static_cpu_featuremask(XC_FEATUREMASK_HVM_SHADOW_DEF),
+ nr_features, "HVM Shadow Default", detail);
+ decode_featureset(xc_get_static_cpu_featuremask(XC_FEATUREMASK_HVM_HAP_MAX),
+ nr_features, "HVM Hap Max", detail);
+ decode_featureset(xc_get_static_cpu_featuremask(XC_FEATUREMASK_HVM_HAP_DEF),
+ nr_features, "HVM Hap Default", detail);
printf("\nDynamic sets:\n");
for ( i = 0; i < ARRAY_SIZE(featuresets); ++i )
const uint32_t known_features[] = INIT_KNOWN_FEATURES;
const uint32_t special_features[] = INIT_SPECIAL_FEATURES;
-static const uint32_t pv_featuremask[] = INIT_PV_FEATURES;
-static const uint32_t hvm_shadow_featuremask[] = INIT_HVM_SHADOW_FEATURES;
-static const uint32_t hvm_hap_featuremask[] = INIT_HVM_HAP_FEATURES;
+static const uint32_t pv_max_featuremask[] = INIT_PV_MAX_FEATURES;
+static const uint32_t hvm_shadow_max_featuremask[] = INIT_HVM_SHADOW_MAX_FEATURES;
+static const uint32_t hvm_hap_max_featuremask[] = INIT_HVM_HAP_MAX_FEATURES;
static const uint32_t deep_features[] = INIT_DEEP_FEATURES;
static int __init parse_xen_cpuid(const char *s)
cpuid_policy_to_featureset(p, pv_featureset);
for ( i = 0; i < ARRAY_SIZE(pv_featureset); ++i )
- pv_featureset[i] &= pv_featuremask[i];
+ pv_featureset[i] &= pv_max_featuremask[i];
/*
* If Xen isn't virtualising MSR_SPEC_CTRL for PV guests because of
cpuid_policy_to_featureset(p, hvm_featureset);
hvm_featuremask = hvm_hap_supported() ?
- hvm_hap_featuremask : hvm_shadow_featuremask;
+ hvm_hap_max_featuremask : hvm_shadow_max_featuremask;
for ( i = 0; i < ARRAY_SIZE(hvm_featureset); ++i )
hvm_featureset[i] &= hvm_featuremask[i];
if ( !hap_enabled(d) )
{
for ( i = 0; i < ARRAY_SIZE(max_fs); i++ )
- max_fs[i] &= hvm_shadow_featuremask[i];
+ max_fs[i] &= hvm_shadow_max_featuremask[i];
}
/* Hide nested-virt if it hasn't been explicitly configured. */
/*
* PSE36 is not supported in shadow mode. This bit should be
- * clear in hvm_shadow_featuremask[].
+ * clear in hvm_shadow_max_featuremask[].
*
* However, an unspecified version of Hyper-V from 2011 refuses to
* start as the "cpu does not provide required hw features" if it
{
BUILD_BUG_ON(ARRAY_SIZE(known_features) != FSCAPINTS);
BUILD_BUG_ON(ARRAY_SIZE(special_features) != FSCAPINTS);
- BUILD_BUG_ON(ARRAY_SIZE(pv_featuremask) != FSCAPINTS);
- BUILD_BUG_ON(ARRAY_SIZE(hvm_shadow_featuremask) != FSCAPINTS);
- BUILD_BUG_ON(ARRAY_SIZE(hvm_hap_featuremask) != FSCAPINTS);
+ BUILD_BUG_ON(ARRAY_SIZE(pv_max_featuremask) != FSCAPINTS);
+ BUILD_BUG_ON(ARRAY_SIZE(hvm_shadow_max_featuremask) != FSCAPINTS);
+ BUILD_BUG_ON(ARRAY_SIZE(hvm_hap_max_featuremask) != FSCAPINTS);
BUILD_BUG_ON(ARRAY_SIZE(deep_features) != FSCAPINTS);
/* Find some more clever allocation scheme if this trips. */
# State calculated
self.nr_entries = 0 # Number of words in a featureset
self.common_1d = 0 # Common features between 1d and e1d
- self.pv = set() # PV features
- self.hvm_shadow = set() # HVM shadow features
- self.hvm_hap = set() # HVM HAP features
+ self.pv_def = set() # PV default features
+ self.hvm_shadow_def = set() # HVM shadow default features
+ self.hvm_hap_def = set() # HVM HAP default features
+ self.pv_max = set() # PV max features
+ self.hvm_shadow_max = set() # HVM shadow max features
+ self.hvm_hap_max = set() # HVM HAP max features
self.bitfields = [] # Text to declare named bitfields in C
self.deep_deps = {} # { feature num => dependant features }
self.nr_deep_deps = 0 # Number of entries in deep_deps
MTRR, PGE, MCA, CMOV, PAT, PSE36, MMX, FXSR)
state.common_1d = common_1d
- state.pv = state.raw['A']
- state.hvm_shadow = state.pv | state.raw['S']
- state.hvm_hap = state.hvm_shadow | state.raw['H']
+ state.pv_def = state.raw['A']
+ state.hvm_shadow_def = state.pv_def | state.raw['S']
+ state.hvm_hap_def = state.hvm_shadow_def | state.raw['H']
+
+ state.pv_max = state.pv_def
+ state.hvm_shadow_max = state.hvm_shadow_def
+ state.hvm_hap_max = state.hvm_hap_def
#
# Feature dependency information.
#define INIT_SPECIAL_FEATURES { \\\n%s\n}
-#define INIT_PV_FEATURES { \\\n%s\n}
+#define INIT_PV_DEF_FEATURES { \\\n%s\n}
+
+#define INIT_PV_MAX_FEATURES { \\\n%s\n}
+
+#define INIT_HVM_SHADOW_DEF_FEATURES { \\\n%s\n}
+
+#define INIT_HVM_SHADOW_MAX_FEATURES { \\\n%s\n}
-#define INIT_HVM_SHADOW_FEATURES { \\\n%s\n}
+#define INIT_HVM_HAP_DEF_FEATURES { \\\n%s\n}
-#define INIT_HVM_HAP_FEATURES { \\\n%s\n}
+#define INIT_HVM_HAP_MAX_FEATURES { \\\n%s\n}
#define NR_DEEP_DEPS %sU
next(featureset_to_uint32s(state.common_1d, 1)),
format_uint32s(state, state.names.keys(), 4),
format_uint32s(state, state.raw['!'], 4),
- format_uint32s(state, state.pv, 4),
- format_uint32s(state, state.hvm_shadow, 4),
- format_uint32s(state, state.hvm_hap, 4),
+ format_uint32s(state, state.pv_def, 4),
+ format_uint32s(state, state.pv_max, 4),
+ format_uint32s(state, state.hvm_shadow_def, 4),
+ format_uint32s(state, state.hvm_shadow_max, 4),
+ format_uint32s(state, state.hvm_hap_def, 4),
+ format_uint32s(state, state.hvm_hap_max, 4),
state.nr_deep_deps,
format_uint32s(state, state.deep_features, 4),
))