1 /****************************************************************************** 2 * multicall.c 3 */ 4 5 EMIT_FILE; 6 7 #include <xen/types.h> 8 #include <xen/hypercall.h> 9 #include <xen/trace.h> 10 11 #define COMPAT 12 typedef int ret_t; 13 #undef do_multicall_call 14 xlat_multicall_entry(struct mc_state * mcs)15static inline void xlat_multicall_entry(struct mc_state *mcs) 16 { 17 unsigned int i; 18 typeof(mcs->compat_call.args[0]) args[ARRAY_SIZE(mcs->call.args)]; 19 20 for ( i = 0; i < ARRAY_SIZE(args); i++ ) 21 args[i] = mcs->call.args[i]; 22 23 memcpy(mcs->compat_call.args, args, sizeof(args)); 24 } 25 26 #define multicall_entry compat_multicall_entry 27 #define multicall_entry_t multicall_entry_compat_t 28 #define do_multicall_call compat_multicall_call 29 #define call compat_call 30 #define do_multicall(l, n) compat_multicall(_##l, n) 31 #define _XEN_GUEST_HANDLE(t) XEN_GUEST_HANDLE(t) 32 #define _XEN_GUEST_HANDLE_PARAM(t) XEN_GUEST_HANDLE(t) 33 __trace_multicall_call(multicall_entry_t * call)34static void __trace_multicall_call(multicall_entry_t *call) 35 { 36 xen_ulong_t args[ARRAY_SIZE(call->args)]; 37 unsigned int i; 38 39 for ( i = 0; i < ARRAY_SIZE(args); i++ ) 40 args[i] = call->args[i]; 41 42 __trace_hypercall(TRC_PV_HYPERCALL_SUBCALL, call->op, args); 43 } 44 45 #include "../multicall.c" 46 47 /* 48 * Local variables: 49 * mode: C 50 * c-file-style: "BSD" 51 * c-basic-offset: 4 52 * tab-width: 4 53 * indent-tabs-mode: nil 54 * End: 55 */ 56