diff --git a/hypervisor/arch/x86/guest/vlapic.c b/hypervisor/arch/x86/guest/vlapic.c index 1b555a384..a37e0fc20 100644 --- a/hypervisor/arch/x86/guest/vlapic.c +++ b/hypervisor/arch/x86/guest/vlapic.c @@ -106,8 +106,6 @@ static void vlapic_set_error(struct acrn_vlapic *vlapic, uint32_t mask); static void vlapic_timer_expired(void *data); -static inline bool is_x2apic_enabled(const struct acrn_vlapic *vlapic); - static inline bool vlapic_enabled(const struct acrn_vlapic *vlapic) { const struct lapic_regs *lapic = &(vlapic->apic_page); @@ -1989,13 +1987,12 @@ static void vlapic_timer_expired(void *data) /* * @pre vm != NULL */ -static inline bool is_x2apic_enabled(const struct acrn_vlapic *vlapic) +bool is_x2apic_enabled(const struct acrn_vlapic *vlapic) { - bool ret; - if ((vlapic_get_apicbase(vlapic) & APICBASE_X2APIC) == 0UL) { - ret = false; - } else { - ret = true; + bool ret = false; + + if ((vlapic_get_apicbase(vlapic) & APICBASE_LAPIC_MODE) == (APICBASE_X2APIC | APICBASE_XAPIC)) { + ret = true; } return ret; diff --git a/hypervisor/include/arch/x86/guest/vlapic.h b/hypervisor/include/arch/x86/guest/vlapic.h index 71170963a..b49e8c02e 100644 --- a/hypervisor/include/arch/x86/guest/vlapic.h +++ b/hypervisor/include/arch/x86/guest/vlapic.h @@ -211,6 +211,7 @@ void vlapic_calc_dest(struct acrn_vm *vm, uint64_t *dmask, bool is_broadcast, void vlapic_calc_dest_lapic_pt(struct acrn_vm *vm, uint64_t *dmask, bool is_broadcast, uint32_t dest, bool phys); bool is_lapic_pt_enabled(struct acrn_vm *vm); +bool is_x2apic_enabled(const struct acrn_vlapic *vlapic); /** * @} */