--- a/sys/platform/pc64/x86_64/identcpu.c +++ b/sys/platform/pc64/x86_64/identcpu.c @@ -1273,10 +1273,12 @@ static void print_svm_info(void) { u_int features, regs[4]; uint64_t msr; kprintf("\n SVM: "); + if (cpu_exthigh < 0x8000000A) + return; do_cpuid(0x8000000A, regs); features = regs[3]; - msr = rdmsr(MSR_AMD_VM_CR); - if ((msr & VM_CR_SVMDIS) && (msr & VM_CR_LOCK)) + if (rdmsr_safe(MSR_AMD_VM_CR, &msr) == 0 && + (msr & VM_CR_SVMDIS) && (msr & VM_CR_LOCK)) kprintf("(disabled in BIOS) "); @@ -1324,12 +1326,12 @@ static u_int vmx_settable(uint64_t basic, int msr, int true_msr) { uint64_t val; - if (basic & (1ULL << 55)) - val = rdmsr(true_msr); - else - val = rdmsr(msr); + if (rdmsr_safe((basic & (1ULL << 55)) ? true_msr : msr, &val) != 0) + return (0); /* Just report the controls that can be set to 1. */ return (u_int)(val >> 32); } @@ -1341,9 +1343,10 @@ static void print_vmx_info(void) { uint64_t basic, msr; u_int entry_ctls, exit_ctls, pin_ctls, proc_ctls, proc2_ctls; kprintf("\n VT-x: "); - msr = rdmsr(MSR_IA32_FEATURE_CONTROL); + if (rdmsr_safe(MSR_IA32_FEATURE_CONTROL, &msr) != 0) + msr = 0; if ((msr & IA32_FEATURE_CONTROL_LOCK) != 0 && (msr & IA32_FEATURE_CONTROL_OUT_SMX) == 0) kprintf("(disabled in BIOS) "); - basic = rdmsr(MSR_VMX_BASIC); + if (rdmsr_safe(MSR_VMX_BASIC, &basic) != 0) + return; pin_ctls = vmx_settable(basic, MSR_VMX_PINBASED_CTLS,