lkml.org 
[lkml]   [2017]   [Dec]   [22]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 4.14 065/159] x86/virt: Add enum for hypervisors to replace x86_hyper
    Date
    4.14-stable review patch.  If anyone has any objections, please let me know.

    ------------------

    From: Juergen Gross <jgross@suse.com>

    commit 03b2a320b19f1424e9ac9c21696be9c60b6d0d93 upstream.

    The x86_hyper pointer is only used for checking whether a virtual
    device is supporting the hypervisor the system is running on.

    Use an enum for that purpose instead and drop the x86_hyper pointer.

    Signed-off-by: Juergen Gross <jgross@suse.com>
    Acked-by: Thomas Gleixner <tglx@linutronix.de>
    Acked-by: Xavier Deguillard <xdeguillard@vmware.com>
    Cc: Linus Torvalds <torvalds@linux-foundation.org>
    Cc: Peter Zijlstra <peterz@infradead.org>
    Cc: akataria@vmware.com
    Cc: arnd@arndb.de
    Cc: boris.ostrovsky@oracle.com
    Cc: devel@linuxdriverproject.org
    Cc: dmitry.torokhov@gmail.com
    Cc: gregkh@linuxfoundation.org
    Cc: haiyangz@microsoft.com
    Cc: kvm@vger.kernel.org
    Cc: kys@microsoft.com
    Cc: linux-graphics-maintainer@vmware.com
    Cc: linux-input@vger.kernel.org
    Cc: moltmann@vmware.com
    Cc: pbonzini@redhat.com
    Cc: pv-drivers@vmware.com
    Cc: rkrcmar@redhat.com
    Cc: sthemmin@microsoft.com
    Cc: virtualization@lists.linux-foundation.org
    Cc: xen-devel@lists.xenproject.org
    Link: http://lkml.kernel.org/r/20171109132739.23465-3-jgross@suse.com
    Signed-off-by: Ingo Molnar <mingo@kernel.org>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    arch/x86/hyperv/hv_init.c | 2 +-
    arch/x86/include/asm/hypervisor.h | 23 ++++++++++++++---------
    arch/x86/kernel/cpu/hypervisor.c | 12 +++++++++---
    arch/x86/kernel/cpu/mshyperv.c | 4 ++--
    arch/x86/kernel/cpu/vmware.c | 4 ++--
    arch/x86/kernel/kvm.c | 4 ++--
    arch/x86/xen/enlighten_hvm.c | 4 ++--
    arch/x86/xen/enlighten_pv.c | 4 ++--
    drivers/hv/vmbus_drv.c | 2 +-
    drivers/input/mouse/vmmouse.c | 10 ++++------
    drivers/misc/vmw_balloon.c | 2 +-
    11 files changed, 40 insertions(+), 31 deletions(-)

    --- a/arch/x86/hyperv/hv_init.c
    +++ b/arch/x86/hyperv/hv_init.c
    @@ -113,7 +113,7 @@ void hyperv_init(void)
    u64 guest_id;
    union hv_x64_msr_hypercall_contents hypercall_msr;

    - if (x86_hyper != &x86_hyper_ms_hyperv)
    + if (x86_hyper_type != X86_HYPER_MS_HYPERV)
    return;

    /* Allocate percpu VP index */
    --- a/arch/x86/include/asm/hypervisor.h
    +++ b/arch/x86/include/asm/hypervisor.h
    @@ -29,6 +29,16 @@
    /*
    * x86 hypervisor information
    */
    +
    +enum x86_hypervisor_type {
    + X86_HYPER_NATIVE = 0,
    + X86_HYPER_VMWARE,
    + X86_HYPER_MS_HYPERV,
    + X86_HYPER_XEN_PV,
    + X86_HYPER_XEN_HVM,
    + X86_HYPER_KVM,
    +};
    +
    struct hypervisor_x86 {
    /* Hypervisor name */
    const char *name;
    @@ -36,6 +46,9 @@ struct hypervisor_x86 {
    /* Detection routine */
    uint32_t (*detect)(void);

    + /* Hypervisor type */
    + enum x86_hypervisor_type type;
    +
    /* init time callbacks */
    struct x86_hyper_init init;

    @@ -43,15 +56,7 @@ struct hypervisor_x86 {
    struct x86_hyper_runtime runtime;
    };

    -extern const struct hypervisor_x86 *x86_hyper;
    -
    -/* Recognized hypervisors */
    -extern const struct hypervisor_x86 x86_hyper_vmware;
    -extern const struct hypervisor_x86 x86_hyper_ms_hyperv;
    -extern const struct hypervisor_x86 x86_hyper_xen_pv;
    -extern const struct hypervisor_x86 x86_hyper_xen_hvm;
    -extern const struct hypervisor_x86 x86_hyper_kvm;
    -
    +extern enum x86_hypervisor_type x86_hyper_type;
    extern void init_hypervisor_platform(void);
    #else
    static inline void init_hypervisor_platform(void) { }
    --- a/arch/x86/kernel/cpu/hypervisor.c
    +++ b/arch/x86/kernel/cpu/hypervisor.c
    @@ -26,6 +26,12 @@
    #include <asm/processor.h>
    #include <asm/hypervisor.h>

    +extern const struct hypervisor_x86 x86_hyper_vmware;
    +extern const struct hypervisor_x86 x86_hyper_ms_hyperv;
    +extern const struct hypervisor_x86 x86_hyper_xen_pv;
    +extern const struct hypervisor_x86 x86_hyper_xen_hvm;
    +extern const struct hypervisor_x86 x86_hyper_kvm;
    +
    static const __initconst struct hypervisor_x86 * const hypervisors[] =
    {
    #ifdef CONFIG_XEN_PV
    @@ -41,8 +47,8 @@ static const __initconst struct hypervis
    #endif
    };

    -const struct hypervisor_x86 *x86_hyper;
    -EXPORT_SYMBOL(x86_hyper);
    +enum x86_hypervisor_type x86_hyper_type;
    +EXPORT_SYMBOL(x86_hyper_type);

    static inline const struct hypervisor_x86 * __init
    detect_hypervisor_vendor(void)
    @@ -87,6 +93,6 @@ void __init init_hypervisor_platform(voi
    copy_array(&h->init, &x86_init.hyper, sizeof(h->init));
    copy_array(&h->runtime, &x86_platform.hyper, sizeof(h->runtime));

    - x86_hyper = h;
    + x86_hyper_type = h->type;
    x86_init.hyper.init_platform();
    }
    --- a/arch/x86/kernel/cpu/mshyperv.c
    +++ b/arch/x86/kernel/cpu/mshyperv.c
    @@ -254,9 +254,9 @@ static void __init ms_hyperv_init_platfo
    #endif
    }

    -const __refconst struct hypervisor_x86 x86_hyper_ms_hyperv = {
    +const __initconst struct hypervisor_x86 x86_hyper_ms_hyperv = {
    .name = "Microsoft Hyper-V",
    .detect = ms_hyperv_platform,
    + .type = X86_HYPER_MS_HYPERV,
    .init.init_platform = ms_hyperv_init_platform,
    };
    -EXPORT_SYMBOL(x86_hyper_ms_hyperv);
    --- a/arch/x86/kernel/cpu/vmware.c
    +++ b/arch/x86/kernel/cpu/vmware.c
    @@ -205,10 +205,10 @@ static bool __init vmware_legacy_x2apic_
    (eax & (1 << VMWARE_PORT_CMD_LEGACY_X2APIC)) != 0;
    }

    -const __refconst struct hypervisor_x86 x86_hyper_vmware = {
    +const __initconst struct hypervisor_x86 x86_hyper_vmware = {
    .name = "VMware",
    .detect = vmware_platform,
    + .type = X86_HYPER_VMWARE,
    .init.init_platform = vmware_platform_setup,
    .init.x2apic_available = vmware_legacy_x2apic_available,
    };
    -EXPORT_SYMBOL(x86_hyper_vmware);
    --- a/arch/x86/kernel/kvm.c
    +++ b/arch/x86/kernel/kvm.c
    @@ -544,12 +544,12 @@ static uint32_t __init kvm_detect(void)
    return kvm_cpuid_base();
    }

    -const struct hypervisor_x86 x86_hyper_kvm __refconst = {
    +const __initconst struct hypervisor_x86 x86_hyper_kvm = {
    .name = "KVM",
    .detect = kvm_detect,
    + .type = X86_HYPER_KVM,
    .init.x2apic_available = kvm_para_available,
    };
    -EXPORT_SYMBOL_GPL(x86_hyper_kvm);

    static __init int activate_jump_labels(void)
    {
    --- a/arch/x86/xen/enlighten_hvm.c
    +++ b/arch/x86/xen/enlighten_hvm.c
    @@ -226,12 +226,12 @@ static uint32_t __init xen_platform_hvm(
    return xen_cpuid_base();
    }

    -const struct hypervisor_x86 x86_hyper_xen_hvm = {
    +const __initconst struct hypervisor_x86 x86_hyper_xen_hvm = {
    .name = "Xen HVM",
    .detect = xen_platform_hvm,
    + .type = X86_HYPER_XEN_HVM,
    .init.init_platform = xen_hvm_guest_init,
    .init.x2apic_available = xen_x2apic_para_available,
    .init.init_mem_mapping = xen_hvm_init_mem_mapping,
    .runtime.pin_vcpu = xen_pin_vcpu,
    };
    -EXPORT_SYMBOL(x86_hyper_xen_hvm);
    --- a/arch/x86/xen/enlighten_pv.c
    +++ b/arch/x86/xen/enlighten_pv.c
    @@ -1459,9 +1459,9 @@ static uint32_t __init xen_platform_pv(v
    return 0;
    }

    -const struct hypervisor_x86 x86_hyper_xen_pv = {
    +const __initconst struct hypervisor_x86 x86_hyper_xen_pv = {
    .name = "Xen PV",
    .detect = xen_platform_pv,
    + .type = X86_HYPER_XEN_PV,
    .runtime.pin_vcpu = xen_pin_vcpu,
    };
    -EXPORT_SYMBOL(x86_hyper_xen_pv);
    --- a/drivers/hv/vmbus_drv.c
    +++ b/drivers/hv/vmbus_drv.c
    @@ -1534,7 +1534,7 @@ static int __init hv_acpi_init(void)
    {
    int ret, t;

    - if (x86_hyper != &x86_hyper_ms_hyperv)
    + if (x86_hyper_type != X86_HYPER_MS_HYPERV)
    return -ENODEV;

    init_completion(&probe_event);
    --- a/drivers/input/mouse/vmmouse.c
    +++ b/drivers/input/mouse/vmmouse.c
    @@ -316,11 +316,9 @@ static int vmmouse_enable(struct psmouse
    /*
    * Array of supported hypervisors.
    */
    -static const struct hypervisor_x86 *vmmouse_supported_hypervisors[] = {
    - &x86_hyper_vmware,
    -#ifdef CONFIG_KVM_GUEST
    - &x86_hyper_kvm,
    -#endif
    +static enum x86_hypervisor_type vmmouse_supported_hypervisors[] = {
    + X86_HYPER_VMWARE,
    + X86_HYPER_KVM,
    };

    /**
    @@ -331,7 +329,7 @@ static bool vmmouse_check_hypervisor(voi
    int i;

    for (i = 0; i < ARRAY_SIZE(vmmouse_supported_hypervisors); i++)
    - if (vmmouse_supported_hypervisors[i] == x86_hyper)
    + if (vmmouse_supported_hypervisors[i] == x86_hyper_type)
    return true;

    return false;
    --- a/drivers/misc/vmw_balloon.c
    +++ b/drivers/misc/vmw_balloon.c
    @@ -1271,7 +1271,7 @@ static int __init vmballoon_init(void)
    * Check if we are running on VMware's hypervisor and bail out
    * if we are not.
    */
    - if (x86_hyper != &x86_hyper_vmware)
    + if (x86_hyper_type != X86_HYPER_VMWARE)
    return -ENODEV;

    for (is_2m_pages = 0; is_2m_pages < VMW_BALLOON_NUM_PAGE_SIZES;

    \
     
     \ /
      Last update: 2017-12-22 10:02    [W:5.265 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site