@@ -389,16 +389,31 @@ static void pc_init_pci_1_2(MachineState *machine)
/* PC init function for pc-0.10 to pc-0.13, and reused by xenfv */
static void pc_init_pci_no_kvmclock(MachineState *machine)
{
- has_pci_info = false;
- has_acpi_build = false;
- smbios_defaults = false;
- gigabyte_align = false;
+ /* Copy from pc_compat_2_0(): */
smbios_legacy_mode = true;
has_reserved_memory = false;
+
+ /* Copy from pc_compat_1_7(): */
+ smbios_defaults = false;
+ gigabyte_align = false;
option_rom_has_mr = true;
+ x86_cpu_compat_disable_kvm_features(FEAT_1_ECX, CPUID_EXT_X2APIC);
+
+ /* Copy from pc_compat_1_6(): */
+ has_pci_info = false;
rom_file_has_mr = false;
- x86_cpu_compat_disable_kvm_features(FEAT_KVM, KVM_FEATURE_PV_EOI);
+ has_acpi_build = false;
+
+ /* Copy from pc_compat_1_4(): */
+ 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);
+
+ /* Copy from pc_compat_1_3(): */
enable_compat_apic_id_mode();
+
+ /* Copy from pc_compat_1_2(): */
+ x86_cpu_compat_disable_kvm_features(FEAT_KVM, KVM_FEATURE_PV_EOI);
+
pc_init1(machine, 1, 0);
}
pc-0.13 and older were missing some compat code that is present on newer machine-types: * x86_cpu_compat_disable_kvm_features(FEAT_1_ECX, CPUID_EXT_X2APIC); (pc-i440fx-1.7 and older) * x86_cpu_compat_set_features("n270", FEAT_1_ECX, 0, CPUID_EXT_MOVBE); (pc-i440fx-1.4 and older) * x86_cpu_compat_set_features("Westmere", FEAT_1_ECX, 0, CPUID_EXT_PCLMULQDQ); (pc-i440fx-1.4 and older) Add those missing bits to pc_init_pci_no_kvmclock(), to make sure pc-0.13 and older are compatible with the older QEMU versions. While at it, reorder pc_init_pci_no_kvmclock() and document where each line is was copied from. Signed-off-by: Eduardo Habkost <ehabkost@redhat.com> --- hw/i386/pc_piix.c | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-)