ia64/xen-unstable

changeset 13371:43c5302ee92d

[IA64] Fix multicall hypercall

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  }