pc: Use PC_COMPAT_* for CPUID feature compatibility
Now we can use compat_props to keep CPUID feature compatibility, using the boolean QOM properties for CPUID feature flags. This simplifies the compatibility code, and reduces duplication between pc_piix.c and pc_q35.c. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
e33d22fab3
commit
27add38141
@ -319,24 +319,6 @@ static void pc_compat_2_2(MachineState *machine)
|
|||||||
{
|
{
|
||||||
pc_compat_2_3(machine);
|
pc_compat_2_3(machine);
|
||||||
rsdp_in_ram = false;
|
rsdp_in_ram = false;
|
||||||
x86_cpu_compat_set_features("kvm64", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("kvm32", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Conroe", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Penryn", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Nehalem", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Westmere", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("SandyBridge", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Haswell", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Broadwell", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Opteron_G1", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Opteron_G2", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Opteron_G3", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Opteron_G4", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Opteron_G5", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Haswell", FEAT_1_ECX, 0, CPUID_EXT_F16C);
|
|
||||||
x86_cpu_compat_set_features("Haswell", FEAT_1_ECX, 0, CPUID_EXT_RDRAND);
|
|
||||||
x86_cpu_compat_set_features("Broadwell", FEAT_1_ECX, 0, CPUID_EXT_F16C);
|
|
||||||
x86_cpu_compat_set_features("Broadwell", FEAT_1_ECX, 0, CPUID_EXT_RDRAND);
|
|
||||||
machine->suppress_vmdesc = true;
|
machine->suppress_vmdesc = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -346,8 +328,6 @@ static void pc_compat_2_1(MachineState *machine)
|
|||||||
|
|
||||||
pc_compat_2_2(machine);
|
pc_compat_2_2(machine);
|
||||||
smbios_uuid_encoded = false;
|
smbios_uuid_encoded = false;
|
||||||
x86_cpu_compat_set_features("coreduo", FEAT_1_ECX, CPUID_EXT_VMX, 0);
|
|
||||||
x86_cpu_compat_set_features("core2duo", FEAT_1_ECX, CPUID_EXT_VMX, 0);
|
|
||||||
x86_cpu_compat_kvm_no_autodisable(FEAT_8000_0001_ECX, CPUID_EXT3_SVM);
|
x86_cpu_compat_kvm_no_autodisable(FEAT_8000_0001_ECX, CPUID_EXT3_SVM);
|
||||||
pcms->enforce_aligned_dimm = false;
|
pcms->enforce_aligned_dimm = false;
|
||||||
}
|
}
|
||||||
@ -402,8 +382,6 @@ static void pc_compat_1_5(MachineState *machine)
|
|||||||
static void pc_compat_1_4(MachineState *machine)
|
static void pc_compat_1_4(MachineState *machine)
|
||||||
{
|
{
|
||||||
pc_compat_1_5(machine);
|
pc_compat_1_5(machine);
|
||||||
x86_cpu_compat_set_features("n270", FEAT_1_ECX, 0, CPUID_EXT_MOVBE);
|
|
||||||
x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, 0, CPUID_EXT_PCLMULQDQ);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static void pc_compat_1_3(MachineState *machine)
|
static void pc_compat_1_3(MachineState *machine)
|
||||||
|
@ -302,24 +302,6 @@ static void pc_compat_2_2(MachineState *machine)
|
|||||||
{
|
{
|
||||||
pc_compat_2_3(machine);
|
pc_compat_2_3(machine);
|
||||||
rsdp_in_ram = false;
|
rsdp_in_ram = false;
|
||||||
x86_cpu_compat_set_features("kvm64", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("kvm32", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Conroe", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Penryn", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Nehalem", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Westmere", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("SandyBridge", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Haswell", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Broadwell", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Opteron_G1", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Opteron_G2", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Opteron_G3", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Opteron_G4", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Opteron_G5", FEAT_1_EDX, 0, CPUID_VME);
|
|
||||||
x86_cpu_compat_set_features("Haswell", FEAT_1_ECX, 0, CPUID_EXT_F16C);
|
|
||||||
x86_cpu_compat_set_features("Haswell", FEAT_1_ECX, 0, CPUID_EXT_RDRAND);
|
|
||||||
x86_cpu_compat_set_features("Broadwell", FEAT_1_ECX, 0, CPUID_EXT_F16C);
|
|
||||||
x86_cpu_compat_set_features("Broadwell", FEAT_1_ECX, 0, CPUID_EXT_RDRAND);
|
|
||||||
machine->suppress_vmdesc = true;
|
machine->suppress_vmdesc = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -330,8 +312,6 @@ static void pc_compat_2_1(MachineState *machine)
|
|||||||
pc_compat_2_2(machine);
|
pc_compat_2_2(machine);
|
||||||
pcms->enforce_aligned_dimm = false;
|
pcms->enforce_aligned_dimm = false;
|
||||||
smbios_uuid_encoded = false;
|
smbios_uuid_encoded = false;
|
||||||
x86_cpu_compat_set_features("coreduo", FEAT_1_ECX, CPUID_EXT_VMX, 0);
|
|
||||||
x86_cpu_compat_set_features("core2duo", FEAT_1_ECX, CPUID_EXT_VMX, 0);
|
|
||||||
x86_cpu_compat_kvm_no_autodisable(FEAT_8000_0001_ECX, CPUID_EXT3_SVM);
|
x86_cpu_compat_kvm_no_autodisable(FEAT_8000_0001_ECX, CPUID_EXT3_SVM);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -367,8 +347,6 @@ static void pc_compat_1_5(MachineState *machine)
|
|||||||
static void pc_compat_1_4(MachineState *machine)
|
static void pc_compat_1_4(MachineState *machine)
|
||||||
{
|
{
|
||||||
pc_compat_1_5(machine);
|
pc_compat_1_5(machine);
|
||||||
x86_cpu_compat_set_features("n270", FEAT_1_ECX, 0, CPUID_EXT_MOVBE);
|
|
||||||
x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, 0, CPUID_EXT_PCLMULQDQ);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DEFINE_Q35_MACHINE(suffix, name, compatfn, optionfn) \
|
#define DEFINE_Q35_MACHINE(suffix, name, compatfn, optionfn) \
|
||||||
|
@ -374,11 +374,111 @@ bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *);
|
|||||||
|
|
||||||
#define PC_COMPAT_2_2 \
|
#define PC_COMPAT_2_2 \
|
||||||
PC_COMPAT_2_3 \
|
PC_COMPAT_2_3 \
|
||||||
HW_COMPAT_2_2
|
HW_COMPAT_2_2 \
|
||||||
|
{\
|
||||||
|
.driver = "kvm64" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vme",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "kvm32" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vme",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Conroe" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vme",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Penryn" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vme",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Nehalem" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vme",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Westmere" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vme",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "SandyBridge" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vme",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Haswell" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vme",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Broadwell" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vme",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Opteron_G1" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vme",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Opteron_G2" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vme",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Opteron_G3" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vme",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Opteron_G4" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vme",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Opteron_G5" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vme",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Haswell" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "f16c",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Haswell" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "rdrand",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Broadwell" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "f16c",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Broadwell" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "rdrand",\
|
||||||
|
.value = "off",\
|
||||||
|
},
|
||||||
|
|
||||||
#define PC_COMPAT_2_1 \
|
#define PC_COMPAT_2_1 \
|
||||||
PC_COMPAT_2_2 \
|
PC_COMPAT_2_2 \
|
||||||
HW_COMPAT_2_1
|
HW_COMPAT_2_1 \
|
||||||
|
{\
|
||||||
|
.driver = "coreduo" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vmx",\
|
||||||
|
.value = "on",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "core2duo" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "vmx",\
|
||||||
|
.value = "on",\
|
||||||
|
},
|
||||||
|
|
||||||
#define PC_COMPAT_2_0 \
|
#define PC_COMPAT_2_0 \
|
||||||
PC_COMPAT_2_1 \
|
PC_COMPAT_2_1 \
|
||||||
@ -589,6 +689,16 @@ bool e820_get_entry(int, uint32_t, uint64_t *, uint64_t *);
|
|||||||
.driver = "486-" TYPE_X86_CPU,\
|
.driver = "486-" TYPE_X86_CPU,\
|
||||||
.property = "model",\
|
.property = "model",\
|
||||||
.value = stringify(0),\
|
.value = stringify(0),\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "n270" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "movbe",\
|
||||||
|
.value = "off",\
|
||||||
|
},\
|
||||||
|
{\
|
||||||
|
.driver = "Westmere" "-" TYPE_X86_CPU,\
|
||||||
|
.property = "pclmulqdq",\
|
||||||
|
.value = "off",\
|
||||||
},
|
},
|
||||||
|
|
||||||
static inline void pc_common_machine_options(MachineClass *m)
|
static inline void pc_common_machine_options(MachineClass *m)
|
||||||
|
Loading…
Reference in New Issue
Block a user