[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-devel] [RFC 10/10] xen/arm: Factorize the C code to dispatch HVC
Now that Xen hypercall is fully dispatched in assembly, the code to handle HVC32/HVC64 is mostly the same. Create an helper to avoid duplicating the code. Signed-off-by: Julien Grall <julien.grall@xxxxxxxxxx> --- xen/arch/arm/traps.c | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/xen/arch/arm/traps.c b/xen/arch/arm/traps.c index 3cd8992..a49530a 100644 --- a/xen/arch/arm/traps.c +++ b/xen/arch/arm/traps.c @@ -1335,6 +1335,20 @@ static void do_trap_psci(struct cpu_user_regs *regs) } } +static void do_trap_hvc(struct cpu_user_regs *regs, uint32_t iss) +{ + +#ifndef NDEBUG + if ( (iss & 0xff00) == 0xff00 ) + return do_debug_trap(regs, iss & 0x00ff); +#endif + if ( iss == 0 ) + return do_trap_psci(regs); + + /* The ISS is not supported */ + domain_crash_synchronous(); +} + static bool_t check_multicall_32bit_clean(struct multicall_entry *multi) { int i; @@ -2406,31 +2420,13 @@ asmlinkage void do_trap_hypervisor(struct cpu_user_regs *regs) case HSR_EC_HVC32: GUEST_BUG_ON(!psr_mode_is_32bit(regs->cpsr)); perfc_incr(trap_hvc32); -#ifndef NDEBUG - if ( (hsr.iss & 0xff00) == 0xff00 ) - return do_debug_trap(regs, hsr.iss & 0x00ff); -#endif - if ( hsr.iss == 0 ) - return do_trap_psci(regs); - - /* The ISS is not supported */ - domain_crash_synchronous(); - + do_trap_hvc(regs, hsr.iss); break; #ifdef CONFIG_ARM_64 case HSR_EC_HVC64: GUEST_BUG_ON(psr_mode_is_32bit(regs->cpsr)); perfc_incr(trap_hvc64); -#ifndef NDEBUG - if ( (hsr.iss & 0xff00) == 0xff00 ) - return do_debug_trap(regs, hsr.iss & 0x00ff); -#endif - if ( hsr.iss == 0 ) - return do_trap_psci(regs); - - /* The ISS is not supported */ - domain_crash_synchronous(); - + do_trap_hvc(regs, hsr.iss); 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 |