diff options
| author | Chao Gao <chao.gao@intel.com> | 2025-06-12 01:19:46 -0700 |
|---|---|---|
| committer | Sean Christopherson <seanjc@google.com> | 2025-06-24 15:42:12 -0700 |
| commit | 3f06b8927afa3cede5c2e70ee76659d4801e4667 (patch) | |
| tree | 57e2f2ed6ccb5b9c10b92454dddbef5e026f6aae /arch/x86/kvm/svm/svm.c | |
| parent | 58c81bc1e71de7d02848a1c1579256f5ebd38e07 (diff) | |
KVM: x86: Deduplicate MSR interception enabling and disabling
Extract a common function from MSR interception disabling logic and create
disabling and enabling functions based on it. This removes most of the
duplicated code for MSR interception disabling/enabling.
No functional change intended.
Signed-off-by: Chao Gao <chao.gao@intel.com>
Reviewed-by: Dapeng Mi <dapeng1.mi@linux.intel.com>
Link: https://lore.kernel.org/r/20250612081947.94081-2-chao.gao@intel.com
[sean: s/enable/set, inline the wrappers]
Signed-off-by: Sean Christopherson <seanjc@google.com>
Diffstat (limited to 'arch/x86/kvm/svm/svm.c')
| -rw-r--r-- | arch/x86/kvm/svm/svm.c | 21 |
1 files changed, 3 insertions, 18 deletions
diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c index 3c5e82ed6bd4..803574920e41 100644 --- a/arch/x86/kvm/svm/svm.c +++ b/arch/x86/kvm/svm/svm.c @@ -679,21 +679,21 @@ static bool msr_write_intercepted(struct kvm_vcpu *vcpu, u32 msr) return svm_test_msr_bitmap_write(msrpm, msr); } -void svm_disable_intercept_for_msr(struct kvm_vcpu *vcpu, u32 msr, int type) +void svm_set_intercept_for_msr(struct kvm_vcpu *vcpu, u32 msr, int type, bool set) { struct vcpu_svm *svm = to_svm(vcpu); void *msrpm = svm->msrpm; /* Don't disable interception for MSRs userspace wants to handle. */ if (type & MSR_TYPE_R) { - if (kvm_msr_allowed(vcpu, msr, KVM_MSR_FILTER_READ)) + if (!set && kvm_msr_allowed(vcpu, msr, KVM_MSR_FILTER_READ)) svm_clear_msr_bitmap_read(msrpm, msr); else svm_set_msr_bitmap_read(msrpm, msr); } if (type & MSR_TYPE_W) { - if (kvm_msr_allowed(vcpu, msr, KVM_MSR_FILTER_WRITE)) + if (!set && kvm_msr_allowed(vcpu, msr, KVM_MSR_FILTER_WRITE)) svm_clear_msr_bitmap_write(msrpm, msr); else svm_set_msr_bitmap_write(msrpm, msr); @@ -703,21 +703,6 @@ void svm_disable_intercept_for_msr(struct kvm_vcpu *vcpu, u32 msr, int type) svm->nested.force_msr_bitmap_recalc = true; } -void svm_enable_intercept_for_msr(struct kvm_vcpu *vcpu, u32 msr, int type) -{ - struct vcpu_svm *svm = to_svm(vcpu); - void *msrpm = svm->msrpm; - - if (type & MSR_TYPE_R) - svm_set_msr_bitmap_read(msrpm, msr); - - if (type & MSR_TYPE_W) - svm_set_msr_bitmap_write(msrpm, msr); - - svm_hv_vmcb_dirty_nested_enlightenments(vcpu); - svm->nested.force_msr_bitmap_recalc = true; -} - void *svm_alloc_permissions_map(unsigned long size, gfp_t gfp_mask) { unsigned int order = get_order(size); |