diff options
author | neel <neel@FreeBSD.org> | 2015-04-30 19:23:50 +0000 |
---|---|---|
committer | neel <neel@FreeBSD.org> | 2015-04-30 19:23:50 +0000 |
commit | 6641e0d4f2626ba3464106e70af25f6fb14d89b5 (patch) | |
tree | bb7f35dd8caac5729a65a5eba8fc62319a94a817 /sys/amd64/vmm/intel | |
parent | 4df8afdd5875cc59a03042c997ef7126e0b1cab8 (diff) | |
download | FreeBSD-src-6641e0d4f2626ba3464106e70af25f6fb14d89b5.zip FreeBSD-src-6641e0d4f2626ba3464106e70af25f6fb14d89b5.tar.gz |
Advertise the MTRR feature via CPUID and emulate the minimal set of MTRR MSRs.
This is required for booting Windows guests.
Reported by: Leon Dang (ldang@nahannisys.com)
MFC after: 2 weeks
Diffstat (limited to 'sys/amd64/vmm/intel')
-rw-r--r-- | sys/amd64/vmm/intel/vmx_msr.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/sys/amd64/vmm/intel/vmx_msr.c b/sys/amd64/vmm/intel/vmx_msr.c index e517778..d54304d 100644 --- a/sys/amd64/vmm/intel/vmx_msr.c +++ b/sys/amd64/vmm/intel/vmx_msr.c @@ -396,6 +396,13 @@ vmx_rdmsr(struct vmx *vmx, int vcpuid, u_int num, uint64_t *val, bool *retu) error = 0; switch (num) { + case MSR_MTRRcap: + case MSR_MTRRdefType: + case MSR_MTRR4kBase ... MSR_MTRR4kBase + 8: + case MSR_MTRR16kBase ... MSR_MTRR16kBase + 1: + case MSR_MTRR64kBase: + *val = 0; + break; case MSR_IA32_MISC_ENABLE: *val = misc_enable; break; @@ -427,6 +434,14 @@ vmx_wrmsr(struct vmx *vmx, int vcpuid, u_int num, uint64_t val, bool *retu) error = 0; switch (num) { + case MSR_MTRRcap: + vm_inject_gp(vmx->vm, vcpuid); + break; + case MSR_MTRRdefType: + case MSR_MTRR4kBase ... MSR_MTRR4kBase + 8: + case MSR_MTRR16kBase ... MSR_MTRR16kBase + 1: + case MSR_MTRR64kBase: + break; /* Ignore writes */ case MSR_IA32_MISC_ENABLE: changed = val ^ misc_enable; /* |