@@ -2281,6 +2281,7 @@ static int prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12,
{
struct vcpu_vmx *vmx = to_vmx(vcpu);
struct hv_enlightened_vmcs *hv_evmcs = vmx->nested.hv_evmcs;
+ struct msr_data msr_info;
bool load_guest_pdptrs_vmcs12 = false;
if (vmx->nested.dirty_vmcs12 || hv_evmcs) {
@@ -2404,6 +2405,16 @@ static int prepare_vmcs02(struct kvm_vcpu *vcpu, struct vmcs12 *vmcs12,
if (!enable_ept)
vcpu->arch.walk_mmu->inject_page_fault = vmx_inject_page_fault_nested;
+ if (vmcs12->vm_entry_controls & VM_ENTRY_LOAD_IA32_PERF_GLOBAL_CTRL) {
+ msr_info.host_initiated = false;
+ msr_info.index = MSR_CORE_PERF_GLOBAL_CTRL;
+ msr_info.data = vmcs12->guest_ia32_perf_global_ctrl;
+ if (kvm_set_msr(vcpu, &msr_info))
+ pr_debug_ratelimited(
+ "%s cannot write MSR (0x%x, 0x%llx)\n",
+ __func__, msr_info.index, msr_info.data);
+ }
+
kvm_rsp_write(vcpu, vmcs12->guest_rsp);
kvm_rip_write(vcpu, vmcs12->guest_rip);
return 0;