From d2fee79b923fc73f7ab94ff301da0f21654908cb Mon Sep 17 00:00:00 2001 From: Al Viro Date: Sun, 23 Dec 2012 02:17:09 -0500 Subject: [PATCH] --- yaml --- r: 356672 b: refs/heads/master c: 6ec78be4cdff4db6e6ea930db9f5d912bc05febc h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/arch/blackfin/Kconfig | 1 - trunk/arch/blackfin/kernel/signal.c | 12 ++++++++++-- trunk/arch/c6x/Kconfig | 1 + trunk/arch/c6x/kernel/entry.S | 12 ------------ 5 files changed, 12 insertions(+), 16 deletions(-) diff --git a/[refs] b/[refs] index b9ebec676dca..5aee64c3c84e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 79d432103c6dc4ed46adc8e1f53d34e8ba7089c0 +refs/heads/master: 6ec78be4cdff4db6e6ea930db9f5d912bc05febc diff --git a/trunk/arch/blackfin/Kconfig b/trunk/arch/blackfin/Kconfig index a8a9ca7d40f3..b6f3ad5441c5 100644 --- a/trunk/arch/blackfin/Kconfig +++ b/trunk/arch/blackfin/Kconfig @@ -45,7 +45,6 @@ config BLACKFIN select ARCH_USES_GETTIMEOFFSET if !GENERIC_CLOCKEVENTS select HAVE_MOD_ARCH_SPECIFIC select MODULES_USE_ELF_RELA - select GENERIC_SIGALTSTACK config GENERIC_CSUM def_bool y diff --git a/trunk/arch/blackfin/kernel/signal.c b/trunk/arch/blackfin/kernel/signal.c index b022af6c48f8..84b4be05840c 100644 --- a/trunk/arch/blackfin/kernel/signal.c +++ b/trunk/arch/blackfin/kernel/signal.c @@ -37,6 +37,11 @@ struct rt_sigframe { struct ucontext uc; }; +asmlinkage int sys_sigaltstack(const stack_t __user *uss, stack_t __user *uoss) +{ + return do_sigaltstack(uss, uoss, rdusp()); +} + static inline int rt_restore_sigcontext(struct pt_regs *regs, struct sigcontext __user *sc, int *pr0) { @@ -95,7 +100,7 @@ asmlinkage int sys_rt_sigreturn(void) if (rt_restore_sigcontext(regs, &frame->uc.uc_mcontext, &r0)) goto badframe; - if (restore_altstack(&frame->uc.uc_stack)) + if (do_sigaltstack(&frame->uc.uc_stack, NULL, regs->usp) == -EFAULT) goto badframe; return r0; @@ -173,7 +178,10 @@ setup_rt_frame(int sig, struct k_sigaction *ka, siginfo_t * info, /* Create the ucontext. */ err |= __put_user(0, &frame->uc.uc_flags); err |= __put_user(0, &frame->uc.uc_link); - err |= __save_altstack(&frame->uc.uc_stack, rdusp()); + err |= + __put_user((void *)current->sas_ss_sp, &frame->uc.uc_stack.ss_sp); + err |= __put_user(sas_ss_flags(rdusp()), &frame->uc.uc_stack.ss_flags); + err |= __put_user(current->sas_ss_size, &frame->uc.uc_stack.ss_size); err |= rt_setup_sigcontext(&frame->uc.uc_mcontext, regs); err |= copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); diff --git a/trunk/arch/c6x/Kconfig b/trunk/arch/c6x/Kconfig index f6a3648f5ec3..12d97b7ef0dc 100644 --- a/trunk/arch/c6x/Kconfig +++ b/trunk/arch/c6x/Kconfig @@ -18,6 +18,7 @@ config C6X select OF_EARLY_FLATTREE select GENERIC_CLOCKEVENTS select MODULES_USE_ELF_RELA + select GENERIC_SIGALTSTACK config MMU def_bool n diff --git a/trunk/arch/c6x/kernel/entry.S b/trunk/arch/c6x/kernel/entry.S index 5239057de4c4..2721c90b0121 100644 --- a/trunk/arch/c6x/kernel/entry.S +++ b/trunk/arch/c6x/kernel/entry.S @@ -598,18 +598,6 @@ ENTRY(enable_exception) NOP 5 ENDPROC(enable_exception) -ENTRY(sys_sigaltstack) -#ifdef CONFIG_C6X_BIG_KERNEL - MVKL .S1 do_sigaltstack,A0 ; branch to do_sigaltstack - MVKH .S1 do_sigaltstack,A0 - B .S2X A0 -#else - B .S2 do_sigaltstack -#endif - LDW .D2T1 *+SP(REGS_SP+8),A6 - NOP 4 -ENDPROC(sys_sigaltstack) - ;; ;; Special system calls ;; return address is in B3