Blame view

arch/x86/kernel/cpu/hypervisor.c 2.01 KB
88b094fb8   Alok Kataria   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   H. Peter Anvin   x86, hypervisor: ...
23
  #include <linux/module.h>
88b094fb8   Alok Kataria   x86: Hypervisor d...
24
  #include <asm/processor.h>
4e42ebd57   Hannes Eder   x86: hypervisor -...
25
  #include <asm/hypervisor.h>
88b094fb8   Alok Kataria   x86: Hypervisor d...
26

e08cae418   H. Peter Anvin   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   Alok Kataria   x86: Hypervisor d...
33
  {
ca65f9fc0   Stefano Stabellini   Introduce CONFIG_...
34
  #ifdef CONFIG_XEN_PVHVM
bee6ab53e   Sheng Yang   x86: early PV on ...
35
  	&x86_hyper_xen_hvm,
b43275d66   Jeremy Fitzhardinge   xen/pvhvm: fix bu...
36
  #endif
24a42bae6   Anupam Chanda   x86, hyper: Chang...
37
38
  	&x86_hyper_vmware,
  	&x86_hyper_ms_hyperv,
e08cae418   H. Peter Anvin   x86: Clean up the...
39
  };
88b094fb8   Alok Kataria   x86: Hypervisor d...
40

e08cae418   H. Peter Anvin   x86: Clean up the...
41
  const struct hypervisor_x86 *x86_hyper;
96f6e775b   H. Peter Anvin   x86, hypervisor: ...
42
  EXPORT_SYMBOL(x86_hyper);
e08cae418   H. Peter Anvin   x86: Clean up the...
43
44
45
  
  static inline void __init
  detect_hypervisor_vendor(void)
eca0cd028   Alok Kataria   x86: Add a synthe...
46
  {
e08cae418   H. Peter Anvin   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   Alok Kataria   x86: Add a synthe...
58
  }
88b094fb8   Alok Kataria   x86: Hypervisor d...
59
60
  void __cpuinit init_hypervisor(struct cpuinfo_x86 *c)
  {
e08cae418   H. Peter Anvin   x86: Clean up the...
61
62
  	if (x86_hyper && x86_hyper->set_cpu_features)
  		x86_hyper->set_cpu_features(c);
88b094fb8   Alok Kataria   x86: Hypervisor d...
63
  }
2d826404f   Thomas Gleixner   x86: Move tsc_cal...
64
65
66
  
  void __init init_hypervisor_platform(void)
  {
e08cae418   H. Peter Anvin   x86: Clean up the...
67
68
69
70
71
  
  	detect_hypervisor_vendor();
  
  	if (!x86_hyper)
  		return;
2d826404f   Thomas Gleixner   x86: Move tsc_cal...
72
  	init_hypervisor(&boot_cpu_data);
e08cae418   H. Peter Anvin   x86: Clean up the...
73
74
75
  
  	if (x86_hyper->init_platform)
  		x86_hyper->init_platform();
2d826404f   Thomas Gleixner   x86: Move tsc_cal...
76
  }