Skip to content

Commit

Permalink
KVM: x86: Use KVM-governed feature framework to track "LAM enabled"
Browse files Browse the repository at this point in the history
Upstream commit: 183bdd1
Conflict: none

Use the governed feature framework to track if Linear Address Masking (LAM)
is "enabled", i.e. if LAM can be used by the guest.

Using the framework to avoid the relative expensive call guest_cpuid_has()
during cr3 and vmexit handling paths for LAM.

No functional change intended.

Intel-SIG: commit 183bdd1 KVM: x86: Use KVM-governed feature
framework to track "LAM enabled"
Backport KVM Linear Address Masking (LAM) support.

Signed-off-by: Binbin Wu <[email protected]>
Tested-by: Xuelian Guo <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Sean Christopherson <[email protected]>
[ Zhiquan Li: amend commit log ]
Signed-off-by: Zhiquan Li <[email protected]>
  • Loading branch information
Binbin Wu authored and Avenger-285714 committed Dec 27, 2024
1 parent 979f0ff commit 08e842c
Show file tree
Hide file tree
Showing 4 changed files with 4 additions and 4 deletions.
3 changes: 1 addition & 2 deletions arch/x86/kvm/cpuid.h
Original file line number Diff line number Diff line change
Expand Up @@ -285,8 +285,7 @@ static __always_inline bool guest_can_use(struct kvm_vcpu *vcpu,

static inline bool kvm_vcpu_is_legal_cr3(struct kvm_vcpu *vcpu, unsigned long cr3)
{
if (kvm_cpu_cap_has(X86_FEATURE_LAM) &&
guest_cpuid_has(vcpu, X86_FEATURE_LAM))
if (guest_can_use(vcpu, X86_FEATURE_LAM))
cr3 &= ~(X86_CR3_LAM_U48 | X86_CR3_LAM_U57);

return kvm_vcpu_is_legal_gpa(vcpu, cr3);
Expand Down
1 change: 1 addition & 0 deletions arch/x86/kvm/governed_features.h
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ KVM_GOVERNED_X86_FEATURE(PAUSEFILTER)
KVM_GOVERNED_X86_FEATURE(PFTHRESHOLD)
KVM_GOVERNED_X86_FEATURE(VGIF)
KVM_GOVERNED_X86_FEATURE(VNMI)
KVM_GOVERNED_X86_FEATURE(LAM)

#undef KVM_GOVERNED_X86_FEATURE
#undef KVM_GOVERNED_FEATURE
3 changes: 1 addition & 2 deletions arch/x86/kvm/mmu.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,8 +148,7 @@ static inline unsigned long kvm_get_active_pcid(struct kvm_vcpu *vcpu)

static inline unsigned long kvm_get_active_cr3_lam_bits(struct kvm_vcpu *vcpu)
{
if (!kvm_cpu_cap_has(X86_FEATURE_LAM) ||
!guest_cpuid_has(vcpu, X86_FEATURE_LAM))
if (!guest_can_use(vcpu, X86_FEATURE_LAM))
return 0;

return kvm_read_cr3(vcpu) & (X86_CR3_LAM_U48 | X86_CR3_LAM_U57);
Expand Down
1 change: 1 addition & 0 deletions arch/x86/kvm/vmx/vmx.c
Original file line number Diff line number Diff line change
Expand Up @@ -7842,6 +7842,7 @@ static void vmx_vcpu_after_set_cpuid(struct kvm_vcpu *vcpu)
kvm_governed_feature_check_and_set(vcpu, X86_FEATURE_XSAVES);

kvm_governed_feature_check_and_set(vcpu, X86_FEATURE_VMX);
kvm_governed_feature_check_and_set(vcpu, X86_FEATURE_LAM);

vmx_setup_uret_msrs(vmx);

Expand Down

0 comments on commit 08e842c

Please sign in to comment.