Commit 2d6cd686 authored by Sean Christopherson's avatar Sean Christopherson

KVM: VMX: Move MSR_IA32_FEAT_CTL.LOCKED check into "is valid" helper

Move the check on IA32_FEATURE_CONTROL being locked, i.e. read-only from
the guest, into the helper to check the overall validity of the incoming
value.  Opportunistically rename the helper to make it clear that it
returns a bool.

No functional change intended.
Signed-off-by: default avatarSean Christopherson <seanjc@google.com>
Link: https://lore.kernel.org/r/20220607232353.3375324-3-seanjc@google.com
parent d2a00af2
...@@ -1850,8 +1850,8 @@ bool nested_vmx_allowed(struct kvm_vcpu *vcpu) ...@@ -1850,8 +1850,8 @@ bool nested_vmx_allowed(struct kvm_vcpu *vcpu)
FEAT_CTL_SGX_ENABLED | \ FEAT_CTL_SGX_ENABLED | \
FEAT_CTL_LMCE_ENABLED) FEAT_CTL_LMCE_ENABLED)
static inline bool vmx_feature_control_msr_valid(struct vcpu_vmx *vmx, static inline bool is_vmx_feature_control_msr_valid(struct vcpu_vmx *vmx,
struct msr_data *msr) struct msr_data *msr)
{ {
uint64_t valid_bits; uint64_t valid_bits;
...@@ -1862,6 +1862,10 @@ static inline bool vmx_feature_control_msr_valid(struct vcpu_vmx *vmx, ...@@ -1862,6 +1862,10 @@ static inline bool vmx_feature_control_msr_valid(struct vcpu_vmx *vmx,
WARN_ON_ONCE(vmx->msr_ia32_feature_control_valid_bits & WARN_ON_ONCE(vmx->msr_ia32_feature_control_valid_bits &
~KVM_SUPPORTED_FEATURE_CONTROL); ~KVM_SUPPORTED_FEATURE_CONTROL);
if (!msr->host_initiated &&
(vmx->msr_ia32_feature_control & FEAT_CTL_LOCKED))
return false;
if (msr->host_initiated) if (msr->host_initiated)
valid_bits = KVM_SUPPORTED_FEATURE_CONTROL; valid_bits = KVM_SUPPORTED_FEATURE_CONTROL;
else else
...@@ -2266,10 +2270,9 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) ...@@ -2266,10 +2270,9 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
vcpu->arch.mcg_ext_ctl = data; vcpu->arch.mcg_ext_ctl = data;
break; break;
case MSR_IA32_FEAT_CTL: case MSR_IA32_FEAT_CTL:
if (!vmx_feature_control_msr_valid(vmx, msr_info) || if (!is_vmx_feature_control_msr_valid(vmx, msr_info))
(to_vmx(vcpu)->msr_ia32_feature_control &
FEAT_CTL_LOCKED && !msr_info->host_initiated))
return 1; return 1;
vmx->msr_ia32_feature_control = data; vmx->msr_ia32_feature_control = data;
if (msr_info->host_initiated && data == 0) if (msr_info->host_initiated && data == 0)
vmx_leave_nested(vcpu); vmx_leave_nested(vcpu);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment