|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC 09/10] xen/arm: Remove the C version of do_trap_hypercall
This has been fully implemented in assembly so it's not necessary to
keep it anymore.
Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx>
---
It's possible to factorize the code to handle HVC32/HVC64, but this will
be done in the next patch.
---
xen/arch/arm/traps.c | 74 ++++++----------------------------------------------
1 file changed, 8 insertions(+), 66 deletions(-)
diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c
index cc67d23..3cd8992 100644
--- a/xen/arch/arm/traps.c
+++ b/xen/arch/arm/traps.c
@@ -1335,70 +1335,6 @@ static void do_trap_psci(struct cpu_user_regs *regs)
}
}
-#ifdef CONFIG_ARM_64
-#define HYPERCALL_RESULT_REG(r) (r)->x0
-#define HYPERCALL_ARG1(r) (r)->x0
-#define HYPERCALL_ARG2(r) (r)->x1
-#define HYPERCALL_ARG3(r) (r)->x2
-#define HYPERCALL_ARG4(r) (r)->x3
-#define HYPERCALL_ARG5(r) (r)->x4
-#define HYPERCALL_ARGS(r) (r)->x0, (r)->x1, (r)->x2, (r)->x3, (r)->x4
-#else
-#define HYPERCALL_RESULT_REG(r) (r)->r0
-#define HYPERCALL_ARG1(r) (r)->r0
-#define HYPERCALL_ARG2(r) (r)->r1
-#define HYPERCALL_ARG3(r) (r)->r2
-#define HYPERCALL_ARG4(r) (r)->r3
-#define HYPERCALL_ARG5(r) (r)->r4
-#define HYPERCALL_ARGS(r) (r)->r0, (r)->r1, (r)->r2, (r)->r3, (r)->r4
-#endif
-
-static void do_trap_hypercall(struct cpu_user_regs *regs, register_t *nr,
- unsigned long iss)
-{
-#ifndef NDEBUG
- register_t orig_pc = regs->pc;
-#endif
-
- if ( iss != XEN_HYPERCALL_TAG )
- domain_crash_synchronous();
-
- if ( *nr >= NR_hypercalls )
- {
- perfc_incr(invalid_hypercalls);
- HYPERCALL_RESULT_REG(regs) = -ENOSYS;
- return;
- }
-
- perfc_incra(hypercalls, *nr);
-
- HYPERCALL_RESULT_REG(regs) = do_dispatch_hypercall(HYPERCALL_ARGS(regs),
- *nr);
-
-#ifndef NDEBUG
- /*
- * Clobber argument registers only if pc is unchanged, otherwise
- * this is a hypercall continuation.
- */
- if ( orig_pc == regs->pc )
- {
- switch ( hypercall_args_table[*nr] ) {
- case 5: HYPERCALL_ARG5(regs) = 0xDEADBEEF;
- case 4: HYPERCALL_ARG4(regs) = 0xDEADBEEF;
- case 3: HYPERCALL_ARG3(regs) = 0xDEADBEEF;
- case 2: HYPERCALL_ARG2(regs) = 0xDEADBEEF;
- case 1: /* Don't clobber x0/r0 -- it's the return value */
- break;
- case 0:
- ASSERT(hypercall_table[*nr] == do_ni_hypercall);
- break;
- default: BUG();
- }
- *nr = 0xDEADBEEF;
- }
-#endif
-}
-
static bool_t check_multicall_32bit_clean(struct multicall_entry *multi)
{
int i;
@@ -2476,7 +2412,10 @@ asmlinkage void do_trap_hypervisor(struct cpu_user_regs
*regs)
#endif
if ( hsr.iss == 0 )
return do_trap_psci(regs);
- do_trap_hypercall(regs, (register_t *)®s->r12, hsr.iss);
+
+ /* The ISS is not supported */
+ domain_crash_synchronous();
+
break;
#ifdef CONFIG_ARM_64
case HSR_EC_HVC64:
@@ -2488,7 +2427,10 @@ asmlinkage void do_trap_hypervisor(struct cpu_user_regs
*regs)
#endif
if ( hsr.iss == 0 )
return do_trap_psci(regs);
- do_trap_hypercall(regs, ®s->x16, hsr.iss);
+
+ /* The ISS is not supported */
+ domain_crash_synchronous();
+
break;
case HSR_EC_SMC64:
/*
--
2.1.4
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |