diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-01 16:33:41 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-04-01 16:33:41 -0400 |
commit | 8b53ef33d9d8fa5f771ae11cc6a6e7bc0182beec (patch) | |
tree | 7835bab94824b3d52e7466ae28825941f6c6277a /arch/ia64/include/asm/paravirt.h | |
parent | ef5ddd3d591399f2c722a77bce543d20bef31663 (diff) | |
parent | 80a03e29164c76b70e6dbb1d10515820cc24487a (diff) |
Merge branch 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6
* 'release' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux-2.6: (29 commits)
[IA64] BUG to BUG_ON changes
[IA64] Fix typo/thinko in arch/ia64/sn/kernel/sn2/sn2_smp.c
ia64: remove some warnings.
ia64/xen: fix the link error.
ia64/pv_ops/bp/xen: implemented binary patchable pv_cpu_ops.
ia64/pv_ops/binary patch: define paravirt_dv_serialize_data() and suppress false positive warning.
ia64/pv_ops/bp/module: support binary patching for kernel module.
ia64/pv_ops: implement binary patching optimization for native.
ia64/pv_op/binarypatch: add helper functions to support binary patching for paravirt_ops.
ia64/pv_ops/xen/gate.S: xen gate page paravirtualization
ia64/pv_ops: paravirtualize gate.S.
ia64/pv_ops: move down __kernel_syscall_via_epc.
ia64/pv_ops/xen: define xen specific gate page.
ia64/pv_ops: gate page paravirtualization.
ia64/pv_ops/xen/pv_time_ops: implement sched_clock.
ia64/pv_ops/pv_time_ops: add sched_clock hook.
ia64/pv_ops/xen: paravirtualize read/write ar.itc and ar.itm
ia64/pv_ops: paravirtualize mov = ar.itc.
ia64/pv_ops/pvchecker: support mov = ar.itc paravirtualization
ia64/pv_ops: paravirtualize fsys.S.
...
Diffstat (limited to 'arch/ia64/include/asm/paravirt.h')
-rw-r--r-- | arch/ia64/include/asm/paravirt.h | 65 |
1 files changed, 65 insertions, 0 deletions
diff --git a/arch/ia64/include/asm/paravirt.h b/arch/ia64/include/asm/paravirt.h index 2bf3636473fe..2eb0a981a09a 100644 --- a/arch/ia64/include/asm/paravirt.h +++ b/arch/ia64/include/asm/paravirt.h | |||
@@ -22,6 +22,56 @@ | |||
22 | #ifndef __ASM_PARAVIRT_H | 22 | #ifndef __ASM_PARAVIRT_H |
23 | #define __ASM_PARAVIRT_H | 23 | #define __ASM_PARAVIRT_H |
24 | 24 | ||
25 | #ifndef __ASSEMBLY__ | ||
26 | /****************************************************************************** | ||
27 | * fsys related addresses | ||
28 | */ | ||
29 | struct pv_fsys_data { | ||
30 | unsigned long *fsyscall_table; | ||
31 | void *fsys_bubble_down; | ||
32 | }; | ||
33 | |||
34 | extern struct pv_fsys_data pv_fsys_data; | ||
35 | |||
36 | unsigned long *paravirt_get_fsyscall_table(void); | ||
37 | char *paravirt_get_fsys_bubble_down(void); | ||
38 | |||
39 | /****************************************************************************** | ||
40 | * patchlist addresses for gate page | ||
41 | */ | ||
42 | enum pv_gate_patchlist { | ||
43 | PV_GATE_START_FSYSCALL, | ||
44 | PV_GATE_END_FSYSCALL, | ||
45 | |||
46 | PV_GATE_START_BRL_FSYS_BUBBLE_DOWN, | ||
47 | PV_GATE_END_BRL_FSYS_BUBBLE_DOWN, | ||
48 | |||
49 | PV_GATE_START_VTOP, | ||
50 | PV_GATE_END_VTOP, | ||
51 | |||
52 | PV_GATE_START_MCKINLEY_E9, | ||
53 | PV_GATE_END_MCKINLEY_E9, | ||
54 | }; | ||
55 | |||
56 | struct pv_patchdata { | ||
57 | unsigned long start_fsyscall_patchlist; | ||
58 | unsigned long end_fsyscall_patchlist; | ||
59 | unsigned long start_brl_fsys_bubble_down_patchlist; | ||
60 | unsigned long end_brl_fsys_bubble_down_patchlist; | ||
61 | unsigned long start_vtop_patchlist; | ||
62 | unsigned long end_vtop_patchlist; | ||
63 | unsigned long start_mckinley_e9_patchlist; | ||
64 | unsigned long end_mckinley_e9_patchlist; | ||
65 | |||
66 | void *gate_section; | ||
67 | }; | ||
68 | |||
69 | extern struct pv_patchdata pv_patchdata; | ||
70 | |||
71 | unsigned long paravirt_get_gate_patchlist(enum pv_gate_patchlist type); | ||
72 | void *paravirt_get_gate_section(void); | ||
73 | #endif | ||
74 | |||
25 | #ifdef CONFIG_PARAVIRT_GUEST | 75 | #ifdef CONFIG_PARAVIRT_GUEST |
26 | 76 | ||
27 | #define PARAVIRT_HYPERVISOR_TYPE_DEFAULT 0 | 77 | #define PARAVIRT_HYPERVISOR_TYPE_DEFAULT 0 |
@@ -68,6 +118,14 @@ struct pv_init_ops { | |||
68 | int (*arch_setup_nomca)(void); | 118 | int (*arch_setup_nomca)(void); |
69 | 119 | ||
70 | void (*post_smp_prepare_boot_cpu)(void); | 120 | void (*post_smp_prepare_boot_cpu)(void); |
121 | |||
122 | #ifdef ASM_SUPPORTED | ||
123 | unsigned long (*patch_bundle)(void *sbundle, void *ebundle, | ||
124 | unsigned long type); | ||
125 | unsigned long (*patch_inst)(unsigned long stag, unsigned long etag, | ||
126 | unsigned long type); | ||
127 | #endif | ||
128 | void (*patch_branch)(unsigned long tag, unsigned long type); | ||
71 | }; | 129 | }; |
72 | 130 | ||
73 | extern struct pv_init_ops pv_init_ops; | 131 | extern struct pv_init_ops pv_init_ops; |
@@ -210,6 +268,8 @@ struct pv_time_ops { | |||
210 | int (*do_steal_accounting)(unsigned long *new_itm); | 268 | int (*do_steal_accounting)(unsigned long *new_itm); |
211 | 269 | ||
212 | void (*clocksource_resume)(void); | 270 | void (*clocksource_resume)(void); |
271 | |||
272 | unsigned long long (*sched_clock)(void); | ||
213 | }; | 273 | }; |
214 | 274 | ||
215 | extern struct pv_time_ops pv_time_ops; | 275 | extern struct pv_time_ops pv_time_ops; |
@@ -227,6 +287,11 @@ paravirt_do_steal_accounting(unsigned long *new_itm) | |||
227 | return pv_time_ops.do_steal_accounting(new_itm); | 287 | return pv_time_ops.do_steal_accounting(new_itm); |
228 | } | 288 | } |
229 | 289 | ||
290 | static inline unsigned long long paravirt_sched_clock(void) | ||
291 | { | ||
292 | return pv_time_ops.sched_clock(); | ||
293 | } | ||
294 | |||
230 | #endif /* !__ASSEMBLY__ */ | 295 | #endif /* !__ASSEMBLY__ */ |
231 | 296 | ||
232 | #else | 297 | #else |