Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1246ae0b authored by Jeremy Fitzhardinge's avatar Jeremy Fitzhardinge Committed by Jeremy Fitzhardinge
Browse files

xen: add variable hypercall caller



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

[ Impact: make arbitrary hypercalls; needed for privcmd ]

Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
parent eba3ff8b
Loading
Loading
Loading
Loading
+17 −0
Original line number Diff line number Diff line
@@ -200,6 +200,23 @@ extern struct { char _entry[32]; } hypercall_page[];
	(type)__res;							\
})

static inline long
privcmd_call(unsigned call,
	     unsigned long a1, unsigned long a2,
	     unsigned long a3, unsigned long a4,
	     unsigned long a5)
{
	__HYPERCALL_DECLS;
	__HYPERCALL_5ARG(a1, a2, a3, a4, a5);

	asm volatile("call *%[call]"
		     : __HYPERCALL_5PARAM
		     : [call] "a" (&hypercall_page[call])
		     : __HYPERCALL_CLOBBER5);

	return (long)__res;
}

static inline int
HYPERVISOR_set_trap_table(struct trap_info *table)
{