diff --git a/xen/arch/x86/hvm/vmx/vmx.c b/xen/arch/x86/hvm/vmx/vmx.c index 2759e6f31e..50cbfed4dc 100644 --- a/xen/arch/x86/hvm/vmx/vmx.c +++ b/xen/arch/x86/hvm/vmx/vmx.c @@ -2699,6 +2699,13 @@ static int vmx_msr_read_intercept(unsigned int msr, uint64_t *msr_content) if ( vpmu_do_rdmsr(msr, msr_content) ) goto gp_fault; break; + + case MSR_INTEL_PLATFORM_INFO: + if ( rdmsr_safe(MSR_INTEL_PLATFORM_INFO, *msr_content) ) + goto gp_fault; + *msr_content = 0; + break; + default: if ( passive_domain_do_rdmsr(msr, msr_content) ) goto done; @@ -2918,6 +2925,13 @@ static int vmx_msr_write_intercept(unsigned int msr, uint64_t msr_content) if ( vpmu_do_wrmsr(msr, msr_content, 0) ) goto gp_fault; break; + + case MSR_INTEL_PLATFORM_INFO: + if ( msr_content || + rdmsr_safe(MSR_INTEL_PLATFORM_INFO, msr_content) ) + goto gp_fault; + break; + default: if ( passive_domain_do_wrmsr(msr, msr_content) ) return X86EMUL_OKAY; diff --git a/xen/arch/x86/traps.c b/xen/arch/x86/traps.c index b24ca74dce..24d173ff8a 100644 --- a/xen/arch/x86/traps.c +++ b/xen/arch/x86/traps.c @@ -2938,6 +2938,14 @@ static int emulate_privileged_op(struct cpu_user_regs *regs) if ( v->arch.debugreg[7] & DR7_ACTIVE_MASK ) wrmsrl(regs->_ecx, msr_content); break; + + case MSR_INTEL_PLATFORM_INFO: + if ( boot_cpu_data.x86_vendor != X86_VENDOR_INTEL || + msr_content || + rdmsr_safe(MSR_INTEL_PLATFORM_INFO, msr_content) ) + goto fail; + break; + case MSR_P6_PERFCTR(0)...MSR_P6_PERFCTR(7): case MSR_P6_EVNTSEL(0)...MSR_P6_EVNTSEL(3): case MSR_CORE_PERF_FIXED_CTR0...MSR_CORE_PERF_FIXED_CTR2: @@ -3066,6 +3074,14 @@ static int emulate_privileged_op(struct cpu_user_regs *regs) /* No extra capabilities are supported */ regs->eax = regs->edx = 0; break; + + case MSR_INTEL_PLATFORM_INFO: + if ( boot_cpu_data.x86_vendor != X86_VENDOR_INTEL || + rdmsr_safe(MSR_INTEL_PLATFORM_INFO, val) ) + goto fail; + regs->eax = regs->edx = 0; + break; + case MSR_P6_PERFCTR(0)...MSR_P6_PERFCTR(7): case MSR_P6_EVNTSEL(0)...MSR_P6_EVNTSEL(3): case MSR_CORE_PERF_FIXED_CTR0...MSR_CORE_PERF_FIXED_CTR2: