ia64/xen-unstable
changeset 13371:43c5302ee92d
[IA64] Fix multicall hypercall
Signed-off-by: Anthony Xu <anthony.xu@intel.com>
Signed-off-by: Anthony Xu <anthony.xu@intel.com>
author | awilliam@xenbuild2.aw |
---|---|
date | Sun Jan 14 14:58:51 2007 -0700 (2007-01-14) |
parents | 809043a22786 |
children | c6b683ba68f5 |
files | xen/arch/ia64/linux-xen/entry.S xen/include/asm-ia64/multicall.h |
line diff
1.1 --- a/xen/arch/ia64/linux-xen/entry.S Fri Jan 12 13:01:25 2007 -0700 1.2 +++ b/xen/arch/ia64/linux-xen/entry.S Sun Jan 14 14:58:51 2007 -0700 1.3 @@ -1472,6 +1472,15 @@ 1: mov gp=loc2 // restore gp 1.4 END(unw_init_running) 1.5 1.6 #ifdef XEN 1.7 +GLOBAL_ENTRY(ia64_do_multicall_call) 1.8 + movl r2=ia64_hypercall_table;; 1.9 + shladd r2=r38,3,r2;; 1.10 + ld8 r2=[r2];; 1.11 + mov b6=r2 1.12 + br.sptk.many b6;; 1.13 +END(ia64_do_multicall_call) 1.14 + 1.15 + 1.16 .rodata 1.17 .align 8 1.18 .globl ia64_hypercall_table
2.1 --- a/xen/include/asm-ia64/multicall.h Fri Jan 12 13:01:25 2007 -0700 2.2 +++ b/xen/include/asm-ia64/multicall.h Sun Jan 14 14:58:51 2007 -0700 2.3 @@ -4,26 +4,26 @@ 2.4 #include <public/xen.h> 2.5 #include <xen/errno.h> 2.6 2.7 -typedef unsigned long (*hypercall_t)( 2.8 +extern unsigned long ia64_do_multicall_call( 2.9 unsigned long arg0, 2.10 unsigned long arg1, 2.11 unsigned long arg2, 2.12 unsigned long arg3, 2.13 unsigned long arg4, 2.14 - unsigned long arg5); 2.15 - 2.16 -extern const hypercall_t ia64_hypercall_table[]; 2.17 + unsigned long arg5, 2.18 + unsigned long op); 2.19 2.20 static inline void do_multicall_call(multicall_entry_t *call) 2.21 { 2.22 if (call->op < NR_hypercalls) 2.23 - call->result = (*ia64_hypercall_table[call->op])( 2.24 + call->result = ia64_do_multicall_call( 2.25 call->args[0], 2.26 call->args[1], 2.27 call->args[2], 2.28 call->args[3], 2.29 call->args[4], 2.30 - call->args[5]); 2.31 + call->args[5], 2.32 + call->op); 2.33 else 2.34 call->result = -ENOSYS; 2.35 }