[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] vlapic: fix two flaws in emulating MSR_IA32_APICBASE
On Wed, May 31, 2017 at 02:06:50AM -0600, Jan Beulich wrote: >>>> On 31.05.17 at 09:46, <chao.gao@xxxxxxxxx> wrote: >> --- a/xen/arch/x86/hvm/vlapic.c >> +++ b/xen/arch/x86/hvm/vlapic.c >> @@ -1003,14 +1003,12 @@ bool_t vlapic_msr_set(struct vlapic *vlapic, >> uint64_t value) >> } >> else >> { >> - if ( unlikely(vlapic_x2apic_mode(vlapic)) ) >> - return 0; >> vlapic->hw.disabled |= VLAPIC_HW_DISABLED; >> pt_may_unmask_irq(vlapic_domain(vlapic), NULL); >> } > >Especially with you not adding any code here, ... > >> --- a/xen/include/asm-x86/hvm/vlapic.h >> +++ b/xen/include/asm-x86/hvm/vlapic.h >> @@ -53,6 +53,9 @@ >> ((vlapic)->hw.apic_base_msr & MSR_IA32_APICBASE_BASE) >> #define vlapic_x2apic_mode(vlapic) \ >> ((vlapic)->hw.apic_base_msr & MSR_IA32_APICBASE_EXTD) >> +#define vlapic_xapic_mode(vlapic) \ >> + (((vlapic)->hw.apic_base_msr & MSR_IA32_APICBASE_ENABLE) && \ >> + !vlapic_x2apic_mode(vlapic)) > >... I think it is imperative that both macros are fully symmetric, >i.e. the enabled check should either be present in both or (less >desirable) absent. The reason I think is we have an assumption here that vlapic->hw.apic_base_msr is in a valid state. so if EXTD=1, we can conclude vlapic is in x2apic mode. But if only EN=1, we can't conclude vlapic is in xapic mode. Or, do you just mean I shouldn't use vlapic_x2apic_mode() here, like this: #define vlapic_x2apic_mode(vlapic) \ (vlapic_enabled(vlapic) && \ (vlapic->hw.apic_base_msr & MSR_IA32_APICBASE_EXTD)) #define vlapic_xapic_mode(vlapic) \ (vlapic_enabled(vlapic) && \ !(vlapic->hw.apic_base_msr & MSR_IA32_APICBASE_EXTD)) Thanks Chao _______________________________________________ Xen-devel mailing list Xen-devel@xxxxxxxxxxxxx https://lists.xen.org/xen-devel
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |