Module: xenomai-head Branch: master Commit: 20f791df6ef68f5967b42a814e47aaffee3d7c6f URL: http://git.xenomai.org/?p=xenomai-head.git;a=commit;h=20f791df6ef68f5967b42a814e47aaffee3d7c6f
Author: Philippe Gerum <r...@xenomai.org> Date: Mon Oct 18 18:02:51 2010 +0200 arm: remove RT signal handling from syscall path --- include/asm-arm/bits/shadow.h | 8 ------ include/asm-arm/syscall.h | 53 +++++++++++++--------------------------- include/asm-arm/system.h | 1 - 3 files changed, 17 insertions(+), 45 deletions(-) diff --git a/include/asm-arm/bits/shadow.h b/include/asm-arm/bits/shadow.h index 270156e..883d073 100644 --- a/include/asm-arm/bits/shadow.h +++ b/include/asm-arm/bits/shadow.h @@ -197,7 +197,6 @@ static inline void xnarch_setup_mayday_page(void *page) * e28003c3 add r0, r0, #201326595 ; 0xc000003 * e3a0780f mov r7, #983040 ; 0xf0000 * e2877042 add r7, r7, #66 ; 0x42 - * e3a06000 mov r6, #0 * ef000000 svc 0x00000000 * e3a00000 mov r0, #0 * e5800000 str r0, [r0] ; <bug> @@ -206,7 +205,6 @@ static inline void xnarch_setup_mayday_page(void *page) * * e3a00f8a mov r0, #552 ; 0x228 * e28003c3 add r0, r0, #201326595 ; 0xc000003 - * e3a06000 mov r6, #0 * ef9f0042 swi 0x009f0042 * e3a00000 mov r0, #0 * e5800000 str r0, [r0] ; <bug> @@ -225,7 +223,6 @@ static inline void xnarch_setup_mayday_page(void *page) u32 add_muxh; u32 mov_sysh; u32 add_sysl; - u32 mov_sigp; u32 swi_0; u32 mov_r0; u32 str_r0; @@ -234,7 +231,6 @@ static inline void xnarch_setup_mayday_page(void *page) .add_muxh = 0xe28003c3, .mov_sysh = 0xe3a0780f, .add_sysl = 0xe2877042, - .mov_sigp = 0xe3a06000, .swi_0 = 0xef000000, .mov_r0 = 0xe3a00000, .str_r0 = 0xe5800000 @@ -243,14 +239,12 @@ static inline void xnarch_setup_mayday_page(void *page) static const struct { u32 mov_muxl; u32 add_muxh; - u32 mov_sigp; u32 swi_syscall; u32 mov_r0; u32 str_r0; } code = { .mov_muxl = 0xe3a00f8a, .add_muxh = 0xe28003c3, - .mov_sigp = 0xe3a06000, .swi_syscall = 0x009f0042, .mov_r0 = 0xe3a00000, .str_r0 = 0xe5800000 @@ -273,7 +267,6 @@ static inline void xnarch_handle_mayday(struct xnarchtcb *tcb, { tcb->mayday.pc = regs->ARM_pc; tcb->mayday.r0 = regs->ARM_r0; - tcb->mayday.r6 = regs->ARM_r6; #ifdef CONFIG_XENO_ARM_EABI tcb->mayday.r7 = regs->ARM_r7; #endif @@ -285,7 +278,6 @@ static inline void xnarch_fixup_mayday(struct xnarchtcb *tcb, { regs->ARM_pc = tcb->mayday.pc; regs->ARM_r0 = tcb->mayday.r0; - regs->ARM_r6 = tcb->mayday.r6; #ifdef CONFIG_XENO_ARM_EABI regs->ARM_r7 = tcb->mayday.r7; #endif diff --git a/include/asm-arm/syscall.h b/include/asm-arm/syscall.h index 1851422..672819a 100644 --- a/include/asm-arm/syscall.h +++ b/include/asm-arm/syscall.h @@ -49,7 +49,6 @@ #define __xn_reg_arg3(regs) ((regs)->ARM_r3) #define __xn_reg_arg4(regs) ((regs)->ARM_r4) #define __xn_reg_arg5(regs) ((regs)->ARM_r5) -#define __xn_reg_sigp(regs) ((regs)->ARM_r6) /* In OABI_COMPAT mode, handle both OABI and EABI userspace syscalls */ #ifdef CONFIG_OABI_COMPAT @@ -106,33 +105,32 @@ static inline int __xn_interrupted_p(struct pt_regs *regs) #error __thread is too buggy with gcc 4.3 and later, please do not pass --with-__thread to configure #endif -#define LOADARGS_0(muxcode, sigp, dummy...) \ - __a0 = (unsigned long) (muxcode); \ - __a6 = (unsigned long) (sigp) -#define LOADARGS_1(muxcode, sigp, arg1) \ - LOADARGS_0(muxcode, sigp); \ +#define LOADARGS_0(muxcode, dummy...) \ + __a0 = (unsigned long) (muxcode) +#define LOADARGS_1(muxcode, arg1) \ + LOADARGS_0(muxcode); \ __a1 = (unsigned long) (arg1) -#define LOADARGS_2(muxcode, sigp, arg1, arg2) \ - LOADARGS_1(muxcode, sigp, arg1); \ +#define LOADARGS_2(muxcode, arg1, arg2) \ + LOADARGS_1(muxcode, arg1); \ __a2 = (unsigned long) (arg2) -#define LOADARGS_3(muxcode, sigp, arg1, arg2, arg3) \ - LOADARGS_2(muxcode, sigp, arg1, arg2); \ +#define LOADARGS_3(muxcode, arg1, arg2, arg3) \ + LOADARGS_2(muxcode, arg1, arg2); \ __a3 = (unsigned long) (arg3) -#define LOADARGS_4(muxcode, sigp, arg1, arg2, arg3, arg4) \ - LOADARGS_3(muxcode, sigp, arg1, arg2, arg3); \ +#define LOADARGS_4(muxcode, arg1, arg2, arg3, arg4) \ + LOADARGS_3(muxcode, arg1, arg2, arg3); \ __a4 = (unsigned long) (arg4) -#define LOADARGS_5(muxcode, sigp, arg1, arg2, arg3, arg4, arg5) \ - LOADARGS_4(muxcode, sigp, arg1, arg2, arg3, arg4); \ +#define LOADARGS_5(muxcode, arg1, arg2, arg3, arg4, arg5) \ + LOADARGS_4(muxcode, arg1, arg2, arg3, arg4); \ __a5 = (unsigned long) (arg5) -#define CLOBBER_REGS_0 "r0", "r6" +#define CLOBBER_REGS_0 "r0" #define CLOBBER_REGS_1 CLOBBER_REGS_0, "r1" #define CLOBBER_REGS_2 CLOBBER_REGS_1, "r2" #define CLOBBER_REGS_3 CLOBBER_REGS_2, "r3" #define CLOBBER_REGS_4 CLOBBER_REGS_3, "r4" #define CLOBBER_REGS_5 CLOBBER_REGS_4, "r5" -#define LOADREGS_0 __r0 = __a0; __r6 = __a6 +#define LOADREGS_0 __r0 = __a0 #define LOADREGS_1 LOADREGS_0; __r1 = __a1 #define LOADREGS_2 LOADREGS_1; __r2 = __a2 #define LOADREGS_3 LOADREGS_2; __r3 = __a3 @@ -140,8 +138,7 @@ static inline int __xn_interrupted_p(struct pt_regs *regs) #define LOADREGS_5 LOADREGS_4; __r5 = __a5 #define ASM_INDECL_0 \ - unsigned long __a0; register unsigned long __r0 __asm__ ("r0"); \ - unsigned long __a6; register unsigned long __r6 __asm__ ("r6") + unsigned long __a0; register unsigned long __r0 __asm__ ("r0"); #define ASM_INDECL_1 ASM_INDECL_0; \ unsigned long __a1; register unsigned long __r1 __asm__ ("r1") #define ASM_INDECL_2 ASM_INDECL_1; \ @@ -153,7 +150,7 @@ static inline int __xn_interrupted_p(struct pt_regs *regs) #define ASM_INDECL_5 ASM_INDECL_4; \ unsigned long __a5; register unsigned long __r5 __asm__ ("r5") -#define ASM_INPUT_0 "0" (__r0), "r" (__r6) +#define ASM_INPUT_0 "0" (__r0) #define ASM_INPUT_1 ASM_INPUT_0, "r" (__r1) #define ASM_INPUT_2 ASM_INPUT_1, "r" (__r2) #define ASM_INPUT_3 ASM_INPUT_2, "r" (__r3) @@ -178,7 +175,7 @@ static inline int __xn_interrupted_p(struct pt_regs *regs) #define __xn_syscall "swi\t" __sys1(__NR_OABI_SYSCALL_BASE + XENO_ARM_SYSCALL) "" #endif -#define XENOMAI_DO_SYSCALL_INNER(nr, shifted_id, op, args...) \ +#define XENOMAI_DO_SYSCALL(nr, shifted_id, op, args...) \ ({ \ ASM_INDECL_##nr; \ __SYS_REG_DECL; \ @@ -195,20 +192,6 @@ static inline int __xn_interrupted_p(struct pt_regs *regs) (int) __r0; \ }) -#define XENOMAI_DO_SYSCALL(nr, shifted_id, op, args...) \ - ({ \ - int err, res = -ERESTART; \ - struct xnsig sigs; \ - \ - do { \ - sigs.nsigs = 0; \ - err = XENOMAI_DO_SYSCALL_INNER(nr, shifted_id, \ - op, &sigs, args); \ - res = xnsig_dispatch(&sigs, res, err); \ - } while (res == -ERESTART); \ - res; \ - }) - #define XENOMAI_SYSCALL0(op) \ XENOMAI_DO_SYSCALL(0,0,op) #define XENOMAI_SYSCALL1(op,a1) \ @@ -223,8 +206,6 @@ static inline int __xn_interrupted_p(struct pt_regs *regs) XENOMAI_DO_SYSCALL(5,0,op,a1,a2,a3,a4,a5) #define XENOMAI_SYSBIND(a1,a2,a3,a4) \ XENOMAI_DO_SYSCALL(4,0,__xn_sys_bind,a1,a2,a3,a4) -#define XENOMAI_SYSSIGS(sigs) \ - XENOMAI_DO_SYSCALL_INNER(0, 0, __xn_sys_get_next_sigs, sigs) #define XENOMAI_SKINCALL0(id,op) \ XENOMAI_DO_SYSCALL(0,id,op) diff --git a/include/asm-arm/system.h b/include/asm-arm/system.h index 2b7b734..2ccfb82 100644 --- a/include/asm-arm/system.h +++ b/include/asm-arm/system.h @@ -73,7 +73,6 @@ typedef struct xnarchtcb { /* Per-thread arch-dependent block */ struct { unsigned long pc; unsigned long r0; - unsigned long r6; #ifdef CONFIG_XENO_ARM_EABI unsigned long r7; #endif _______________________________________________ Xenomai-git mailing list Xenomai-git@gna.org https://mail.gna.org/listinfo/xenomai-git