# HG changeset patch
# User awilliam@xxxxxxxxxxxx
# Date 1168811931 25200
# Node ID 43c5302ee92dc0a12df02084c07e6172f2b6ebe8
# Parent 809043a22786e2b31972577e1aca881ae6683a06
[IA64] Fix multicall hypercall
Signed-off-by: Anthony Xu <anthony.xu@xxxxxxxxx>
---
xen/arch/ia64/linux-xen/entry.S | 9 +++++++++
xen/include/asm-ia64/multicall.h | 12 ++++++------
2 files changed, 15 insertions(+), 6 deletions(-)
diff -r 809043a22786 -r 43c5302ee92d xen/arch/ia64/linux-xen/entry.S
--- a/xen/arch/ia64/linux-xen/entry.S Fri Jan 12 13:01:25 2007 -0700
+++ b/xen/arch/ia64/linux-xen/entry.S Sun Jan 14 14:58:51 2007 -0700
@@ -1472,6 +1472,15 @@ END(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
diff -r 809043a22786 -r 43c5302ee92d xen/include/asm-ia64/multicall.h
--- a/xen/include/asm-ia64/multicall.h Fri Jan 12 13:01:25 2007 -0700
+++ b/xen/include/asm-ia64/multicall.h Sun Jan 14 14:58:51 2007 -0700
@@ -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;
}
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|