diff --git a/hypervisor/arch/x86/guest/vlapic.c b/hypervisor/arch/x86/guest/vlapic.c index a37e0fc20..c448f982c 100644 --- a/hypervisor/arch/x86/guest/vlapic.c +++ b/hypervisor/arch/x86/guest/vlapic.c @@ -1998,6 +1998,16 @@ bool is_x2apic_enabled(const struct acrn_vlapic *vlapic) return ret; } +bool is_xapic_enabled(const struct acrn_vlapic *vlapic) +{ + bool ret = false; + if ((vlapic_get_apicbase(vlapic) & APICBASE_LAPIC_MODE) == APICBASE_XAPIC) { + ret = true; + } + + return ret; +} + static inline uint32_t x2apic_msr_to_regoff(uint32_t msr) { diff --git a/hypervisor/include/arch/x86/guest/vlapic.h b/hypervisor/include/arch/x86/guest/vlapic.h index b49e8c02e..af235ba6a 100644 --- a/hypervisor/include/arch/x86/guest/vlapic.h +++ b/hypervisor/include/arch/x86/guest/vlapic.h @@ -212,6 +212,7 @@ void vlapic_calc_dest_lapic_pt(struct acrn_vm *vm, uint64_t *dmask, bool is_broa uint32_t dest, bool phys); bool is_lapic_pt_enabled(struct acrn_vm *vm); bool is_x2apic_enabled(const struct acrn_vlapic *vlapic); +bool is_xapic_enabled(const struct acrn_vlapic *vlapic); /** * @} */