* [PATCH v2 0/5] x86/xen: support booting PVH guest via standard boot path
@ 2017-11-09 13:27 Juergen Gross
2017-11-09 13:27 ` [PATCH v2 1/5] x86: merge x86_hyper into x86_platform and x86_init Juergen Gross
` (2 more replies)
0 siblings, 3 replies; 6+ messages in thread
From: Juergen Gross @ 2017-11-09 13:27 UTC (permalink / raw)
To: linux-kernel
Cc: kvm, rkrcmar, pv-drivers, akataria, virtualization, pavel, hpa,
tglx, sthemmin, x86, moltmann, mingo, linux-graphics-maintainer,
linux-input, xen-devel, len.brown, arnd, linux-pm, xdeguillard,
haiyangz, rusty, pbonzini, boris.ostrovsky, Juergen Gross, gregkh,
dmitry.torokhov, rjw, devel
Booting a Xen PVH guest requires a special boot entry as it is
mandatory to setup some Xen-specific interfaces rather early. When grub
or OVMF are used as boot loaders, however, those will fill the boot
parameters in zeropage and there is no longer a need to do something
PVH specific in the early boot path.
This patch series adds support for that scenario by identifying PVH
environment and doing the required init steps via Xen hooks instead of
using a dedicated boot entry.
The dedicated entry is still mandatory for support of Dom0 running in
PVH mode as in this case there is no grub or OVMF involved for filling
in the boot parameters.
Changes in V2:
- added new patches 1 and 2
Cc: kys@microsoft.com
Cc: haiyangz@microsoft.com
Cc: sthemmin@microsoft.com
Cc: akataria@vmware.com
Cc: pbonzini@redhat.com
Cc: rkrcmar@redhat.com
Cc: boris.ostrovsky@oracle.com
Cc: rusty@rustcorp.com.au
Cc: devel@linuxdriverproject.org
Cc: virtualization@lists.linux-foundation.org
Cc: kvm@vger.kernel.org
Cc: xen-devel@lists.xenproject.org
Cc: linux-graphics-maintainer@vmware.com
Cc: pv-drivers@vmware.com
Cc: dmitry.torokhov@gmail.com
Cc: xdeguillard@vmware.com
Cc: moltmann@vmware.com
Cc: arnd@arndb.de
Cc: gregkh@linuxfoundation.org
Cc: linux-input@vger.kernel.org
Cc: rjw@rjwysocki.net
Cc: len.brown@intel.com
Cc: pavel@ucw.cz
Cc: linux-pm@vger.kernel.org
Juergen Gross (5):
x86: merge x86_hyper into x86_platform and x86_init
x86: add enum for hypervisors to replace x86_hyper
x86/acpi: add test for ACPI_FADT_NO_VGA
x86: add guest_late_init hook to hypervisor_x86 structure
x86/xen: use guest_late_init to detect Xen PVH guest
arch/x86/hyperv/hv_init.c | 2 +-
arch/x86/include/asm/hypervisor.h | 46 +++++++++++-----------------
arch/x86/include/asm/kvm_para.h | 2 --
arch/x86/include/asm/x86_init.h | 27 +++++++++++++++++
arch/x86/kernel/acpi/boot.c | 5 +++
arch/x86/kernel/apic/apic.c | 2 +-
arch/x86/kernel/cpu/hypervisor.c | 64 +++++++++++++++++++++------------------
arch/x86/kernel/cpu/mshyperv.c | 6 ++--
arch/x86/kernel/cpu/vmware.c | 8 ++---
arch/x86/kernel/kvm.c | 9 +++---
arch/x86/kernel/setup.c | 2 +-
arch/x86/kernel/x86_init.c | 10 ++++++
arch/x86/mm/init.c | 2 +-
arch/x86/xen/enlighten_hvm.c | 36 +++++++++++++++++-----
arch/x86/xen/enlighten_pv.c | 6 ++--
arch/x86/xen/enlighten_pvh.c | 9 ------
drivers/hv/vmbus_drv.c | 2 +-
drivers/input/mouse/vmmouse.c | 10 +++---
drivers/misc/vmw_balloon.c | 2 +-
include/linux/hypervisor.h | 8 +++--
20 files changed, 153 insertions(+), 105 deletions(-)
--
2.12.3
^ permalink raw reply [flat|nested] 6+ messages in thread* [PATCH v2 1/5] x86: merge x86_hyper into x86_platform and x86_init 2017-11-09 13:27 [PATCH v2 0/5] x86/xen: support booting PVH guest via standard boot path Juergen Gross @ 2017-11-09 13:27 ` Juergen Gross 2017-11-09 13:27 ` [PATCH v2 2/5] x86: add enum for hypervisors to replace x86_hyper Juergen Gross [not found] ` <20171109132739.23465-3-jgross@suse.com> 2 siblings, 0 replies; 6+ messages in thread From: Juergen Gross @ 2017-11-09 13:27 UTC (permalink / raw) To: linux-kernel Cc: Juergen Gross, rusty, sthemmin, xen-devel, kvm, rkrcmar, boris.ostrovsky, haiyangz, x86, devel, mingo, hpa, pbonzini, tglx, virtualization, akataria Instead of x86_hyper being either NULL on bare metal or a pointer to a struct hypervisor_x86 in case of the kernel running as a guest merge the struct into x86_platform and x86_init. This will remove the need for wrappers making it hard to find out what is being called. With dummy functions added for all callbacks testing for a NULL function pointer can be removed, too. Cc: kys@microsoft.com Cc: haiyangz@microsoft.com Cc: sthemmin@microsoft.com Cc: akataria@vmware.com Cc: pbonzini@redhat.com Cc: rkrcmar@redhat.com Cc: boris.ostrovsky@oracle.com Cc: rusty@rustcorp.com.au Cc: devel@linuxdriverproject.org Cc: virtualization@lists.linux-foundation.org Cc: kvm@vger.kernel.org Cc: xen-devel@lists.xenproject.org Suggested-by: Ingo Molnar <mingo@kernel.org> Signed-off-by: Juergen Gross <jgross@suse.com> --- arch/x86/include/asm/hypervisor.h | 25 ++++-------------- arch/x86/include/asm/x86_init.h | 24 +++++++++++++++++ arch/x86/kernel/apic/apic.c | 2 +- arch/x86/kernel/cpu/hypervisor.c | 54 +++++++++++++++++++-------------------- arch/x86/kernel/cpu/mshyperv.c | 2 +- arch/x86/kernel/cpu/vmware.c | 4 +-- arch/x86/kernel/kvm.c | 2 +- arch/x86/kernel/x86_init.c | 9 +++++++ arch/x86/mm/init.c | 2 +- arch/x86/xen/enlighten_hvm.c | 8 +++--- arch/x86/xen/enlighten_pv.c | 2 +- include/linux/hypervisor.h | 8 ++++-- 12 files changed, 81 insertions(+), 61 deletions(-) diff --git a/arch/x86/include/asm/hypervisor.h b/arch/x86/include/asm/hypervisor.h index 0ead9dbb9130..0eca7239a7aa 100644 --- a/arch/x86/include/asm/hypervisor.h +++ b/arch/x86/include/asm/hypervisor.h @@ -23,6 +23,7 @@ #ifdef CONFIG_HYPERVISOR_GUEST #include <asm/kvm_para.h> +#include <asm/x86_init.h> #include <asm/xen/hypervisor.h> /* @@ -35,17 +36,11 @@ struct hypervisor_x86 { /* Detection routine */ uint32_t (*detect)(void); - /* Platform setup (run once per boot) */ - void (*init_platform)(void); + /* init time callbacks */ + struct x86_hyper_init init; - /* X2APIC detection (run once per boot) */ - bool (*x2apic_available)(void); - - /* pin current vcpu to specified physical cpu (run rarely) */ - void (*pin_vcpu)(int); - - /* called during init_mem_mapping() to setup early mappings. */ - void (*init_mem_mapping)(void); + /* runtime callbacks */ + struct x86_hyper_runtime runtime; }; extern const struct hypervisor_x86 *x86_hyper; @@ -58,17 +53,7 @@ extern const struct hypervisor_x86 x86_hyper_xen_hvm; extern const struct hypervisor_x86 x86_hyper_kvm; extern void init_hypervisor_platform(void); -extern bool hypervisor_x2apic_available(void); -extern void hypervisor_pin_vcpu(int cpu); - -static inline void hypervisor_init_mem_mapping(void) -{ - if (x86_hyper && x86_hyper->init_mem_mapping) - x86_hyper->init_mem_mapping(); -} #else static inline void init_hypervisor_platform(void) { } -static inline bool hypervisor_x2apic_available(void) { return false; } -static inline void hypervisor_init_mem_mapping(void) { } #endif /* CONFIG_HYPERVISOR_GUEST */ #endif /* _ASM_X86_HYPERVISOR_H */ diff --git a/arch/x86/include/asm/x86_init.h b/arch/x86/include/asm/x86_init.h index 8a1ebf9540dd..ad15a0fda917 100644 --- a/arch/x86/include/asm/x86_init.h +++ b/arch/x86/include/asm/x86_init.h @@ -115,6 +115,18 @@ struct x86_init_pci { }; /** + * struct x86_hyper_init - x86 hypervisor init functions + * @init_platform: platform setup + * @x2apic_available: X2APIC detection + * @init_mem_mapping: setup early mappings during init_mem_mapping() + */ +struct x86_hyper_init { + void (*init_platform)(void); + bool (*x2apic_available)(void); + void (*init_mem_mapping)(void); +}; + +/** * struct x86_init_ops - functions for platform specific setup * */ @@ -127,6 +139,7 @@ struct x86_init_ops { struct x86_init_timers timers; struct x86_init_iommu iommu; struct x86_init_pci pci; + struct x86_hyper_init hyper; }; /** @@ -200,6 +213,15 @@ struct x86_legacy_features { }; /** + * struct x86_hyper_runtime - x86 hypervisor specific runtime callbacks + * + * @pin_vcpu: pin current vcpu to specified physical cpu (run rarely) + */ +struct x86_hyper_runtime { + void (*pin_vcpu)(int cpu); +}; + +/** * struct x86_platform_ops - platform specific runtime functions * @calibrate_cpu: calibrate CPU * @calibrate_tsc: calibrate TSC, if different from CPU @@ -218,6 +240,7 @@ struct x86_legacy_features { * possible in x86_early_init_platform_quirks() by * only using the current x86_hardware_subarch * semantics. + * @hyper: x86 hypervisor specific runtime callbacks */ struct x86_platform_ops { unsigned long (*calibrate_cpu)(void); @@ -233,6 +256,7 @@ struct x86_platform_ops { void (*apic_post_init)(void); struct x86_legacy_features legacy; void (*set_legacy_features)(void); + struct x86_hyper_runtime hyper; }; struct pci_dev; diff --git a/arch/x86/kernel/apic/apic.c b/arch/x86/kernel/apic/apic.c index ff891772c9f8..89c7c8569e5e 100644 --- a/arch/x86/kernel/apic/apic.c +++ b/arch/x86/kernel/apic/apic.c @@ -1645,7 +1645,7 @@ static __init void try_to_enable_x2apic(int remap_mode) * under KVM */ if (max_physical_apicid > 255 || - !hypervisor_x2apic_available()) { + !x86_init.hyper.x2apic_available()) { pr_info("x2apic: IRQ remapping doesn't support X2APIC mode\n"); x2apic_disable(); return; diff --git a/arch/x86/kernel/cpu/hypervisor.c b/arch/x86/kernel/cpu/hypervisor.c index 4fa90006ac68..22226c1bf092 100644 --- a/arch/x86/kernel/cpu/hypervisor.c +++ b/arch/x86/kernel/cpu/hypervisor.c @@ -44,51 +44,49 @@ static const __initconst struct hypervisor_x86 * const hypervisors[] = const struct hypervisor_x86 *x86_hyper; EXPORT_SYMBOL(x86_hyper); -static inline void __init +static inline const struct hypervisor_x86 * __init detect_hypervisor_vendor(void) { - const struct hypervisor_x86 *h, * const *p; + const struct hypervisor_x86 *h = NULL, * const *p; uint32_t pri, max_pri = 0; for (p = hypervisors; p < hypervisors + ARRAY_SIZE(hypervisors); p++) { - h = *p; - pri = h->detect(); - if (pri != 0 && pri > max_pri) { + pri = (*p)->detect(); + if (pri > max_pri) { max_pri = pri; - x86_hyper = h; + h = *p; } } - if (max_pri) - pr_info("Hypervisor detected: %s\n", x86_hyper->name); + if (h) + pr_info("Hypervisor detected: %s\n", h->name); + + return h; } -void __init init_hypervisor_platform(void) +static void __init copy_array(const void *src, void *target, unsigned int size) { + unsigned int i, n = size / sizeof(void *); + const void * const *from = (const void * const *)src; + const void **to = (const void **)target; - detect_hypervisor_vendor(); - - if (!x86_hyper) - return; - - if (x86_hyper->init_platform) - x86_hyper->init_platform(); + for (i = 0; i < n; i++) + if (from[i]) + to[i] = from[i]; } -bool __init hypervisor_x2apic_available(void) +void __init init_hypervisor_platform(void) { - return x86_hyper && - x86_hyper->x2apic_available && - x86_hyper->x2apic_available(); -} + const struct hypervisor_x86 *h; -void hypervisor_pin_vcpu(int cpu) -{ - if (!x86_hyper) + h = detect_hypervisor_vendor(); + + if (!h) return; - if (x86_hyper->pin_vcpu) - x86_hyper->pin_vcpu(cpu); - else - WARN_ONCE(1, "vcpu pinning requested but not supported!\n"); + copy_array(&h->init, &x86_init.hyper, sizeof(h->init)); + copy_array(&h->runtime, &x86_platform.hyper, sizeof(h->runtime)); + + x86_hyper = h; + x86_init.hyper.init_platform(); } diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index 236324e83a3a..6bb84d655e4b 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -257,6 +257,6 @@ static void __init ms_hyperv_init_platform(void) const __refconst struct hypervisor_x86 x86_hyper_ms_hyperv = { .name = "Microsoft Hyper-V", .detect = ms_hyperv_platform, - .init_platform = ms_hyperv_init_platform, + .init.init_platform = ms_hyperv_init_platform, }; EXPORT_SYMBOL(x86_hyper_ms_hyperv); diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index 40ed26852ebd..4804c1d063c8 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c @@ -208,7 +208,7 @@ static bool __init vmware_legacy_x2apic_available(void) const __refconst struct hypervisor_x86 x86_hyper_vmware = { .name = "VMware", .detect = vmware_platform, - .init_platform = vmware_platform_setup, - .x2apic_available = vmware_legacy_x2apic_available, + .init.init_platform = vmware_platform_setup, + .init.x2apic_available = vmware_legacy_x2apic_available, }; EXPORT_SYMBOL(x86_hyper_vmware); diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 8bb9594d0761..9dca8437c795 100644 --- a/arch/x86/kernel/kvm.c +++ b/arch/x86/kernel/kvm.c @@ -547,7 +547,7 @@ static uint32_t __init kvm_detect(void) const struct hypervisor_x86 x86_hyper_kvm __refconst = { .name = "KVM", .detect = kvm_detect, - .x2apic_available = kvm_para_available, + .init.x2apic_available = kvm_para_available, }; EXPORT_SYMBOL_GPL(x86_hyper_kvm); diff --git a/arch/x86/kernel/x86_init.c b/arch/x86/kernel/x86_init.c index a088b2c47f73..5b2d10c1973a 100644 --- a/arch/x86/kernel/x86_init.c +++ b/arch/x86/kernel/x86_init.c @@ -28,6 +28,8 @@ void x86_init_noop(void) { } void __init x86_init_uint_noop(unsigned int unused) { } int __init iommu_init_noop(void) { return 0; } void iommu_shutdown_noop(void) { } +bool __init bool_x86_init_noop(void) { return false; } +void x86_op_int_noop(int cpu) { } /* * The platform setup functions are preset with the default functions @@ -81,6 +83,12 @@ struct x86_init_ops x86_init __initdata = { .init_irq = x86_default_pci_init_irq, .fixup_irqs = x86_default_pci_fixup_irqs, }, + + .hyper = { + .init_platform = x86_init_noop, + .x2apic_available = bool_x86_init_noop, + .init_mem_mapping = x86_init_noop, + }, }; struct x86_cpuinit_ops x86_cpuinit = { @@ -101,6 +109,7 @@ struct x86_platform_ops x86_platform __ro_after_init = { .get_nmi_reason = default_get_nmi_reason, .save_sched_clock_state = tsc_save_sched_clock_state, .restore_sched_clock_state = tsc_restore_sched_clock_state, + .hyper.pin_vcpu = x86_op_int_noop, }; EXPORT_SYMBOL_GPL(x86_platform); diff --git a/arch/x86/mm/init.c b/arch/x86/mm/init.c index af5c1ed21d43..a22c2b95e513 100644 --- a/arch/x86/mm/init.c +++ b/arch/x86/mm/init.c @@ -671,7 +671,7 @@ void __init init_mem_mapping(void) load_cr3(swapper_pg_dir); __flush_tlb_all(); - hypervisor_init_mem_mapping(); + x86_init.hyper.init_mem_mapping(); early_memtest(0, max_pfn_mapped << PAGE_SHIFT); } diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c index de503c225ae1..7b1622089f96 100644 --- a/arch/x86/xen/enlighten_hvm.c +++ b/arch/x86/xen/enlighten_hvm.c @@ -229,9 +229,9 @@ static uint32_t __init xen_platform_hvm(void) const struct hypervisor_x86 x86_hyper_xen_hvm = { .name = "Xen HVM", .detect = xen_platform_hvm, - .init_platform = xen_hvm_guest_init, - .pin_vcpu = xen_pin_vcpu, - .x2apic_available = xen_x2apic_para_available, - .init_mem_mapping = xen_hvm_init_mem_mapping, + .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); diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c index d4396e27b1fb..69d1a7054ddb 100644 --- a/arch/x86/xen/enlighten_pv.c +++ b/arch/x86/xen/enlighten_pv.c @@ -1463,6 +1463,6 @@ static uint32_t __init xen_platform_pv(void) const struct hypervisor_x86 x86_hyper_xen_pv = { .name = "Xen PV", .detect = xen_platform_pv, - .pin_vcpu = xen_pin_vcpu, + .runtime.pin_vcpu = xen_pin_vcpu, }; EXPORT_SYMBOL(x86_hyper_xen_pv); diff --git a/include/linux/hypervisor.h b/include/linux/hypervisor.h index b4054fd5b6f6..b19563f9a8eb 100644 --- a/include/linux/hypervisor.h +++ b/include/linux/hypervisor.h @@ -7,8 +7,12 @@ * Juergen Gross <jgross@suse.com> */ -#ifdef CONFIG_HYPERVISOR_GUEST -#include <asm/hypervisor.h> +#ifdef CONFIG_X86 +#include <asm/x86_init.h> +static inline void hypervisor_pin_vcpu(int cpu) +{ + x86_platform.hyper.pin_vcpu(cpu); +} #else static inline void hypervisor_pin_vcpu(int cpu) { -- 2.12.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 2/5] x86: add enum for hypervisors to replace x86_hyper 2017-11-09 13:27 [PATCH v2 0/5] x86/xen: support booting PVH guest via standard boot path Juergen Gross 2017-11-09 13:27 ` [PATCH v2 1/5] x86: merge x86_hyper into x86_platform and x86_init Juergen Gross @ 2017-11-09 13:27 ` Juergen Gross [not found] ` <20171109132739.23465-3-jgross@suse.com> 2 siblings, 0 replies; 6+ messages in thread From: Juergen Gross @ 2017-11-09 13:27 UTC (permalink / raw) To: linux-kernel Cc: kvm, rkrcmar, pv-drivers, akataria, virtualization, hpa, tglx, sthemmin, x86, moltmann, mingo, linux-graphics-maintainer, linux-input, xen-devel, arnd, xdeguillard, haiyangz, pbonzini, boris.ostrovsky, Juergen Gross, gregkh, dmitry.torokhov, devel 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. Cc: kys@microsoft.com Cc: haiyangz@microsoft.com Cc: sthemmin@microsoft.com Cc: akataria@vmware.com Cc: pbonzini@redhat.com Cc: rkrcmar@redhat.com Cc: boris.ostrovsky@oracle.com Cc: devel@linuxdriverproject.org Cc: virtualization@lists.linux-foundation.org Cc: kvm@vger.kernel.org Cc: xen-devel@lists.xenproject.org Cc: linux-graphics-maintainer@vmware.com Cc: pv-drivers@vmware.com Cc: dmitry.torokhov@gmail.com Cc: xdeguillard@vmware.com Cc: moltmann@vmware.com Cc: arnd@arndb.de Cc: gregkh@linuxfoundation.org Cc: linux-input@vger.kernel.org Signed-off-by: Juergen Gross <jgross@suse.com> --- 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(-) diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c index a5db63f728a2..a0b86cf486e0 100644 --- 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 */ diff --git a/arch/x86/include/asm/hypervisor.h b/arch/x86/include/asm/hypervisor.h index 0eca7239a7aa..1b0a5abcd8ae 100644 --- 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) { } diff --git a/arch/x86/kernel/cpu/hypervisor.c b/arch/x86/kernel/cpu/hypervisor.c index 22226c1bf092..bea8d3e24f50 100644 --- 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 hypervisor_x86 * const hypervisors[] = #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(void) 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(); } diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index 6bb84d655e4b..85eb5fc180c8 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -254,9 +254,9 @@ static void __init ms_hyperv_init_platform(void) #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); diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c index 4804c1d063c8..8e005329648b 100644 --- a/arch/x86/kernel/cpu/vmware.c +++ b/arch/x86/kernel/cpu/vmware.c @@ -205,10 +205,10 @@ static bool __init vmware_legacy_x2apic_available(void) (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); diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c index 9dca8437c795..a94de09edbed 100644 --- 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) { diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c index 7b1622089f96..754d5391d9fa 100644 --- 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(void) 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); diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c index 69d1a7054ddb..168efb2534c0 100644 --- a/arch/x86/xen/enlighten_pv.c +++ b/arch/x86/xen/enlighten_pv.c @@ -1460,9 +1460,9 @@ static uint32_t __init xen_platform_pv(void) 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); diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c index 937801ac2fe0..2cd134dd94d2 100644 --- 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); diff --git a/drivers/input/mouse/vmmouse.c b/drivers/input/mouse/vmmouse.c index 0f586780ceb4..1ae5c1ef3f5b 100644 --- a/drivers/input/mouse/vmmouse.c +++ b/drivers/input/mouse/vmmouse.c @@ -316,11 +316,9 @@ static int vmmouse_enable(struct psmouse *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(void) 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; diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c index 1e688bfec567..9047c0a529b2 100644 --- 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; -- 2.12.3 ^ permalink raw reply related [flat|nested] 6+ messages in thread
[parent not found: <20171109132739.23465-3-jgross@suse.com>]
* Re: [PATCH v2 2/5] x86: add enum for hypervisors to replace x86_hyper [not found] ` <20171109132739.23465-3-jgross@suse.com> @ 2017-11-09 17:57 ` Xavier Deguillard 2017-11-10 18:26 ` Dmitry Torokhov 1 sibling, 0 replies; 6+ messages in thread From: Xavier Deguillard @ 2017-11-09 17:57 UTC (permalink / raw) To: Juergen Gross Cc: kvm, rkrcmar, pv-drivers, virtualization, hpa, tglx, sthemmin, x86, akataria, mingo, linux-graphics-maintainer, linux-input, xen-devel, arnd, haiyangz, pbonzini, boris.ostrovsky, gregkh, dmitry.torokhov, linux-kernel, devel Hello Juergen, The changes to vmw_balloon.c looks good. Acked-by: Xavier Deguillard <xdeguillard@vmware.com> Xavier On Thu, Nov 09, 2017 at 02:27:36PM +0100, Juergen Gross wrote: > 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. > > Cc: kys@microsoft.com > Cc: haiyangz@microsoft.com > Cc: sthemmin@microsoft.com > Cc: akataria@vmware.com > Cc: pbonzini@redhat.com > Cc: rkrcmar@redhat.com > Cc: boris.ostrovsky@oracle.com > Cc: devel@linuxdriverproject.org > Cc: virtualization@lists.linux-foundation.org > Cc: kvm@vger.kernel.org > Cc: xen-devel@lists.xenproject.org > Cc: linux-graphics-maintainer@vmware.com > Cc: pv-drivers@vmware.com > Cc: dmitry.torokhov@gmail.com > Cc: xdeguillard@vmware.com > Cc: moltmann@vmware.com > Cc: arnd@arndb.de > Cc: gregkh@linuxfoundation.org > Cc: linux-input@vger.kernel.org > > Signed-off-by: Juergen Gross <jgross@suse.com> > --- > 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(-) > > diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c > index a5db63f728a2..a0b86cf486e0 100644 > --- 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 */ > diff --git a/arch/x86/include/asm/hypervisor.h b/arch/x86/include/asm/hypervisor.h > index 0eca7239a7aa..1b0a5abcd8ae 100644 > --- 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) { } > diff --git a/arch/x86/kernel/cpu/hypervisor.c b/arch/x86/kernel/cpu/hypervisor.c > index 22226c1bf092..bea8d3e24f50 100644 > --- 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 hypervisor_x86 * const hypervisors[] = > #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(void) > 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(); > } > diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c > index 6bb84d655e4b..85eb5fc180c8 100644 > --- a/arch/x86/kernel/cpu/mshyperv.c > +++ b/arch/x86/kernel/cpu/mshyperv.c > @@ -254,9 +254,9 @@ static void __init ms_hyperv_init_platform(void) > #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); > diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c > index 4804c1d063c8..8e005329648b 100644 > --- a/arch/x86/kernel/cpu/vmware.c > +++ b/arch/x86/kernel/cpu/vmware.c > @@ -205,10 +205,10 @@ static bool __init vmware_legacy_x2apic_available(void) > (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); > diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c > index 9dca8437c795..a94de09edbed 100644 > --- 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) > { > diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c > index 7b1622089f96..754d5391d9fa 100644 > --- 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(void) > 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); > diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c > index 69d1a7054ddb..168efb2534c0 100644 > --- a/arch/x86/xen/enlighten_pv.c > +++ b/arch/x86/xen/enlighten_pv.c > @@ -1460,9 +1460,9 @@ static uint32_t __init xen_platform_pv(void) > 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); > diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c > index 937801ac2fe0..2cd134dd94d2 100644 > --- 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); > diff --git a/drivers/input/mouse/vmmouse.c b/drivers/input/mouse/vmmouse.c > index 0f586780ceb4..1ae5c1ef3f5b 100644 > --- a/drivers/input/mouse/vmmouse.c > +++ b/drivers/input/mouse/vmmouse.c > @@ -316,11 +316,9 @@ static int vmmouse_enable(struct psmouse *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(void) > 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; > diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c > index 1e688bfec567..9047c0a529b2 100644 > --- 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; > -- > 2.12.3 > ^ permalink raw reply [flat|nested] 6+ messages in thread
* Re: [PATCH v2 2/5] x86: add enum for hypervisors to replace x86_hyper [not found] ` <20171109132739.23465-3-jgross@suse.com> 2017-11-09 17:57 ` Xavier Deguillard @ 2017-11-10 18:26 ` Dmitry Torokhov 2017-11-10 20:39 ` KY Srinivasan via Virtualization 1 sibling, 1 reply; 6+ messages in thread From: Dmitry Torokhov @ 2017-11-10 18:26 UTC (permalink / raw) To: Juergen Gross Cc: kvm, rkrcmar, pv-drivers, akataria, virtualization, hpa, tglx, sthemmin, x86, moltmann, mingo, linux-graphics-maintainer, linux-input, xen-devel, arnd, xdeguillard, haiyangz, pbonzini, boris.ostrovsky, gregkh, linux-kernel, devel On Thu, Nov 09, 2017 at 02:27:36PM +0100, Juergen Gross wrote: > 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. > > Cc: kys@microsoft.com > Cc: haiyangz@microsoft.com > Cc: sthemmin@microsoft.com > Cc: akataria@vmware.com > Cc: pbonzini@redhat.com > Cc: rkrcmar@redhat.com > Cc: boris.ostrovsky@oracle.com > Cc: devel@linuxdriverproject.org > Cc: virtualization@lists.linux-foundation.org > Cc: kvm@vger.kernel.org > Cc: xen-devel@lists.xenproject.org > Cc: linux-graphics-maintainer@vmware.com > Cc: pv-drivers@vmware.com > Cc: dmitry.torokhov@gmail.com > Cc: xdeguillard@vmware.com > Cc: moltmann@vmware.com > Cc: arnd@arndb.de > Cc: gregkh@linuxfoundation.org > Cc: linux-input@vger.kernel.org > > Signed-off-by: Juergen Gross <jgross@suse.com> > --- > 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 ++++------ Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> > drivers/misc/vmw_balloon.c | 2 +- > 11 files changed, 40 insertions(+), 31 deletions(-) > > diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c > index a5db63f728a2..a0b86cf486e0 100644 > --- 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 */ > diff --git a/arch/x86/include/asm/hypervisor.h b/arch/x86/include/asm/hypervisor.h > index 0eca7239a7aa..1b0a5abcd8ae 100644 > --- 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) { } > diff --git a/arch/x86/kernel/cpu/hypervisor.c b/arch/x86/kernel/cpu/hypervisor.c > index 22226c1bf092..bea8d3e24f50 100644 > --- 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 hypervisor_x86 * const hypervisors[] = > #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(void) > 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(); > } > diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c > index 6bb84d655e4b..85eb5fc180c8 100644 > --- a/arch/x86/kernel/cpu/mshyperv.c > +++ b/arch/x86/kernel/cpu/mshyperv.c > @@ -254,9 +254,9 @@ static void __init ms_hyperv_init_platform(void) > #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); > diff --git a/arch/x86/kernel/cpu/vmware.c b/arch/x86/kernel/cpu/vmware.c > index 4804c1d063c8..8e005329648b 100644 > --- a/arch/x86/kernel/cpu/vmware.c > +++ b/arch/x86/kernel/cpu/vmware.c > @@ -205,10 +205,10 @@ static bool __init vmware_legacy_x2apic_available(void) > (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); > diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c > index 9dca8437c795..a94de09edbed 100644 > --- 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) > { > diff --git a/arch/x86/xen/enlighten_hvm.c b/arch/x86/xen/enlighten_hvm.c > index 7b1622089f96..754d5391d9fa 100644 > --- 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(void) > 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); > diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c > index 69d1a7054ddb..168efb2534c0 100644 > --- a/arch/x86/xen/enlighten_pv.c > +++ b/arch/x86/xen/enlighten_pv.c > @@ -1460,9 +1460,9 @@ static uint32_t __init xen_platform_pv(void) > 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); > diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c > index 937801ac2fe0..2cd134dd94d2 100644 > --- 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); > diff --git a/drivers/input/mouse/vmmouse.c b/drivers/input/mouse/vmmouse.c > index 0f586780ceb4..1ae5c1ef3f5b 100644 > --- a/drivers/input/mouse/vmmouse.c > +++ b/drivers/input/mouse/vmmouse.c > @@ -316,11 +316,9 @@ static int vmmouse_enable(struct psmouse *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(void) > 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; > diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c > index 1e688bfec567..9047c0a529b2 100644 > --- 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; > -- > 2.12.3 > -- Dmitry ^ permalink raw reply [flat|nested] 6+ messages in thread
* RE: [PATCH v2 2/5] x86: add enum for hypervisors to replace x86_hyper 2017-11-10 18:26 ` Dmitry Torokhov @ 2017-11-10 20:39 ` KY Srinivasan via Virtualization 0 siblings, 0 replies; 6+ messages in thread From: KY Srinivasan via Virtualization @ 2017-11-10 20:39 UTC (permalink / raw) To: Dmitry Torokhov, Juergen Gross Cc: kvm@vger.kernel.org, rkrcmar@redhat.com, pv-drivers@vmware.com, akataria@vmware.com, virtualization@lists.linux-foundation.org, hpa@zytor.com, tglx@linutronix.de, Stephen Hemminger, x86@kernel.org, moltmann@vmware.com, mingo@redhat.com, linux-graphics-maintainer@vmware.com, linux-input@vger.kernel.org, xen-devel@lists.xenproject.org, arnd@arndb.de, xdeguillard@vmware.com, Haiyang Zhang, pbonzini@redhat.com > -----Original Message----- > From: Dmitry Torokhov [mailto:dmitry.torokhov@gmail.com] > Sent: Friday, November 10, 2017 10:26 AM > To: Juergen Gross <jgross@suse.com> > Cc: linux-kernel@vger.kernel.org; tglx@linutronix.de; mingo@redhat.com; > hpa@zytor.com; x86@kernel.org; KY Srinivasan <kys@microsoft.com>; > Haiyang Zhang <haiyangz@microsoft.com>; Stephen Hemminger > <sthemmin@microsoft.com>; akataria@vmware.com; > pbonzini@redhat.com; rkrcmar@redhat.com; boris.ostrovsky@oracle.com; > devel@linuxdriverproject.org; virtualization@lists.linux-foundation.org; > kvm@vger.kernel.org; xen-devel@lists.xenproject.org; linux-graphics- > maintainer@vmware.com; pv-drivers@vmware.com; > xdeguillard@vmware.com; moltmann@vmware.com; arnd@arndb.de; > gregkh@linuxfoundation.org; linux-input@vger.kernel.org > Subject: Re: [PATCH v2 2/5] x86: add enum for hypervisors to replace > x86_hyper > > On Thu, Nov 09, 2017 at 02:27:36PM +0100, Juergen Gross wrote: > > 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. > > > > Cc: kys@microsoft.com > > Cc: haiyangz@microsoft.com > > Cc: sthemmin@microsoft.com > > Cc: akataria@vmware.com > > Cc: pbonzini@redhat.com > > Cc: rkrcmar@redhat.com > > Cc: boris.ostrovsky@oracle.com > > Cc: devel@linuxdriverproject.org > > Cc: virtualization@lists.linux-foundation.org > > Cc: kvm@vger.kernel.org > > Cc: xen-devel@lists.xenproject.org > > Cc: linux-graphics-maintainer@vmware.com > > Cc: pv-drivers@vmware.com > > Cc: dmitry.torokhov@gmail.com > > Cc: xdeguillard@vmware.com > > Cc: moltmann@vmware.com > > Cc: arnd@arndb.de > > Cc: gregkh@linuxfoundation.org > > Cc: linux-input@vger.kernel.org > > > > Signed-off-by: Juergen Gross <jgross@suse.com> > > --- > > 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 ++++------ > > Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Acked-by: K. Y. Srinivasan <kys@microsoft.com> > > > drivers/misc/vmw_balloon.c | 2 +- > > 11 files changed, 40 insertions(+), 31 deletions(-) > > > > diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c > > index a5db63f728a2..a0b86cf486e0 100644 > > --- 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 */ > > diff --git a/arch/x86/include/asm/hypervisor.h > b/arch/x86/include/asm/hypervisor.h > > index 0eca7239a7aa..1b0a5abcd8ae 100644 > > --- 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) { } > > diff --git a/arch/x86/kernel/cpu/hypervisor.c > b/arch/x86/kernel/cpu/hypervisor.c > > index 22226c1bf092..bea8d3e24f50 100644 > > --- 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 hypervisor_x86 * const > hypervisors[] = > > #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(void) > > 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(); > > } > > diff --git a/arch/x86/kernel/cpu/mshyperv.c > b/arch/x86/kernel/cpu/mshyperv.c > > index 6bb84d655e4b..85eb5fc180c8 100644 > > --- a/arch/x86/kernel/cpu/mshyperv.c > > +++ b/arch/x86/kernel/cpu/mshyperv.c > > @@ -254,9 +254,9 @@ static void __init ms_hyperv_init_platform(void) > > #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); > > diff --git a/arch/x86/kernel/cpu/vmware.c > b/arch/x86/kernel/cpu/vmware.c > > index 4804c1d063c8..8e005329648b 100644 > > --- a/arch/x86/kernel/cpu/vmware.c > > +++ b/arch/x86/kernel/cpu/vmware.c > > @@ -205,10 +205,10 @@ static bool __init > vmware_legacy_x2apic_available(void) > > (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); > > diff --git a/arch/x86/kernel/kvm.c b/arch/x86/kernel/kvm.c > > index 9dca8437c795..a94de09edbed 100644 > > --- 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) > > { > > diff --git a/arch/x86/xen/enlighten_hvm.c > b/arch/x86/xen/enlighten_hvm.c > > index 7b1622089f96..754d5391d9fa 100644 > > --- 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(void) > > 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); > > diff --git a/arch/x86/xen/enlighten_pv.c b/arch/x86/xen/enlighten_pv.c > > index 69d1a7054ddb..168efb2534c0 100644 > > --- a/arch/x86/xen/enlighten_pv.c > > +++ b/arch/x86/xen/enlighten_pv.c > > @@ -1460,9 +1460,9 @@ static uint32_t __init xen_platform_pv(void) > > 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); > > diff --git a/drivers/hv/vmbus_drv.c b/drivers/hv/vmbus_drv.c > > index 937801ac2fe0..2cd134dd94d2 100644 > > --- 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); > > diff --git a/drivers/input/mouse/vmmouse.c > b/drivers/input/mouse/vmmouse.c > > index 0f586780ceb4..1ae5c1ef3f5b 100644 > > --- a/drivers/input/mouse/vmmouse.c > > +++ b/drivers/input/mouse/vmmouse.c > > @@ -316,11 +316,9 @@ static int vmmouse_enable(struct psmouse > *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(void) > > 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; > > diff --git a/drivers/misc/vmw_balloon.c b/drivers/misc/vmw_balloon.c > > index 1e688bfec567..9047c0a529b2 100644 > > --- 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; > > -- > > 2.12.3 > > > > -- > Dmitry ^ permalink raw reply [flat|nested] 6+ messages in thread
end of thread, other threads:[~2017-11-10 20:39 UTC | newest]
Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-09 13:27 [PATCH v2 0/5] x86/xen: support booting PVH guest via standard boot path Juergen Gross
2017-11-09 13:27 ` [PATCH v2 1/5] x86: merge x86_hyper into x86_platform and x86_init Juergen Gross
2017-11-09 13:27 ` [PATCH v2 2/5] x86: add enum for hypervisors to replace x86_hyper Juergen Gross
[not found] ` <20171109132739.23465-3-jgross@suse.com>
2017-11-09 17:57 ` Xavier Deguillard
2017-11-10 18:26 ` Dmitry Torokhov
2017-11-10 20:39 ` KY Srinivasan via Virtualization
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox