Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
ia64
xen
hypervisor.c
Go to the documentation of this file.
1
/******************************************************************************
2
* arch/ia64/xen/hypervisor.c
3
*
4
* Copyright (c) 2006 Isaku Yamahata <yamahata at valinux co jp>
5
* VA Linux Systems Japan K.K.
6
*
7
* This program is free software; you can redistribute it and/or modify
8
* it under the terms of the GNU General Public License as published by
9
* the Free Software Foundation; either version 2 of the License, or
10
* (at your option) any later version.
11
*
12
* This program is distributed in the hope that it will be useful,
13
* but WITHOUT ANY WARRANTY; without even the implied warranty of
14
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
* GNU General Public License for more details.
16
*
17
* You should have received a copy of the GNU General Public License
18
* along with this program; if not, write to the Free Software
19
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20
*
21
*/
22
23
#include <
linux/efi.h
>
24
#include <linux/export.h>
25
#include <asm/xen/hypervisor.h>
26
#include <
asm/xen/privop.h
>
27
28
#include "
irq_xen.h
"
29
30
struct
shared_info
*
HYPERVISOR_shared_info
__read_mostly
=
31
(
struct
shared_info
*)
XSI_BASE
;
32
EXPORT_SYMBOL
(
HYPERVISOR_shared_info
);
33
34
DEFINE_PER_CPU
(
struct
vcpu_info
*, xen_vcpu);
35
36
struct
start_info
*
xen_start_info
;
37
EXPORT_SYMBOL
(xen_start_info);
38
39
EXPORT_SYMBOL
(
xen_domain_type
);
40
41
EXPORT_SYMBOL
(
__hypercall
);
42
43
/* Stolen from arch/x86/xen/enlighten.c */
44
/*
45
* Flag to determine whether vcpu info placement is available on all
46
* VCPUs. We assume it is to start with, and then set it to zero on
47
* the first failure. This is because it can succeed on some VCPUs
48
* and not others, since it can involve hypervisor memory allocation,
49
* or because the guest failed to guarantee all the appropriate
50
* constraints on all VCPUs (ie buffer can't cross a page boundary).
51
*
52
* Note that any particular CPU may be using a placed vcpu structure,
53
* but we can only optimise if the all are.
54
*
55
* 0: not available, 1: available
56
*/
57
58
static
void
__init
xen_vcpu_setup(
int
cpu
)
59
{
60
/*
61
* WARNING:
62
* before changing MAX_VIRT_CPUS,
63
* check that shared_info fits on a page
64
*/
65
BUILD_BUG_ON
(
sizeof
(
struct
shared_info
) >
PAGE_SIZE
);
66
per_cpu
(xen_vcpu, cpu) = &
HYPERVISOR_shared_info
->vcpu_info[
cpu
];
67
}
68
69
void
__init
xen_setup_vcpu_info_placement
(
void
)
70
{
71
int
cpu
;
72
73
for_each_possible_cpu
(cpu)
74
xen_vcpu_setup(cpu);
75
}
76
77
void
__cpuinit
78
xen_cpu_init
(
void
)
79
{
80
xen_smp_intr_init
();
81
}
82
83
/**************************************************************************
84
* opt feature
85
*/
86
void
87
xen_ia64_enable_opt_feature
(
void
)
88
{
89
/* Enable region 7 identity map optimizations in Xen */
90
struct
xen_ia64_opt_feature
optf;
91
92
optf.
cmd
=
XEN_IA64_OPTF_IDENT_MAP_REG7
;
93
optf.
on
=
XEN_IA64_OPTF_ON
;
94
optf.
pgprot
=
pgprot_val
(
PAGE_KERNEL
);
95
optf.
key
= 0;
/* No key on linux. */
96
HYPERVISOR_opt_feature
(&optf);
97
}
Generated on Thu Jan 10 2013 13:07:20 for Linux Kernel by
1.8.2