aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/kernel/paravirt.c
diff options
context:
space:
mode:
authorIsaku Yamahata <yamahata@valinux.co.jp>2008-05-27 18:08:01 -0400
committerTony Luck <tony.luck@intel.com>2008-05-27 18:08:01 -0400
commit4df8d22bbbb16ccfa4e10cc068135183c9e5e006 (patch)
tree6c989c6c493b9487311831218810e5e84886190d /arch/ia64/kernel/paravirt.c
parent498c5170472ff0c03a29d22dbd33225a0be038f4 (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.c19
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};
288EXPORT_SYMBOL(pv_cpu_ops); 288EXPORT_SYMBOL(pv_cpu_ops);
289
290/******************************************************************************
291 * replacement of hand written assembly codes.
292 */
293
294void
295paravirt_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}