From 5904ba5172464cdf688567a06346351ab3a61fd3 Mon Sep 17 00:00:00 2001 From: Sean Christopherson Date: Tue, 10 Jun 2025 15:57:33 -0700 Subject: [PATCH] KVM: SVM: Return -EINVAL instead of MSR_INVALID to signal out-of-range MSR Return -EINVAL instead of MSR_INVALID from svm_msrpm_bit_nr() to indicate that the MSR isn't covered by one of the (currently) three MSRPM ranges, and delete the MSR_INVALID macro now that all users are gone. Link: https://lore.kernel.org/r/20250610225737.156318-29-seanjc@google.com Signed-off-by: Sean Christopherson --- arch/x86/kvm/svm/nested.c | 10 +++++----- arch/x86/kvm/svm/svm.h | 10 ++++------ 2 files changed, 9 insertions(+), 11 deletions(-) diff --git a/arch/x86/kvm/svm/nested.c b/arch/x86/kvm/svm/nested.c index fb0ac87df00a8..7ca45361ced36 100644 --- a/arch/x86/kvm/svm/nested.c +++ b/arch/x86/kvm/svm/nested.c @@ -223,10 +223,10 @@ int __init nested_svm_init_msrpm_merge_offsets(void) int i, j; for (i = 0; i < ARRAY_SIZE(merge_msrs); i++) { - u32 bit_nr = svm_msrpm_bit_nr(merge_msrs[i]); + int bit_nr = svm_msrpm_bit_nr(merge_msrs[i]); u32 offset; - if (WARN_ON(bit_nr == MSR_INVALID)) + if (WARN_ON(bit_nr < 0)) return -EIO; /* @@ -1354,9 +1354,9 @@ void svm_leave_nested(struct kvm_vcpu *vcpu) static int nested_svm_exit_handled_msr(struct vcpu_svm *svm) { gpa_t base = svm->nested.ctl.msrpm_base_pa; - u32 msr, bit_nr; + int write, bit_nr; u8 value, mask; - int write; + u32 msr; if (!(vmcb12_is_intercept(&svm->nested.ctl, INTERCEPT_MSR_PROT))) return NESTED_EXIT_HOST; @@ -1365,7 +1365,7 @@ static int nested_svm_exit_handled_msr(struct vcpu_svm *svm) bit_nr = svm_msrpm_bit_nr(msr); write = svm->vmcb->control.exit_info_1 & 1; - if (bit_nr == MSR_INVALID) + if (bit_nr < 0) return NESTED_EXIT_DONE; if (kvm_vcpu_read_guest(&svm->vcpu, base + bit_nr / BITS_PER_BYTE, diff --git a/arch/x86/kvm/svm/svm.h b/arch/x86/kvm/svm/svm.h index e078df15f1d82..489adc2ca3f5c 100644 --- a/arch/x86/kvm/svm/svm.h +++ b/arch/x86/kvm/svm/svm.h @@ -619,9 +619,7 @@ static inline void svm_vmgexit_no_action(struct vcpu_svm *svm, u64 data) static_assert(SVM_MSRS_PER_RANGE == 8192); #define SVM_MSRPM_OFFSET_MASK (SVM_MSRS_PER_RANGE - 1) -#define MSR_INVALID 0xffffffffU - -static __always_inline u32 svm_msrpm_bit_nr(u32 msr) +static __always_inline int svm_msrpm_bit_nr(u32 msr) { int range_nr; @@ -636,7 +634,7 @@ static __always_inline u32 svm_msrpm_bit_nr(u32 msr) range_nr = 2; break; default: - return MSR_INVALID; + return -EINVAL; } return range_nr * SVM_MSRPM_BYTES_PER_RANGE * BITS_PER_BYTE + @@ -647,10 +645,10 @@ static __always_inline u32 svm_msrpm_bit_nr(u32 msr) static inline rtype svm_##action##_msr_bitmap_##access(unsigned long *bitmap, \ u32 msr) \ { \ - u32 bit_nr; \ + int bit_nr; \ \ bit_nr = svm_msrpm_bit_nr(msr); \ - if (bit_nr == MSR_INVALID) \ + if (bit_nr < 0) \ return (rtype)true; \ \ return bitop##_bit(bit_nr + bit_rw, bitmap); \ -- 2.47.2