Patch "KVM/VMX: Emulate MSR_IA32_ARCH_CAPABILITIES" has been added to the 4.9-stable tree
Subsystems (3)
This is a note to let you know that I've just added the patch titled
KVM/VMX: Emulate MSR_IA32_ARCH_CAPABILITIES
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
kvm-vmx-emulate-msr_ia32_arch_capabilities.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
28c1c9fabf48d6ad596273a11c46e0d0da3e14cdMon Sep 17 00:00:00 2001
From: KarimAllah Ahmed <[email protected]>
Date: Thu, 1 Feb 2018 22:59:44 +0100
Subject: KVM/VMX: Emulate MSR_IA32_ARCH_CAPABILITIES
From: KarimAllah Ahmed <[email protected]>
commit 28c1c9fabf48d6ad596273a11c46e0d0da3e14cd upstream.
Intel processors use MSR_IA32_ARCH_CAPABILITIES MSR to indicate RDCL_NO (bit 0) and IBRS_ALL (bit 1). This is a read-only MSR. By default the contents will come directly from the hardware, but user-space can still override it.
[dwmw2: The bit in kvm_cpuid_7_0_edx_x86_features can be unconditional]
--- arch/x86/kvm/cpuid.c | 8 +++++++- arch/x86/kvm/cpuid.h | 8 ++++++++ arch/x86/kvm/vmx.c | 15 +++++++++++++++ arch/x86/kvm/x86.c | 1 + 4 files changed, 31 insertions(+), 1 deletion(-)
arch/x86/kvm/cpuid.c +7 -1
@@ -380,6 +380,10 @@ static inline int __do_cpuid_ent(struct/* cpuid 7.0.ecx*/ const u32 kvm_cpuid_7_0_ecx_x86_features =F (PKU ) |0 /*OSPKE*/ ; +/* cpuid 7.0.edx*/ +const u32 kvm_cpuid_7_0_edx_x86_features = +F (ARCH_CAPABILITIES ); +/* all calls to cpuid_count() should be made on the same cpu */ get_cpu ();
@@ -462,12 +466,14 @@ static inline int __do_cpuid_ent(struct/* PKU is not yet implemented for shadow paging. */ if (!tdp_enabled || !boot_cpu_has (X86_FEATURE_OSPKE )) entry->ecx &= ~F (PKU ); + entry->edx &= kvm_cpuid_7_0_edx_x86_features; +cpuid_mask (&entry->edx,CPUID_7_EDX ); }else { entry->ebx =0 ; entry->ecx =0 ; + entry->edx =0 ; } entry->eax =0 ; - entry->edx =0 ;break ; }case 9 :
arch/x86/kvm/cpuid.h +8 -0
@@ -171,6 +171,14 @@ static inline bool guest_cpuid_has_ibpb(return best && (best->edx &bit (X86_FEATURE_SPEC_CTRL )); } +static inline bool guest_cpuid_has_arch_capabilities (struct kvm_vcpu *vcpu) +{ +struct kvm_cpuid_entry2 *best; + + best =kvm_find_cpuid_entry (vcpu,7 ,0 ); +return best && (best->edx &bit (X86_FEATURE_ARCH_CAPABILITIES )); +} +/* * NRIPS is provided through cpuidfn 0x8000000a.edx bit 3
arch/x86/kvm/vmx.c +15 -0
@@ -550,6 +550,8 @@ struct vcpu_vmx {u64 msr_guest_kernel_gs_base;#endif +u64 arch_capabilities; +u32 vm_entry_controls_shadow;u32 vm_exit_controls_shadow;/*
@@ -2981,6 +2983,12 @@ static int vmx_get_msr(struct kvm_vcpu *case MSR_IA32_TSC : msr_info->data =guest_read_tsc (vcpu);break ; +case MSR_IA32_ARCH_CAPABILITIES : +if (!msr_info->host_initiated && + !guest_cpuid_has_arch_capabilities (vcpu)) +return 1 ; + msr_info->data =to_vmx (vcpu)->arch_capabilities; +break ;case MSR_IA32_SYSENTER_CS : msr_info->data =vmcs_read32 (GUEST_SYSENTER_CS );break ;
@@ -3112,6 +3120,11 @@ static int vmx_set_msr(struct kvm_vcpu *vmx_disable_intercept_for_msr (vmx->vmcs01.msr_bitmap,MSR_IA32_PRED_CMD ,MSR_TYPE_W );break ; +case MSR_IA32_ARCH_CAPABILITIES : +if (!msr_info->host_initiated) +return 1 ; + vmx->arch_capabilities = data; +break ;case MSR_IA32_CR_PAT :if (vmcs_config.vmentry_ctrl &VM_ENTRY_LOAD_IA32_PAT ) {if (!kvm_mtrr_valid (vcpu,MSR_IA32_CR_PAT , data))
@@ -5202,6 +5215,8 @@ static int vmx_vcpu_setup(struct vcpu_vm ++vmx->nmsrs; } +if (boot_cpu_has (X86_FEATURE_ARCH_CAPABILITIES )) +rdmsrl (MSR_IA32_ARCH_CAPABILITIES , vmx->arch_capabilities);vm_exit_controls_init (vmx, vmcs_config.vmexit_ctrl);
arch/x86/kvm/x86.c +1 -0
@@ -975,6 +975,7 @@ static u32 msrs_to_save[] = {#endif MSR_IA32_TSC ,MSR_IA32_CR_PAT ,MSR_VM_HSAVE_PA ,MSR_IA32_FEATURE_CONTROL ,MSR_IA32_BNDCFGS ,MSR_TSC_AUX , + MSR_IA32_ARCH_CAPABILITIES };static unsigned num_msrs_to_save;
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/kvm-vmx-allow-direct-access-to-msr_ia32_spec_ctrl.patch queue-4.9/kvm-x86-add-ibpb-support.patch queue-4.9/kvm-svm-allow-direct-access-to-msr_ia32_spec_ctrl.patch queue-4.9/kvm-vmx-emulate-msr_ia32_arch_capabilities.patch