On Tue, Jan 22, 2013 at 12:21:47PM +0000, Zhang, Yang Z wrote:
> >> +static void vmx_set_msr_bitmap(struct kvm_vcpu *vcpu)
> >> +{
> >> +  unsigned long *msr_bitmap;
> >> +
> >> +  if (apic_x2apic_mode(vcpu->arch.apic))
> > 
> > vcpu->arch.apic can be NULL.
> Actually, call apic_x2apic_mode to check whether use x2apic msr bitmap is 
> wrong.
> VCPU uses x2apic but it may not set virtual x2apic mode bit due to TPR shadow 
> not enabled or irqchip not in kernel. Check the virtual x2apic mode bit in 
> vmcs directly should be a better choice. How about the follow code:
> 
If TPR shadow it not enabled vmx_msr_bitmap_.*x2apic bitmap will have x2apic 
MSRs intercepted.

> static void vmx_set_msr_bitmap(struct kvm_vcpu *vcpu)
> {
>         unsigned long *msr_bitmap;
> 
>         if (vmcs_read32(SECONDARY_VM_EXEC_CONTROL) & 
> SECONDARY_EXEC_VIRTUALIZE_X2APIC_MODE)
>                 if (is_long_mode(vcpu))
>                         msr_bitmap = vmx_msr_bitmap_longmode_x2apic;
>                 else
>                         msr_bitmap = vmx_msr_bitmap_legacy_x2apic;
>         else
>                 if (is_long_mode(vcpu))
>                         msr_bitmap = vmx_msr_bitmap_longmode;
>                 else
>                         msr_bitmap = vmx_msr_bitmap_legacy;
> 
>         vmcs_write64(MSR_BITMAP, __pa(msr_bitmap));
> }
> 
> Best regards,
> Yang
> 

--
                        Gleb.
--
To unsubscribe from this list: send the line "unsubscribe kvm" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to