lkml.org 
[lkml]   [2020]   [Oct]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH v5 03/17] x86/acrn: Introduce an API to check if a VM is privileged
    Date
    From: Yin Fengwei <fengwei.yin@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.yin@intel.com>
    Signed-off-by: Shuo Liu <shuo.a.liu@intel.com>
    Reviewed-by: Reinette Chatre <reinette.chatre@intel.com>
    Cc: Dave Hansen <dave.hansen@intel.com>
    Cc: Sean Christopherson <sean.j.christopherson@intel.com>
    Cc: Dan Williams <dan.j.williams@intel.com>
    Cc: Fengwei Yin <fengwei.yin@intel.com>
    Cc: Zhi Wang <zhi.a.wang@intel.com>
    Cc: Zhenyu Wang <zhenyuw@linux.intel.com>
    Cc: Yu Wang <yu1.wang@intel.com>
    Cc: Reinette Chatre <reinette.chatre@intel.com>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    ---
    arch/x86/include/asm/acrn.h | 9 +++++++++
    arch/x86/kernel/cpu/acrn.c | 19 ++++++++++++++++++-
    2 files changed, 27 insertions(+), 1 deletion(-)

    diff --git a/arch/x86/include/asm/acrn.h b/arch/x86/include/asm/acrn.h
    index ff259b69cde7..a2d4aea3a80d 100644
    --- a/arch/x86/include/asm/acrn.h
    +++ b/arch/x86/include/asm/acrn.h
    @@ -2,7 +2,16 @@
    #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);
    +bool acrn_is_privileged_vm(void);

    #endif /* _ASM_X86_ACRN_H */
    diff --git a/arch/x86/kernel/cpu/acrn.c b/arch/x86/kernel/cpu/acrn.c
    index e0c181781905..5528bfc913ea 100644
    --- a/arch/x86/kernel/cpu/acrn.c
    +++ b/arch/x86/kernel/cpu/acrn.c
    @@ -19,9 +19,26 @@
    #include <asm/idtentry.h>
    #include <asm/irq_regs.h>

    +static u32 acrn_cpuid_base(void)
    +{
    + static u32 acrn_cpuid_base;
    +
    + if (!acrn_cpuid_base && boot_cpu_has(X86_FEATURE_HYPERVISOR))
    + acrn_cpuid_base = hypervisor_cpuid_base("ACRNACRNACRN", 0);
    +
    + return acrn_cpuid_base;
    +}
    +
    +bool acrn_is_privileged_vm(void)
    +{
    + return cpuid_eax(acrn_cpuid_base() | ACRN_CPUID_FEATURES) &
    + ACRN_FEATURE_PRIVILEGED_VM;
    +}
    +EXPORT_SYMBOL_GPL(acrn_is_privileged_vm);
    +
    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
    \
     
     \ /
      Last update: 2020-10-19 08:19    [W:4.178 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site