Module: xenomai-3 Branch: arm64 Commit: 36e83ae15c4ac68179a315a089afa3cd5cefc73d URL: http://git.xenomai.org/?p=xenomai-3.git;a=commit;h=36e83ae15c4ac68179a315a089afa3cd5cefc73d
Author: Don Mahurin <d...@mperpetuo.com> Date: Mon Sep 14 12:52:27 2015 -0700 cobalt/arm64: Use empty mayday implementation for arm64. The arm mayday implementation was not correct for arm64. Replace with empty implementation. Handle mayday in the linux domain, using xnthread_relax. This change is essentially the same as the general change proposed in the 'Mayday issues again' discussion (Jan Kiszka, Jun 21), though only applied to arch/arm64. --- kernel/cobalt/arch/arm64/mayday.c | 86 +------------------------------------ 1 file changed, 1 insertion(+), 85 deletions(-) diff --git a/kernel/cobalt/arch/arm64/mayday.c b/kernel/cobalt/arch/arm64/mayday.c index bc51ad6..ca1151c 100644 --- a/kernel/cobalt/arch/arm64/mayday.c +++ b/kernel/cobalt/arch/arm64/mayday.c @@ -28,72 +28,6 @@ static void *mayday; static inline void setup_mayday(void *page) { - /* - * We want this code to appear at the top of the MAYDAY page: - * - * ifdef ARM_EABI - * - * e59f000c ldr r0, [pc, #12] - * e59f700c ldr r7, [pc, #12] - * ef000000 svc 0x00000000 - * e3a00000 mov r0, #0 - * e5800000 str r0, [r0] ; <bug> - * 1000005e .word 0x1000005e ; sc_cobalt_mayday | __COBALT_SYSCALL_BIT - * 000f0042 .word 0x000f0042 - * - * elif ARM_OABI - * - * e59f0008 ldr r0, [pc, #8] - * ef9f0042 swi 0x009f0042 - * e3a00000 mov r0, #0 - * e5800000 str r0, [r0] ; <bug> - * 1000005e .word 0x1000005e ; sc_cobalt_mayday | __COBALT_SYSCALL_BIT - * - * endif - * - * 32bit instruction words will be laid out by the compiler as - * the target endianness requires. - * - * We don't mess with CPSR here, so no need to save/restore it - * in handle/fixup code. - */ -#ifdef __ARM_EABI__ - static const struct { - u32 ldr_r0; - u32 ldr_r7; - u32 swi_0; - u32 mov_r0; - u32 str_r0; - u32 cst_r0; - u32 cst_r7; - } code = { - .ldr_r0 = 0xe59f000c, - .ldr_r7 = 0xe59f700c, - .swi_0 = 0xef000000, - .mov_r0 = 0xe3a00000, - .str_r0 = 0xe5800000, - .cst_r0 = __xn_syscode(sc_cobalt_mayday), - .cst_r7 = 0x000f0042, - }; -#else /* OABI */ - static const struct { - u32 ldr_r0; - u32 swi_syscall; - u32 mov_r0; - u32 str_r0; - u32 cst_r0; - } code = { - .ldr_r0 = 0xe59f0008, - .swi_syscall = 0xef9f0042, - .mov_r0 = 0xe3a00000, - .str_r0 = 0xe5800000, - .cst_r0 = __xn_syscode(sc_cobalt_mayday), - }; -#endif /* OABI */ - - memcpy(page, &code, sizeof(code)); - - flush_dcache_page(vmalloc_to_page(page)); } int xnarch_init_mayday(void) @@ -120,27 +54,9 @@ void *xnarch_get_mayday_page(void) void xnarch_handle_mayday(struct xnarchtcb *tcb, struct pt_regs *regs, unsigned long tramp) { - tcb->mayday.pc = regs->pc; - tcb->mayday.r0 = regs->regs[0]; -#ifdef __ARM_EABI__ - tcb->mayday.r7 = regs->regs[7]; -#endif -#ifdef CONFIG_ARM_THUMB - /* The code on the mayday page must be run in ARM mode */ - tcb->mayday.psr = regs->cpsr; - regs->cpsr &= ~PSR_T_BIT; -#endif - regs->pc = tramp; + xnthread_relax(0, 0); } void xnarch_fixup_mayday(struct xnarchtcb *tcb, struct pt_regs *regs) { - regs->pc = tcb->mayday.pc; - regs->regs[0] = tcb->mayday.r0; -#ifdef __ARM_EABI__ - regs->regs[7] = tcb->mayday.r7; -#endif -#ifdef CONFIG_ARM_THUMB - regs->cpsr = tcb->mayday.psr; -#endif } _______________________________________________ Xenomai-git mailing list Xenomai-git@xenomai.org http://xenomai.org/mailman/listinfo/xenomai-git