Emulate machine check related MSRs to allow guest OSes like Windows to boot.
Reported by: Leon Dang (ldang@nahannisys.com) MFC after: 2 weeks
This commit is contained in:
parent
9d0c86225f
commit
cd20ad9aa3
@ -110,6 +110,10 @@ svm_rdmsr(struct svm_softc *sc, int vcpu, u_int num, uint64_t *result,
|
||||
int error = 0;
|
||||
|
||||
switch (num) {
|
||||
case MSR_MCG_CAP:
|
||||
case MSR_MCG_STATUS:
|
||||
*result = 0;
|
||||
break;
|
||||
case MSR_MTRRcap:
|
||||
case MSR_MTRRdefType:
|
||||
case MSR_MTRR4kBase ... MSR_MTRR4kBase + 8:
|
||||
@ -135,6 +139,9 @@ svm_wrmsr(struct svm_softc *sc, int vcpu, u_int num, uint64_t val, bool *retu)
|
||||
int error = 0;
|
||||
|
||||
switch (num) {
|
||||
case MSR_MCG_CAP:
|
||||
case MSR_MCG_STATUS:
|
||||
break; /* ignore writes */
|
||||
case MSR_MTRRcap:
|
||||
vm_inject_gp(sc->vm, vcpu);
|
||||
break;
|
||||
|
@ -395,6 +395,10 @@ vmx_rdmsr(struct vmx *vmx, int vcpuid, u_int num, uint64_t *val, bool *retu)
|
||||
error = 0;
|
||||
|
||||
switch (num) {
|
||||
case MSR_MCG_CAP:
|
||||
case MSR_MCG_STATUS:
|
||||
*val = 0;
|
||||
break;
|
||||
case MSR_MTRRcap:
|
||||
case MSR_MTRRdefType:
|
||||
case MSR_MTRR4kBase ... MSR_MTRR4kBase + 8:
|
||||
@ -433,6 +437,9 @@ vmx_wrmsr(struct vmx *vmx, int vcpuid, u_int num, uint64_t val, bool *retu)
|
||||
error = 0;
|
||||
|
||||
switch (num) {
|
||||
case MSR_MCG_CAP:
|
||||
case MSR_MCG_STATUS:
|
||||
break; /* ignore writes */
|
||||
case MSR_MTRRcap:
|
||||
vm_inject_gp(vmx->vm, vcpuid);
|
||||
break;
|
||||
|
@ -285,17 +285,20 @@ x86_emulate_cpuid(struct vm *vm, int vcpu_id,
|
||||
* Hide thermal monitoring
|
||||
*/
|
||||
regs[3] &= ~(CPUID_ACPI | CPUID_TM);
|
||||
|
||||
/*
|
||||
* Machine check handling is done in the host.
|
||||
*/
|
||||
regs[3] &= ~(CPUID_MCA | CPUID_MCE);
|
||||
|
||||
/*
|
||||
* Hide the debug store capability.
|
||||
*/
|
||||
/*
|
||||
* Hide the debug store capability.
|
||||
*/
|
||||
regs[3] &= ~CPUID_DS;
|
||||
|
||||
/*
|
||||
* Advertise the Machine Check and MTRR capability.
|
||||
*
|
||||
* Some guest OSes (e.g. Windows) will not boot if
|
||||
* these features are absent.
|
||||
*/
|
||||
regs[3] |= (CPUID_MCA | CPUID_MCE | CPUID_MTRR);
|
||||
|
||||
logical_cpus = threads_per_core * cores_per_package;
|
||||
regs[1] &= ~CPUID_HTT_CORES;
|
||||
regs[1] |= (logical_cpus & 0xff) << 16;
|
||||
|
Loading…
Reference in New Issue
Block a user