mirror of
https://github.com/xen-project/xen.git
synced 2026-10-30 03:00:05 +01:00
VMX: don't unintentionally leave x2APIC MSR intercepts disabled
These should be re-enabled in particular when the virtualized APIC
transitions to HW-disabled state.
Signed-off-by: Jan Beulich <jbeulich@suse.com>
Acked-by: Kevin Tian <kevin.tian@intel.com>
master commit: 72af6f455a
master date: 2014-09-16 13:58:20 +0200
This commit is contained in:
1 parent
8bb89fae19
commit
c7d1bb848e
1 file changed
+7
-8
@@ -2052,6 +2052,7 @@ void vmx_vlapic_msr_changed(struct vcpu *v)
|
||||
{
|
||||
int virtualize_x2apic_mode;
|
||||
struct vlapic *vlapic = vcpu_vlapic(v);
|
||||
unsigned int msr;
|
||||
|
||||
virtualize_x2apic_mode = ( (cpu_has_vmx_apic_reg_virt ||
|
||||
cpu_has_vmx_virtual_intr_delivery) &&
|
||||
@@ -2068,8 +2069,6 @@ void vmx_vlapic_msr_changed(struct vcpu *v)
|
||||
if ( !vlapic_hw_disabled(vlapic) &&
|
||||
(vlapic_base_address(vlapic) == APIC_DEFAULT_PHYS_BASE) )
|
||||
{
|
||||
unsigned int msr;
|
||||
|
||||
if ( virtualize_x2apic_mode && vlapic_x2apic_mode(vlapic) )
|
||||
{
|
||||
v->arch.hvm_vmx.secondary_exec_control |=
|
||||
@@ -2098,15 +2097,15 @@ void vmx_vlapic_msr_changed(struct vcpu *v)
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
v->arch.hvm_vmx.secondary_exec_control |=
|
||||
SECONDARY_EXEC_VIRTUALIZE_APIC_ACCESSES;
|
||||
for ( msr = MSR_IA32_APICBASE_MSR;
|
||||
msr <= MSR_IA32_APICBASE_MSR + 0xff; msr++ )
|
||||
vmx_enable_intercept_for_msr(v, msr,
|
||||
MSR_TYPE_R | MSR_TYPE_W);
|
||||
}
|
||||
}
|
||||
if ( !(v->arch.hvm_vmx.secondary_exec_control &
|
||||
SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE) )
|
||||
for ( msr = MSR_IA32_APICBASE_MSR;
|
||||
msr <= MSR_IA32_APICBASE_MSR + 0xff; msr++ )
|
||||
vmx_enable_intercept_for_msr(v, msr, MSR_TYPE_R | MSR_TYPE_W);
|
||||
|
||||
vmx_update_secondary_exec_control(v);
|
||||
vmx_vmcs_exit(v);
|
||||
}
|
||||
|
||||