diff options
author | Isaku Yamahata <yamahata@valinux.co.jp> | 2008-05-27 18:08:01 -0400 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2008-05-27 18:08:01 -0400 |
commit | 4df8d22bbbb16ccfa4e10cc068135183c9e5e006 (patch) | |
tree | 6c989c6c493b9487311831218810e5e84886190d /arch/ia64/kernel/paravirt.c | |
parent | 498c5170472ff0c03a29d22dbd33225a0be038f4 (diff) |
[IA64] pvops: paravirtualize entry.S
paravirtualize ia64_swtich_to, ia64_leave_syscall and ia64_leave_kernel.
They include sensitive or performance critical privileged instructions
so that they need paravirtualization.
To paravirtualize them by single source and multi compile
they are converted into indirect jump. And define each pv instances.
Cc: Keith Owens <kaos@ocs.com.au>
Cc: "Dong, Eddie" <eddie.dong@intel.com>
Signed-off-by: Isaku Yamahata <yamahata@valinux.co.jp>
Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch/ia64/kernel/paravirt.c')
-rw-r--r-- | arch/ia64/kernel/paravirt.c | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/arch/ia64/kernel/paravirt.c b/arch/ia64/kernel/paravirt.c index e5482bb6841e..7126ea8f7ecc 100644 --- a/arch/ia64/kernel/paravirt.c +++ b/arch/ia64/kernel/paravirt.c | |||
@@ -286,3 +286,22 @@ struct pv_cpu_ops pv_cpu_ops = { | |||
286 | = ia64_native_intrin_local_irq_restore_func, | 286 | = ia64_native_intrin_local_irq_restore_func, |
287 | }; | 287 | }; |
288 | EXPORT_SYMBOL(pv_cpu_ops); | 288 | EXPORT_SYMBOL(pv_cpu_ops); |
289 | |||
290 | /****************************************************************************** | ||
291 | * replacement of hand written assembly codes. | ||
292 | */ | ||
293 | |||
294 | void | ||
295 | paravirt_cpu_asm_init(const struct pv_cpu_asm_switch *cpu_asm_switch) | ||
296 | { | ||
297 | extern unsigned long paravirt_switch_to_targ; | ||
298 | extern unsigned long paravirt_leave_syscall_targ; | ||
299 | extern unsigned long paravirt_work_processed_syscall_targ; | ||
300 | extern unsigned long paravirt_leave_kernel_targ; | ||
301 | |||
302 | paravirt_switch_to_targ = cpu_asm_switch->switch_to; | ||
303 | paravirt_leave_syscall_targ = cpu_asm_switch->leave_syscall; | ||
304 | paravirt_work_processed_syscall_targ = | ||
305 | cpu_asm_switch->work_processed_syscall; | ||
306 | paravirt_leave_kernel_targ = cpu_asm_switch->leave_kernel; | ||
307 | } | ||