QOM CPUState and X86CPU
* Cleanups for -cpu ...,enforce -----BEGIN PGP SIGNATURE----- Version: GnuPG v2.0.22 (GNU/Linux) iQIcBAABAgAGBQJUWPC9AAoJEPou0S0+fgE/AgkQAKNgbRKvAtyPJMiPqg0pUhpj fdW+Tu99t4ZcNgYoc/yn8tKd2U/RE3rfCti7RWKeb7XjbkFjE9twuoJ1z3rs1yYn W3ARLWMjOgM5K2R+scSyTlPQVIWOHNHDg6NNOUmrQk/TC27HbuLzoqsKZHJs4Gbt UnYMPrQ1mW1auq0VAQxRBkrCctQdkBDZ2XqlWQbLyvpfzqyB1ejJdzzAa3bdqzgy 9sfPrwq41OpDi9AEJw5gMjDqP6gNc3pXA2MXHUgFIODKcpoUmdbTKcjfYFGG9li4 7BaruhBrtqtZwpWK2PNSLBExyaNLPipcNQc+HvgeVoZ5DrubcKn4Ti1t/UIXqOZt Mf+k1kr8NV5jtPK5lD1Erl3QuCrtvbfFvSnsG1T0uG3h17bQEVxWYxaW6E0qaiDY VI8hKZj5m5T0cS0jqbU2TuXY1gxtC+BMWJRmM1uNwgtQf0VunAtuQYRKTwjzwed+ aAT+Ln5emNKKVvhi9Z0piF95F4KH4u26nZEmlls5KVGwPYwVkRxvkRr0oWm73tnZ 5NDW5sH0U4GXzvvhq3DNZOtICwNoHBk5G0FuZuUfiH6VahQ/ODJOyI0mfZzd/xsN T7cXljUmh1e8BG+GDDdKi3PgojORKvBkFd34AO4gWuOsGVQjy5nGYVDawCJmEg01 QNO6XXpkzlpX34sF8T52 =OFcv -----END PGP SIGNATURE----- Merge remote-tracking branch 'remotes/afaerber/tags/qom-cpu-for-peter' into staging QOM CPUState and X86CPU * Cleanups for -cpu ...,enforce * remotes/afaerber/tags/qom-cpu-for-peter: target-i386: Disable SVM by default in KVM mode target-i386: Don't enable nested VMX by default target-i386: Remove unsupported bits from all CPU models target-i386: Disable CPUID_ACPI by default in KVM mode target-i386: Rename KVM auto-feature-enable compat function pc: Create pc_compat_2_1() functions Conflicts: hw/i386/pc_piix.c hw/i386/pc_q35.c [PMM: Fixed minor textual conflicts] Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
commit
2bb41e5d30
@ -306,6 +306,9 @@ static void pc_init_pci(MachineState *machine)
|
||||
static void pc_compat_2_1(MachineState *machine)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
static void pc_compat_2_0(MachineState *machine)
|
||||
@ -340,7 +343,7 @@ static void pc_compat_1_7(MachineState *machine)
|
||||
gigabyte_align = false;
|
||||
option_rom_has_mr = true;
|
||||
legacy_acpi_table_size = 6414;
|
||||
x86_cpu_compat_disable_kvm_features(FEAT_1_ECX, CPUID_EXT_X2APIC);
|
||||
x86_cpu_compat_kvm_no_autoenable(FEAT_1_ECX, CPUID_EXT_X2APIC);
|
||||
}
|
||||
|
||||
static void pc_compat_1_6(MachineState *machine)
|
||||
@ -372,7 +375,7 @@ static void pc_compat_1_3(MachineState *machine)
|
||||
static void pc_compat_1_2(MachineState *machine)
|
||||
{
|
||||
pc_compat_1_3(machine);
|
||||
x86_cpu_compat_disable_kvm_features(FEAT_KVM, KVM_FEATURE_PV_EOI);
|
||||
x86_cpu_compat_kvm_no_autoenable(FEAT_KVM, KVM_FEATURE_PV_EOI);
|
||||
}
|
||||
|
||||
static void pc_init_pci_2_1(MachineState *machine)
|
||||
@ -443,7 +446,7 @@ static void pc_init_isa(MachineState *machine)
|
||||
if (!machine->cpu_model) {
|
||||
machine->cpu_model = "486";
|
||||
}
|
||||
x86_cpu_compat_disable_kvm_features(FEAT_KVM, KVM_FEATURE_PV_EOI);
|
||||
x86_cpu_compat_kvm_no_autoenable(FEAT_KVM, KVM_FEATURE_PV_EOI);
|
||||
enable_compat_apic_id_mode();
|
||||
pc_init1(machine, 0, 1);
|
||||
}
|
||||
|
@ -285,6 +285,9 @@ static void pc_q35_init(MachineState *machine)
|
||||
static void pc_compat_2_1(MachineState *machine)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
static void pc_compat_2_0(MachineState *machine)
|
||||
@ -301,7 +304,7 @@ static void pc_compat_1_7(MachineState *machine)
|
||||
smbios_defaults = false;
|
||||
gigabyte_align = false;
|
||||
option_rom_has_mr = true;
|
||||
x86_cpu_compat_disable_kvm_features(FEAT_1_ECX, CPUID_EXT_X2APIC);
|
||||
x86_cpu_compat_kvm_no_autoenable(FEAT_1_ECX, CPUID_EXT_X2APIC);
|
||||
}
|
||||
|
||||
static void pc_compat_1_6(MachineState *machine)
|
||||
|
@ -459,14 +459,21 @@ static uint32_t kvm_default_features[FEATURE_WORDS] = {
|
||||
/* Features that are not added by default to any CPU model when KVM is enabled.
|
||||
*/
|
||||
static uint32_t kvm_default_unset_features[FEATURE_WORDS] = {
|
||||
[FEAT_1_EDX] = CPUID_ACPI,
|
||||
[FEAT_1_ECX] = CPUID_EXT_MONITOR,
|
||||
[FEAT_8000_0001_ECX] = CPUID_EXT3_SVM,
|
||||
};
|
||||
|
||||
void x86_cpu_compat_disable_kvm_features(FeatureWord w, uint32_t features)
|
||||
void x86_cpu_compat_kvm_no_autoenable(FeatureWord w, uint32_t features)
|
||||
{
|
||||
kvm_default_features[w] &= ~features;
|
||||
}
|
||||
|
||||
void x86_cpu_compat_kvm_no_autodisable(FeatureWord w, uint32_t features)
|
||||
{
|
||||
kvm_default_unset_features[w] &= ~features;
|
||||
}
|
||||
|
||||
/*
|
||||
* Returns the set of feature flags that are supported and migratable by
|
||||
* QEMU, for a given FeatureWord.
|
||||
@ -678,10 +685,11 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
||||
.family = 16,
|
||||
.model = 2,
|
||||
.stepping = 3,
|
||||
/* Missing: CPUID_HT */
|
||||
.features[FEAT_1_EDX] =
|
||||
PPRO_FEATURES |
|
||||
CPUID_MTRR | CPUID_CLFLUSH | CPUID_MCA |
|
||||
CPUID_PSE36 | CPUID_VME | CPUID_HT,
|
||||
CPUID_PSE36 | CPUID_VME,
|
||||
.features[FEAT_1_ECX] =
|
||||
CPUID_EXT_SSE3 | CPUID_EXT_MONITOR | CPUID_EXT_CX16 |
|
||||
CPUID_EXT_POPCNT,
|
||||
@ -697,8 +705,9 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
||||
.features[FEAT_8000_0001_ECX] =
|
||||
CPUID_EXT3_LAHF_LM | CPUID_EXT3_SVM |
|
||||
CPUID_EXT3_ABM | CPUID_EXT3_SSE4A,
|
||||
/* Missing: CPUID_SVM_LBRV */
|
||||
.features[FEAT_SVM] =
|
||||
CPUID_SVM_NPT | CPUID_SVM_LBRV,
|
||||
CPUID_SVM_NPT,
|
||||
.xlevel = 0x8000001A,
|
||||
.model_id = "AMD Phenom(tm) 9550 Quad-Core Processor"
|
||||
},
|
||||
@ -709,15 +718,16 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
||||
.family = 6,
|
||||
.model = 15,
|
||||
.stepping = 11,
|
||||
/* Missing: CPUID_DTS, CPUID_HT, CPUID_TM, CPUID_PBE */
|
||||
.features[FEAT_1_EDX] =
|
||||
PPRO_FEATURES |
|
||||
CPUID_MTRR | CPUID_CLFLUSH | CPUID_MCA |
|
||||
CPUID_PSE36 | CPUID_VME | CPUID_DTS | CPUID_ACPI | CPUID_SS |
|
||||
CPUID_HT | CPUID_TM | CPUID_PBE,
|
||||
CPUID_PSE36 | CPUID_VME | CPUID_ACPI | CPUID_SS,
|
||||
/* Missing: CPUID_EXT_DTES64, CPUID_EXT_DSCPL, CPUID_EXT_EST,
|
||||
* CPUID_EXT_TM2, CPUID_EXT_XTPR, CPUID_EXT_PDCM, CPUID_EXT_VMX */
|
||||
.features[FEAT_1_ECX] =
|
||||
CPUID_EXT_SSE3 | CPUID_EXT_MONITOR | CPUID_EXT_SSSE3 |
|
||||
CPUID_EXT_DTES64 | CPUID_EXT_DSCPL | CPUID_EXT_VMX | CPUID_EXT_EST |
|
||||
CPUID_EXT_TM2 | CPUID_EXT_CX16 | CPUID_EXT_XTPR | CPUID_EXT_PDCM,
|
||||
CPUID_EXT_CX16,
|
||||
.features[FEAT_8000_0001_EDX] =
|
||||
CPUID_EXT2_LM | CPUID_EXT2_SYSCALL | CPUID_EXT2_NX,
|
||||
.features[FEAT_8000_0001_ECX] =
|
||||
@ -792,13 +802,15 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
||||
.family = 6,
|
||||
.model = 14,
|
||||
.stepping = 8,
|
||||
/* Missing: CPUID_DTS, CPUID_HT, CPUID_TM, CPUID_PBE */
|
||||
.features[FEAT_1_EDX] =
|
||||
PPRO_FEATURES | CPUID_VME |
|
||||
CPUID_MTRR | CPUID_CLFLUSH | CPUID_MCA | CPUID_DTS | CPUID_ACPI |
|
||||
CPUID_SS | CPUID_HT | CPUID_TM | CPUID_PBE,
|
||||
CPUID_MTRR | CPUID_CLFLUSH | CPUID_MCA | CPUID_ACPI |
|
||||
CPUID_SS,
|
||||
/* Missing: CPUID_EXT_EST, CPUID_EXT_TM2 , CPUID_EXT_XTPR,
|
||||
* CPUID_EXT_PDCM, CPUID_EXT_VMX */
|
||||
.features[FEAT_1_ECX] =
|
||||
CPUID_EXT_SSE3 | CPUID_EXT_MONITOR | CPUID_EXT_VMX |
|
||||
CPUID_EXT_EST | CPUID_EXT_TM2 | CPUID_EXT_XTPR | CPUID_EXT_PDCM,
|
||||
CPUID_EXT_SSE3 | CPUID_EXT_MONITOR,
|
||||
.features[FEAT_8000_0001_EDX] =
|
||||
CPUID_EXT2_NX,
|
||||
.xlevel = 0x80000008,
|
||||
@ -871,14 +883,16 @@ static X86CPUDefinition builtin_x86_defs[] = {
|
||||
.family = 6,
|
||||
.model = 28,
|
||||
.stepping = 2,
|
||||
/* Missing: CPUID_DTS, CPUID_HT, CPUID_TM, CPUID_PBE */
|
||||
.features[FEAT_1_EDX] =
|
||||
PPRO_FEATURES |
|
||||
CPUID_MTRR | CPUID_CLFLUSH | CPUID_MCA | CPUID_VME | CPUID_DTS |
|
||||
CPUID_ACPI | CPUID_SS | CPUID_HT | CPUID_TM | CPUID_PBE,
|
||||
CPUID_MTRR | CPUID_CLFLUSH | CPUID_MCA | CPUID_VME |
|
||||
CPUID_ACPI | CPUID_SS,
|
||||
/* Some CPUs got no CPUID_SEP */
|
||||
/* Missing: CPUID_EXT_DSCPL, CPUID_EXT_EST, CPUID_EXT_TM2,
|
||||
* CPUID_EXT_XTPR */
|
||||
.features[FEAT_1_ECX] =
|
||||
CPUID_EXT_SSE3 | CPUID_EXT_MONITOR | CPUID_EXT_SSSE3 |
|
||||
CPUID_EXT_DSCPL | CPUID_EXT_EST | CPUID_EXT_TM2 | CPUID_EXT_XTPR |
|
||||
CPUID_EXT_MOVBE,
|
||||
.features[FEAT_8000_0001_EDX] =
|
||||
(PPRO_FEATURES & CPUID_EXT2_AMD_ALIASES) |
|
||||
|
@ -1365,7 +1365,8 @@ void cpu_report_tpr_access(CPUX86State *env, TPRAccess access);
|
||||
void x86_cpu_compat_set_features(const char *cpu_model, FeatureWord w,
|
||||
uint32_t feat_add, uint32_t feat_remove);
|
||||
|
||||
void x86_cpu_compat_disable_kvm_features(FeatureWord w, uint32_t features);
|
||||
void x86_cpu_compat_kvm_no_autoenable(FeatureWord w, uint32_t features);
|
||||
void x86_cpu_compat_kvm_no_autodisable(FeatureWord w, uint32_t features);
|
||||
|
||||
|
||||
/* Return name of 32-bit register, from a R_* constant */
|
||||
|
Loading…
Reference in New Issue
Block a user