aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSheng Yang <sheng.yang@intel.com>2007-11-21 14:33:25 +0800
committerAvi Kivity <avi@qumranet.com>2008-01-30 17:53:14 +0200
commit83ff3b9d4a0ade8f8eb9757fd4b36c501ba161e4 (patch)
tree0d264664f9d9f1acb202e3537347a7520284f406
parent0771671749b59a507b6da4efb931c44d9691e248 (diff)
KVM: VMX: Remove the secondary execute control dependency on irqchip
The state of SECONDARY_VM_EXEC_CONTROL shouldn't depend on in-kernel IRQ chip, this patch fix this. Signed-off-by: Sheng Yang <sheng.yang@intel.com> Signed-off-by: Avi Kivity <avi@qumranet.com>
-rw-r--r--drivers/kvm/vmx.c17
1 files changed, 7 insertions, 10 deletions
diff --git a/drivers/kvm/vmx.c b/drivers/kvm/vmx.c
index b4c0bdce7b3..fc5e7c8381c 100644
--- a/drivers/kvm/vmx.c
+++ b/drivers/kvm/vmx.c
@@ -193,11 +193,6 @@ static inline int cpu_has_secondary_exec_ctrls(void)
CPU_BASED_ACTIVATE_SECONDARY_CONTROLS);
}
-static inline int vm_need_secondary_exec_ctrls(struct kvm *kvm)
-{
- return ((cpu_has_secondary_exec_ctrls()) && (irqchip_in_kernel(kvm)));
-}
-
static inline int cpu_has_vmx_virtualize_apic_accesses(void)
{
return (vmcs_config.cpu_based_2nd_exec_ctrl &
@@ -1524,13 +1519,15 @@ static int vmx_vcpu_setup(struct vcpu_vmx *vmx)
CPU_BASED_CR8_LOAD_EXITING;
#endif
}
- if (!vm_need_secondary_exec_ctrls(vmx->vcpu.kvm))
- exec_control &= ~CPU_BASED_ACTIVATE_SECONDARY_CONTROLS;
vmcs_write32(CPU_BASED_VM_EXEC_CONTROL, exec_control);
- if (vm_need_secondary_exec_ctrls(vmx->vcpu.kvm))
- vmcs_write32(SECONDARY_VM_EXEC_CONTROL,
- vmcs_config.cpu_based_2nd_exec_ctrl);
+ if (cpu_has_secondary_exec_ctrls()) {
+ exec_control = vmcs_config.cpu_based_2nd_exec_ctrl;
+ if (!vm_need_virtualize_apic_accesses(vmx->vcpu.kvm))
+ exec_control &=
+ ~SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES;
+ vmcs_write32(SECONDARY_VM_EXEC_CONTROL, exec_control);
+ }
vmcs_write32(PAGE_FAULT_ERROR_CODE_MASK, !!bypass_guest_pf);
vmcs_write32(PAGE_FAULT_ERROR_CODE_MATCH, !!bypass_guest_pf);