target/i386: move max_features to class
max_features is always set to true for instances created by -cpu max or -cpu host; it's always false for other classes. Therefore it can be turned into a field in the X86CPUClass. Reviewed-by: Xiaoyao Li <xiaoyao.li@intel.com> Reviewed-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
ed7f6da282
commit
cb2273edf5
4 changed files with 10 additions and 7 deletions
|
|
@ -6187,6 +6187,7 @@ static void max_x86_cpu_class_init(ObjectClass *oc, const void *data)
|
|||
|
||||
xcc->ordering = 9;
|
||||
|
||||
xcc->max_features = true;
|
||||
xcc->model_description =
|
||||
"Enables all features supported by the accelerator in the current host";
|
||||
|
||||
|
|
@ -6201,7 +6202,6 @@ static void max_x86_cpu_initfn(Object *obj)
|
|||
/* We can't fill the features array here because we don't know yet if
|
||||
* "migratable" is true or false.
|
||||
*/
|
||||
cpu->max_features = true;
|
||||
object_property_set_bool(OBJECT(cpu), "pmu", true, &error_abort);
|
||||
|
||||
/*
|
||||
|
|
@ -8282,6 +8282,7 @@ static void x86_cpu_enable_xsave_components(X86CPU *cpu)
|
|||
*/
|
||||
void x86_cpu_expand_features(X86CPU *cpu, Error **errp)
|
||||
{
|
||||
X86CPUClass *xcc = X86_CPU_GET_CLASS(cpu);
|
||||
CPUX86State *env = &cpu->env;
|
||||
FeatureWord w;
|
||||
int i;
|
||||
|
|
@ -8301,12 +8302,12 @@ void x86_cpu_expand_features(X86CPU *cpu, Error **errp)
|
|||
}
|
||||
}
|
||||
|
||||
/*TODO: Now cpu->max_features doesn't overwrite features
|
||||
/* TODO: Now xcc->max_features doesn't overwrite features
|
||||
* set using QOM properties, and we can convert
|
||||
* plus_features & minus_features to global properties
|
||||
* inside x86_cpu_parse_featurestr() too.
|
||||
*/
|
||||
if (cpu->max_features) {
|
||||
if (xcc->max_features) {
|
||||
for (w = 0; w < FEATURE_WORDS; w++) {
|
||||
/* Override only features that weren't set explicitly
|
||||
* by the user.
|
||||
|
|
|
|||
|
|
@ -2196,7 +2196,6 @@ struct ArchCPU {
|
|||
bool expose_tcg;
|
||||
bool migratable;
|
||||
bool migrate_smi_count;
|
||||
bool max_features; /* Enable all supported features automatically */
|
||||
uint32_t apic_id;
|
||||
|
||||
/* Enables publishing of TSC increment and Local APIC bus frequencies to
|
||||
|
|
@ -2349,6 +2348,7 @@ struct X86CPUClass {
|
|||
*/
|
||||
const X86CPUModel *model;
|
||||
|
||||
bool max_features; /* Enable all supported features automatically */
|
||||
bool host_cpuid_required;
|
||||
int ordering;
|
||||
bool migration_safe;
|
||||
|
|
|
|||
|
|
@ -61,13 +61,14 @@ static void hvf_cpu_xsave_init(void)
|
|||
static void hvf_cpu_instance_init(CPUState *cs)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(cs);
|
||||
X86CPUClass *xcc = X86_CPU_GET_CLASS(cpu);
|
||||
|
||||
host_cpu_instance_init(cpu);
|
||||
|
||||
/* Special cases not set in the X86CPUDefinition structs: */
|
||||
/* TODO: in-kernel irqchip for hvf */
|
||||
|
||||
if (cpu->max_features) {
|
||||
if (xcc->max_features) {
|
||||
hvf_cpu_max_instance_init(cpu);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -41,6 +41,7 @@ static void kvm_set_guest_phys_bits(CPUState *cs)
|
|||
static bool kvm_cpu_realizefn(CPUState *cs, Error **errp)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(cs);
|
||||
X86CPUClass *xcc = X86_CPU_GET_CLASS(cpu);
|
||||
CPUX86State *env = &cpu->env;
|
||||
bool ret;
|
||||
|
||||
|
|
@ -63,7 +64,7 @@ static bool kvm_cpu_realizefn(CPUState *cs, Error **errp)
|
|||
* check/update ucode_rev, phys_bits, guest_phys_bits, mwait
|
||||
* cpu_common_realizefn() (via xcc->parent_realize)
|
||||
*/
|
||||
if (cpu->max_features) {
|
||||
if (xcc->max_features) {
|
||||
if (enable_cpu_pm) {
|
||||
if (kvm_has_waitpkg()) {
|
||||
env->features[FEAT_7_0_ECX] |= CPUID_7_0_ECX_WAITPKG;
|
||||
|
|
@ -216,7 +217,7 @@ static void kvm_cpu_instance_init(CPUState *cs)
|
|||
x86_cpu_apply_props(cpu, kvm_default_props);
|
||||
}
|
||||
|
||||
if (cpu->max_features) {
|
||||
if (xcc->max_features) {
|
||||
kvm_cpu_max_instance_init(cpu);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue