Commit bc48f6f5 authored by Paolo Bonzini's avatar Paolo Bonzini Committed by Ben Hutchings

KVM: x86: expose MSR_TSC_AUX to userspace

commit 9dbe6cf9 upstream.

If we do not do this, it is not properly saved and restored across
migration.  Windows notices due to its self-protection mechanisms,
and is very upset about it (blue screen of death).

Cc: Radim Krcmar <rkrcmar@redhat.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
[bwh: Backported to 3.2:
 - We didn't yet have the switch() in kvm_init_msr_list as MPX is not
   supported at all
 - Adjust context]
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
parent 558c1f07
...@@ -834,7 +834,8 @@ static u32 msrs_to_save[] = { ...@@ -834,7 +834,8 @@ static u32 msrs_to_save[] = {
#ifdef CONFIG_X86_64 #ifdef CONFIG_X86_64
MSR_CSTAR, MSR_KERNEL_GS_BASE, MSR_SYSCALL_MASK, MSR_LSTAR, MSR_CSTAR, MSR_KERNEL_GS_BASE, MSR_SYSCALL_MASK, MSR_LSTAR,
#endif #endif
MSR_IA32_TSC, MSR_IA32_CR_PAT, MSR_VM_HSAVE_PA MSR_IA32_TSC, MSR_IA32_CR_PAT, MSR_VM_HSAVE_PA,
MSR_TSC_AUX,
}; };
static unsigned num_msrs_to_save; static unsigned num_msrs_to_save;
...@@ -3867,6 +3868,20 @@ static void kvm_init_msr_list(void) ...@@ -3867,6 +3868,20 @@ static void kvm_init_msr_list(void)
for (i = j = KVM_SAVE_MSRS_BEGIN; i < ARRAY_SIZE(msrs_to_save); i++) { for (i = j = KVM_SAVE_MSRS_BEGIN; i < ARRAY_SIZE(msrs_to_save); i++) {
if (rdmsr_safe(msrs_to_save[i], &dummy[0], &dummy[1]) < 0) if (rdmsr_safe(msrs_to_save[i], &dummy[0], &dummy[1]) < 0)
continue; continue;
/*
* Even MSRs that are valid in the host may not be exposed
* to the guests in some cases.
*/
switch (msrs_to_save[i]) {
case MSR_TSC_AUX:
if (!kvm_x86_ops->rdtscp_supported())
continue;
break;
default:
break;
}
if (j < i) if (j < i)
msrs_to_save[j] = msrs_to_save[i]; msrs_to_save[j] = msrs_to_save[i];
j++; j++;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment