Commit 8391ce44 authored by Paolo Bonzini's avatar Paolo Bonzini

KVM: VMX: introduce vm_{entry,exit}_control_reset_shadow

There is no reason to read the entry/exit control fields of the
VMCS and immediately write back the same value.
Signed-off-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
parent 9314006d
...@@ -1672,6 +1672,11 @@ static __always_inline void vmcs_set_bits(unsigned long field, u32 mask) ...@@ -1672,6 +1672,11 @@ static __always_inline void vmcs_set_bits(unsigned long field, u32 mask)
__vmcs_writel(field, __vmcs_readl(field) | mask); __vmcs_writel(field, __vmcs_readl(field) | mask);
} }
static inline void vm_entry_controls_reset_shadow(struct vcpu_vmx *vmx)
{
vmx->vm_entry_controls_shadow = vmcs_read32(VM_ENTRY_CONTROLS);
}
static inline void vm_entry_controls_init(struct vcpu_vmx *vmx, u32 val) static inline void vm_entry_controls_init(struct vcpu_vmx *vmx, u32 val)
{ {
vmcs_write32(VM_ENTRY_CONTROLS, val); vmcs_write32(VM_ENTRY_CONTROLS, val);
...@@ -1700,6 +1705,11 @@ static inline void vm_entry_controls_clearbit(struct vcpu_vmx *vmx, u32 val) ...@@ -1700,6 +1705,11 @@ static inline void vm_entry_controls_clearbit(struct vcpu_vmx *vmx, u32 val)
vm_entry_controls_set(vmx, vm_entry_controls_get(vmx) & ~val); vm_entry_controls_set(vmx, vm_entry_controls_get(vmx) & ~val);
} }
static inline void vm_exit_controls_reset_shadow(struct vcpu_vmx *vmx)
{
vmx->vm_exit_controls_shadow = vmcs_read32(VM_EXIT_CONTROLS);
}
static inline void vm_exit_controls_init(struct vcpu_vmx *vmx, u32 val) static inline void vm_exit_controls_init(struct vcpu_vmx *vmx, u32 val)
{ {
vmcs_write32(VM_EXIT_CONTROLS, val); vmcs_write32(VM_EXIT_CONTROLS, val);
...@@ -10722,8 +10732,8 @@ static void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason, ...@@ -10722,8 +10732,8 @@ static void nested_vmx_vmexit(struct kvm_vcpu *vcpu, u32 exit_reason,
vmcs12->vm_exit_intr_error_code, vmcs12->vm_exit_intr_error_code,
KVM_ISA_VMX); KVM_ISA_VMX);
vm_entry_controls_init(vmx, vmcs_read32(VM_ENTRY_CONTROLS)); vm_entry_controls_reset_shadow(vmx);
vm_exit_controls_init(vmx, vmcs_read32(VM_EXIT_CONTROLS)); vm_exit_controls_reset_shadow(vmx);
vmx_segment_cache_clear(vmx); vmx_segment_cache_clear(vmx);
/* if no vmcs02 cache requested, remove the one we used */ /* if no vmcs02 cache requested, remove the one we used */
......
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