mirror of
https://github.com/Motorhead1991/qemu.git
synced 2025-08-04 08:13:54 -06:00
target-i386: Automatically set level/xlevel/xlevel2 when needed
Instead of requiring users and management software to be aware of required CPUID level/xlevel/xlevel2 values for each feature, automatically increase those values when features need them. This was already done for CPUID[7].EBX, and is now made generic for all CPUID feature flags. Unit test included, to make sure we don't break ABI on older machine-types and don't mess with the CPUID level values if they are explicitly set by the user. Reviewed-by: Richard Henderson <rth@twiddle.net> Signed-off-by: Eduardo Habkost <ehabkost@redhat.com>
This commit is contained in:
parent
df3e9af8fd
commit
c39c0edf9b
4 changed files with 133 additions and 13 deletions
|
@ -1111,9 +1111,12 @@ typedef struct CPUX86State {
|
|||
struct {} end_reset_fields;
|
||||
|
||||
/* processor features (e.g. for CPUID insn) */
|
||||
uint32_t cpuid_level;
|
||||
uint32_t cpuid_xlevel;
|
||||
uint32_t cpuid_xlevel2;
|
||||
/* Minimum level/xlevel/xlevel2, based on CPU model + features */
|
||||
uint32_t cpuid_min_level, cpuid_min_xlevel, cpuid_min_xlevel2;
|
||||
/* Maximum level/xlevel/xlevel2 value for auto-assignment: */
|
||||
uint32_t cpuid_max_level, cpuid_max_xlevel, cpuid_max_xlevel2;
|
||||
/* Actual level/xlevel/xlevel2 value: */
|
||||
uint32_t cpuid_level, cpuid_xlevel, cpuid_xlevel2;
|
||||
uint32_t cpuid_vendor1;
|
||||
uint32_t cpuid_vendor2;
|
||||
uint32_t cpuid_vendor3;
|
||||
|
@ -1218,6 +1221,9 @@ struct X86CPU {
|
|||
/* Compatibility bits for old machine types: */
|
||||
bool enable_cpuid_0xb;
|
||||
|
||||
/* Enable auto level-increase for all CPUID leaves */
|
||||
bool full_cpuid_auto_level;
|
||||
|
||||
/* if true fill the top bits of the MTRR_PHYSMASKn variable range */
|
||||
bool fill_mtrr_mask;
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue