From: Yin Fengwei <fengwei....@intel.com> ACRN Hypervisor reports hypervisor features via CPUID leaf 0x40000001 which is similar to KVM. A VM can check if it's the privileged VM using the feature bits. The Service VM is the only privileged VM by design.
Signed-off-by: Yin Fengwei <fengwei....@intel.com> Signed-off-by: Shuo Liu <shuo.a....@intel.com> Reviewed-by: Reinette Chatre <reinette.cha...@intel.com> Acked-by: Borislav Petkov <b...@suse.de> Cc: Dave Hansen <dave.han...@intel.com> Cc: Sean Christopherson <sean.j.christopher...@intel.com> Cc: Dan Williams <dan.j.willi...@intel.com> Cc: Fengwei Yin <fengwei....@intel.com> Cc: Zhi Wang <zhi.a.w...@intel.com> Cc: Zhenyu Wang <zhen...@linux.intel.com> Cc: Yu Wang <yu1.w...@intel.com> Cc: Reinette Chatre <reinette.cha...@intel.com> Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org> --- arch/x86/include/asm/acrn.h | 16 ++++++++++++++++ arch/x86/kernel/cpu/acrn.c | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/arch/x86/include/asm/acrn.h b/arch/x86/include/asm/acrn.h index ff259b69cde7..127f20672c5d 100644 --- a/arch/x86/include/asm/acrn.h +++ b/arch/x86/include/asm/acrn.h @@ -2,7 +2,23 @@ #ifndef _ASM_X86_ACRN_H #define _ASM_X86_ACRN_H +/* + * This CPUID returns feature bitmaps in EAX. + * Guest VM uses this to detect the appropriate feature bit. + */ +#define ACRN_CPUID_FEATURES 0x40000001 +/* Bit 0 indicates whether guest VM is privileged */ +#define ACRN_FEATURE_PRIVILEGED_VM BIT(0) + void acrn_setup_intr_handler(void (*handler)(void)); void acrn_remove_intr_handler(void); +static inline u32 acrn_cpuid_base(void) +{ + if (boot_cpu_has(X86_FEATURE_HYPERVISOR)) + return hypervisor_cpuid_base("ACRNACRNACRN", 0); + + return 0; +} + #endif /* _ASM_X86_ACRN_H */ diff --git a/arch/x86/kernel/cpu/acrn.c b/arch/x86/kernel/cpu/acrn.c index e0c181781905..23f5f27b5a02 100644 --- a/arch/x86/kernel/cpu/acrn.c +++ b/arch/x86/kernel/cpu/acrn.c @@ -21,7 +21,7 @@ static u32 __init acrn_detect(void) { - return hypervisor_cpuid_base("ACRNACRNACRN", 0); + return acrn_cpuid_base(); } static void __init acrn_init_platform(void) -- 2.28.0