|
@@ -495,6 +495,13 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
|
|
entry->ecx &= kvm_supported_word6_x86_features;
|
|
entry->ecx &= kvm_supported_word6_x86_features;
|
|
cpuid_mask(&entry->ecx, 6);
|
|
cpuid_mask(&entry->ecx, 6);
|
|
break;
|
|
break;
|
|
|
|
+ case 0x80000007: /* Advanced power management */
|
|
|
|
+ /* invariant TSC is CPUID.80000007H:EDX[8] */
|
|
|
|
+ entry->edx &= (1 << 8);
|
|
|
|
+ /* mask against host */
|
|
|
|
+ entry->edx &= boot_cpu_data.x86_power;
|
|
|
|
+ entry->eax = entry->ebx = entry->ecx = 0;
|
|
|
|
+ break;
|
|
case 0x80000008: {
|
|
case 0x80000008: {
|
|
unsigned g_phys_as = (entry->eax >> 16) & 0xff;
|
|
unsigned g_phys_as = (entry->eax >> 16) & 0xff;
|
|
unsigned virt_as = max((entry->eax >> 8) & 0xff, 48U);
|
|
unsigned virt_as = max((entry->eax >> 8) & 0xff, 48U);
|
|
@@ -525,7 +532,6 @@ static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function,
|
|
case 3: /* Processor serial number */
|
|
case 3: /* Processor serial number */
|
|
case 5: /* MONITOR/MWAIT */
|
|
case 5: /* MONITOR/MWAIT */
|
|
case 6: /* Thermal management */
|
|
case 6: /* Thermal management */
|
|
- case 0x80000007: /* Advanced power management */
|
|
|
|
case 0xC0000002:
|
|
case 0xC0000002:
|
|
case 0xC0000003:
|
|
case 0xC0000003:
|
|
case 0xC0000004:
|
|
case 0xC0000004:
|