Commit 3b84080b authored by Haozhong Zhang's avatar Haozhong Zhang Committed by Paolo Bonzini

KVM: VMX: move msr_ia32_feature_control to vcpu_vmx

msr_ia32_feature_control will be used for LMCE and not depend only on
nested anymore, so move it from struct nested_vmx to struct vcpu_vmx.
Signed-off-by: default avatarHaozhong Zhang <haozhong.zhang@intel.com>
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 8ff7b956
...@@ -428,7 +428,6 @@ struct nested_vmx { ...@@ -428,7 +428,6 @@ struct nested_vmx {
struct pi_desc *pi_desc; struct pi_desc *pi_desc;
bool pi_pending; bool pi_pending;
u16 posted_intr_nv; u16 posted_intr_nv;
u64 msr_ia32_feature_control;
struct hrtimer preemption_timer; struct hrtimer preemption_timer;
bool preemption_timer_expired; bool preemption_timer_expired;
...@@ -612,6 +611,8 @@ struct vcpu_vmx { ...@@ -612,6 +611,8 @@ struct vcpu_vmx {
bool guest_pkru_valid; bool guest_pkru_valid;
u32 guest_pkru; u32 guest_pkru;
u32 host_pkru; u32 host_pkru;
u64 msr_ia32_feature_control;
}; };
enum segment_cache_field { enum segment_cache_field {
...@@ -2970,9 +2971,7 @@ static int vmx_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) ...@@ -2970,9 +2971,7 @@ static int vmx_get_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
msr_info->data = vmcs_read64(GUEST_BNDCFGS); msr_info->data = vmcs_read64(GUEST_BNDCFGS);
break; break;
case MSR_IA32_FEATURE_CONTROL: case MSR_IA32_FEATURE_CONTROL:
if (!nested_vmx_allowed(vcpu)) msr_info->data = to_vmx(vcpu)->msr_ia32_feature_control;
return 1;
msr_info->data = to_vmx(vcpu)->nested.msr_ia32_feature_control;
break; break;
case MSR_IA32_VMX_BASIC ... MSR_IA32_VMX_VMFUNC: case MSR_IA32_VMX_BASIC ... MSR_IA32_VMX_VMFUNC:
if (!nested_vmx_allowed(vcpu)) if (!nested_vmx_allowed(vcpu))
...@@ -3064,10 +3063,10 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info) ...@@ -3064,10 +3063,10 @@ static int vmx_set_msr(struct kvm_vcpu *vcpu, struct msr_data *msr_info)
break; break;
case MSR_IA32_FEATURE_CONTROL: case MSR_IA32_FEATURE_CONTROL:
if (!nested_vmx_allowed(vcpu) || if (!nested_vmx_allowed(vcpu) ||
(to_vmx(vcpu)->nested.msr_ia32_feature_control & (to_vmx(vcpu)->msr_ia32_feature_control &
FEATURE_CONTROL_LOCKED && !msr_info->host_initiated)) FEATURE_CONTROL_LOCKED && !msr_info->host_initiated))
return 1; return 1;
vmx->nested.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);
break; break;
...@@ -6939,7 +6938,7 @@ static int handle_vmon(struct kvm_vcpu *vcpu) ...@@ -6939,7 +6938,7 @@ static int handle_vmon(struct kvm_vcpu *vcpu)
return 1; return 1;
} }
if ((vmx->nested.msr_ia32_feature_control & VMXON_NEEDED_FEATURES) if ((vmx->msr_ia32_feature_control & VMXON_NEEDED_FEATURES)
!= VMXON_NEEDED_FEATURES) { != VMXON_NEEDED_FEATURES) {
kvm_inject_gp(vcpu, 0); kvm_inject_gp(vcpu, 0);
return 1; return 1;
......
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