This series fixes the inconsistency between CPUID[7].EBX features and all the rest of the configurable CPU features. This ensures that level/xlevel/xlevel2 will be set to appropriate values depending on the set of features enabled in a CPU model or in the command-line.
Changes v1 -> v2: * Coding style changes (split long lines) * Simplify compat logic: instead of 3 max_level* fields and 2 cpuid_auto_level_* fields, add a single full_cpuid_auto_level boolean field * If the user set level/xlevel/xlevel2 to 0 explicitly, do what was asked for (use UINT32_MAX as default value) Eduardo Habkost (6): target-i386: Remove unused X86CPUDefinition::xlevel2 field target-i386: Add a marker to end of the region zeroed on reset tests: Add test code for CPUID level/xlevel handling tests: Test CPUID level handling for old machines target-i386: Automatically set level/xlevel/xlevel2 when needed target-i386: Enable CPUID[0x8000000A] if SVM is enabled include/hw/i386/pc.h | 7 +- target-i386/cpu.c | 92 +++++++++++++++++++---- target-i386/cpu.h | 13 +++- tests/Makefile.include | 2 + tests/test-x86-cpuid-compat.c | 171 ++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 268 insertions(+), 17 deletions(-) create mode 100644 tests/test-x86-cpuid-compat.c -- 2.7.4