Blame view
arch/x86/kernel/cpu/hypervisor.c
2.01 KB
88b094fb8 x86: Hypervisor d... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
/* * Common hypervisor code * * Copyright (C) 2008, VMware, Inc. * Author : Alok N Kataria <akataria@vmware.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, but * WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE, GOOD TITLE or * NON INFRINGEMENT. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * */ |
3998d0953 x86, hypervisor: ... |
23 |
#include <linux/module.h> |
88b094fb8 x86: Hypervisor d... |
24 |
#include <asm/processor.h> |
4e42ebd57 x86: hypervisor -... |
25 |
#include <asm/hypervisor.h> |
88b094fb8 x86: Hypervisor d... |
26 |
|
e08cae418 x86: Clean up the... |
27 28 29 30 31 32 |
/* * Hypervisor detect order. This is specified explicitly here because * some hypervisors might implement compatibility modes for other * hypervisors and therefore need to be detected in specific sequence. */ static const __initconst struct hypervisor_x86 * const hypervisors[] = |
88b094fb8 x86: Hypervisor d... |
33 |
{ |
ca65f9fc0 Introduce CONFIG_... |
34 |
#ifdef CONFIG_XEN_PVHVM |
bee6ab53e x86: early PV on ... |
35 |
&x86_hyper_xen_hvm, |
b43275d66 xen/pvhvm: fix bu... |
36 |
#endif |
24a42bae6 x86, hyper: Chang... |
37 38 |
&x86_hyper_vmware, &x86_hyper_ms_hyperv, |
e08cae418 x86: Clean up the... |
39 |
}; |
88b094fb8 x86: Hypervisor d... |
40 |
|
e08cae418 x86: Clean up the... |
41 |
const struct hypervisor_x86 *x86_hyper; |
96f6e775b x86, hypervisor: ... |
42 |
EXPORT_SYMBOL(x86_hyper); |
e08cae418 x86: Clean up the... |
43 44 45 |
static inline void __init detect_hypervisor_vendor(void) |
eca0cd028 x86: Add a synthe... |
46 |
{ |
e08cae418 x86: Clean up the... |
47 48 49 50 51 52 53 54 55 56 57 |
const struct hypervisor_x86 *h, * const *p; for (p = hypervisors; p < hypervisors + ARRAY_SIZE(hypervisors); p++) { h = *p; if (h->detect()) { x86_hyper = h; printk(KERN_INFO "Hypervisor detected: %s ", h->name); break; } } |
eca0cd028 x86: Add a synthe... |
58 |
} |
88b094fb8 x86: Hypervisor d... |
59 60 |
void __cpuinit init_hypervisor(struct cpuinfo_x86 *c) { |
e08cae418 x86: Clean up the... |
61 62 |
if (x86_hyper && x86_hyper->set_cpu_features) x86_hyper->set_cpu_features(c); |
88b094fb8 x86: Hypervisor d... |
63 |
} |
2d826404f x86: Move tsc_cal... |
64 65 66 |
void __init init_hypervisor_platform(void) { |
e08cae418 x86: Clean up the... |
67 68 69 70 71 |
detect_hypervisor_vendor(); if (!x86_hyper) return; |
2d826404f x86: Move tsc_cal... |
72 |
init_hypervisor(&boot_cpu_data); |
e08cae418 x86: Clean up the... |
73 74 75 |
if (x86_hyper->init_platform) x86_hyper->init_platform(); |
2d826404f x86: Move tsc_cal... |
76 |
} |