[IA64] Fix multicall hypercall
authorawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Sun, 14 Jan 2007 21:58:51 +0000 (14:58 -0700)
committerawilliam@xenbuild2.aw <awilliam@xenbuild2.aw>
Sun, 14 Jan 2007 21:58:51 +0000 (14:58 -0700)
Signed-off-by: Anthony Xu <anthony.xu@intel.com>
xen/arch/ia64/linux-xen/entry.S
xen/include/asm-ia64/multicall.h

index cb0e89cdd9d9861b9499575c92bc31b72ba44850..0f6aaf80d78716eaddd5b7ef38dcdeb4cf6bc70c 100644 (file)
@@ -1472,6 +1472,15 @@ GLOBAL_ENTRY(unw_init_running)
 END(unw_init_running)
 
 #ifdef XEN
+GLOBAL_ENTRY(ia64_do_multicall_call)
+       movl r2=ia64_hypercall_table;;
+       shladd r2=r38,3,r2;;
+       ld8 r2=[r2];;
+       mov b6=r2
+       br.sptk.many b6;;
+END(ia64_do_multicall_call)
+
+    
        .rodata
        .align 8
        .globl ia64_hypercall_table
index 15b825bbf03645e20be9aec86de5efaeb4fd48b7..500238235993da84e58cea1ceab297b2a825163c 100644 (file)
@@ -4,26 +4,26 @@
 #include <public/xen.h>
 #include <xen/errno.h>
 
-typedef unsigned long (*hypercall_t)(
+extern unsigned long ia64_do_multicall_call(
                        unsigned long arg0,
                        unsigned long arg1,
                        unsigned long arg2,
                        unsigned long arg3,
                        unsigned long arg4,
-                       unsigned long arg5);
-
-extern const hypercall_t ia64_hypercall_table[];
+                       unsigned long arg5,
+                       unsigned long op);
 
 static inline void do_multicall_call(multicall_entry_t *call)
 {
        if (call->op < NR_hypercalls)
-               call->result = (*ia64_hypercall_table[call->op])(
+               call->result = ia64_do_multicall_call(
                        call->args[0],
                        call->args[1],
                        call->args[2],
                        call->args[3],
                        call->args[4],
-                       call->args[5]);
+                       call->args[5],
+                       call->op);
        else
                call->result = -ENOSYS;
 }