|
|
@@ -3350,6 +3350,16 @@ static int svm_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr)
|
|
|
case MSR_VM_IGNNE:
|
|
|
vcpu_unimpl(vcpu, "unimplemented wrmsr: 0x%x data 0x%llx\n", ecx, data);
|
|
|
break;
|
|
|
+ case MSR_IA32_CR_PAT:
|
|
|
+ if (npt_enabled) {
|
|
|
+ if (!kvm_mtrr_valid(vcpu, MSR_IA32_CR_PAT, data))
|
|
|
+ return 1;
|
|
|
+ vcpu->arch.pat = data;
|
|
|
+ svm_set_guest_pat(svm, &svm->vmcb->save.g_pat);
|
|
|
+ mark_dirty(svm->vmcb, VMCB_NPT);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ /* fall through */
|
|
|
default:
|
|
|
return kvm_set_msr_common(vcpu, msr);
|
|
|
}
|