From: Stephen Rothwell Date: Wed, 7 Nov 2012 03:52:48 +0000 (+1100) Subject: Merge remote-tracking branch 'signal/for-next' X-Git-Tag: next-20121107~8 X-Git-Url: https://git.karo-electronics.de/?a=commitdiff_plain;h=0fe466f1d8dfb0d00e91ed7790b019b5023d1cb8;p=karo-tx-linux.git Merge remote-tracking branch 'signal/for-next' Conflicts: arch/arm/kernel/process.c arch/sparc/kernel/sys_sparc_64.c --- 0fe466f1d8dfb0d00e91ed7790b019b5023d1cb8 diff --cc arch/arm/kernel/process.c index 585b9abae606,4ab80bbb6d95..3406b5bda3b2 --- a/arch/arm/kernel/process.c +++ b/arch/arm/kernel/process.c @@@ -384,14 -383,11 +384,15 @@@ copy_thread(unsigned long clone_flags, memset(&thread->cpu_context, 0, sizeof(struct cpu_context_save)); - if (likely(regs)) { - *childregs = *regs; + if (likely(!(p->flags & PF_KTHREAD))) { + *childregs = *current_pt_regs(); childregs->ARM_r0 = 0; - childregs->ARM_sp = stack_start; + if (stack_start) + childregs->ARM_sp = stack_start; +#if defined CONFIG_CPU_V7M + /* Return to Thread mode with Process stack */ + childregs->ARM_EXC_RET = 0xfffffffdUL; +#endif } else { memset(childregs, 0, sizeof(struct pt_regs)); thread->cpu_context.r4 = stk_sz; diff --cc arch/sparc/kernel/sys_sparc_64.c index 878ef3d5fec5,adfe60ece05f..51b85feb8b97 --- a/arch/sparc/kernel/sys_sparc_64.c +++ b/arch/sparc/kernel/sys_sparc_64.c @@@ -729,30 -729,3 +729,8 @@@ SYSCALL_DEFINE5(rt_sigaction, int, sig return ret; } + - /* - * Do a system call from kernel instead of calling sys_execve so we - * end up with proper pt_regs. - */ - int kernel_execve(const char *filename, - const char *const argv[], - const char *const envp[]) - { - long __res; - register long __g1 __asm__ ("g1") = __NR_execve; - register long __o0 __asm__ ("o0") = (long)(filename); - register long __o1 __asm__ ("o1") = (long)(argv); - register long __o2 __asm__ ("o2") = (long)(envp); - asm volatile ("t 0x6d\n\t" - "sub %%g0, %%o0, %0\n\t" - "movcc %%xcc, %%o0, %0\n\t" - : "=r" (__res), "=&r" (__o0) - : "1" (__o0), "r" (__o1), "r" (__o2), "r" (__g1) - : "cc"); - return __res; - } - +asmlinkage long sys_kern_features(void) +{ + return KERN_FEATURE_MIXED_MODE_STACK; +}