Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

xen: add variable hypercall caller

Allow non-constant hypercall to be called, for privcmd.

[ Impact: make arbitrary hypercalls; needed for privcmd ]

Signed-off-by: Jeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>

authored by

Jeremy Fitzhardinge and committed by
Jeremy Fitzhardinge
1246ae0b eba3ff8b

+17
+17
arch/x86/include/asm/xen/hypercall.h
··· 200 200 (type)__res; \ 201 201 }) 202 202 203 + static inline long 204 + privcmd_call(unsigned call, 205 + unsigned long a1, unsigned long a2, 206 + unsigned long a3, unsigned long a4, 207 + unsigned long a5) 208 + { 209 + __HYPERCALL_DECLS; 210 + __HYPERCALL_5ARG(a1, a2, a3, a4, a5); 211 + 212 + asm volatile("call *%[call]" 213 + : __HYPERCALL_5PARAM 214 + : [call] "a" (&hypercall_page[call]) 215 + : __HYPERCALL_CLOBBER5); 216 + 217 + return (long)__res; 218 + } 219 + 203 220 static inline int 204 221 HYPERVISOR_set_trap_table(struct trap_info *table) 205 222 {