Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

openrisc: switch to use of generic fork and clone

Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>

Al Viro 39d91a9e cb562173

+19 -66
+7
arch/openrisc/include/asm/syscalls.h
··· 24 24 25 25 #include <asm-generic/syscalls.h> 26 26 27 + asmlinkage long __sys_clone(unsigned long clone_flags, unsigned long newsp, 28 + void __user *parent_tid, void __user *child_tid, int tls); 29 + asmlinkage long __sys_fork(void); 30 + 31 + #define sys_clone __sys_clone 32 + #define sys_fork __sys_fork 33 + 27 34 #endif /* __ASM_OPENRISC_SYSCALLS_H */
+2
arch/openrisc/include/uapi/asm/unistd.h
··· 21 21 #define sys_mmap2 sys_mmap_pgoff 22 22 23 23 #define __ARCH_WANT_SYS_EXECVE 24 + #define __ARCH_WANT_SYS_FORK 25 + #define __ARCH_WANT_SYS_CLONE 24 26 25 27 #include <asm-generic/unistd.h> 26 28
+1 -1
arch/openrisc/kernel/Makefile
··· 5 5 extra-y := head.o vmlinux.lds 6 6 7 7 obj-y := setup.o idle.o or32_ksyms.o process.o dma.o \ 8 - traps.o time.o irq.o entry.o ptrace.o signal.o sys_or32.o \ 8 + traps.o time.o irq.o entry.o ptrace.o signal.o \ 9 9 sys_call_table.o 10 10 11 11 obj-$(CONFIG_MODULES) += module.o
+6 -6
arch/openrisc/kernel/entry.S
··· 1071 1071 l.jr r29 1072 1072 l.sw PT_GPR28(r1),r28 1073 1073 1074 - ENTRY(sys_clone) 1075 - l.movhi r29,hi(_sys_clone) 1076 - l.ori r29,r29,lo(_sys_clone) 1074 + ENTRY(__sys_clone) 1075 + l.movhi r29,hi(sys_clone) 1076 + l.ori r29,r29,lo(sys_clone) 1077 1077 l.j _fork_save_extra_regs_and_call 1078 1078 l.addi r7,r1,0 1079 1079 1080 - ENTRY(sys_fork) 1081 - l.movhi r29,hi(_sys_fork) 1082 - l.ori r29,r29,lo(_sys_fork) 1080 + ENTRY(__sys_fork) 1081 + l.movhi r29,hi(sys_fork) 1082 + l.ori r29,r29,lo(sys_fork) 1083 1083 l.j _fork_save_extra_regs_and_call 1084 1084 l.addi r3,r1,0 1085 1085
+3 -2
arch/openrisc/kernel/process.c
··· 168 168 kregs->gpr[20] = usp; /* fn, kernel thread */ 169 169 kregs->gpr[22] = arg; 170 170 } else { 171 - *userregs = *regs; 171 + *userregs = *current_pt_regs(); 172 172 173 - userregs->sp = usp; 173 + if (usp) 174 + userregs->sp = usp; 174 175 userregs->gpr[11] = 0; /* Result from fork() */ 175 176 176 177 kregs->gpr[20] = 0; /* Userspace thread */
-57
arch/openrisc/kernel/sys_or32.c
··· 1 - /* 2 - * OpenRISC sys_or32.c 3 - * 4 - * Linux architectural port borrowing liberally from similar works of 5 - * others. All original copyrights apply as per the original source 6 - * declaration. 7 - * 8 - * Modifications for the OpenRISC architecture: 9 - * Copyright (C) 2003 Matjaz Breskvar <phoenix@bsemi.com> 10 - * Copyright (C) 2010-2011 Jonas Bonn <jonas@southpole.se> 11 - * 12 - * This program is free software; you can redistribute it and/or 13 - * modify it under the terms of the GNU General Public License 14 - * as published by the Free Software Foundation; either version 15 - * 2 of the License, or (at your option) any later version. 16 - * 17 - * This file contains various random system calls that 18 - * have a non-standard calling sequence on some platforms. 19 - * Since we don't have to do any backwards compatibility, our 20 - * versions are done in the most "normal" way possible. 21 - */ 22 - 23 - #include <linux/errno.h> 24 - #include <linux/syscalls.h> 25 - #include <linux/mm.h> 26 - 27 - #include <asm/syscalls.h> 28 - 29 - /* These are secondary entry points as the primary entry points are defined in 30 - * entry.S where we add the 'regs' parameter value 31 - */ 32 - 33 - asmlinkage long _sys_clone(unsigned long clone_flags, unsigned long newsp, 34 - int __user *parent_tid, int __user *child_tid, 35 - struct pt_regs *regs) 36 - { 37 - long ret; 38 - 39 - /* FIXME: Is alignment necessary? */ 40 - /* newsp = ALIGN(newsp, 4); */ 41 - 42 - if (!newsp) 43 - newsp = regs->sp; 44 - 45 - ret = do_fork(clone_flags, newsp, regs, 0, parent_tid, child_tid); 46 - 47 - return ret; 48 - } 49 - 50 - asmlinkage int _sys_fork(struct pt_regs *regs) 51 - { 52 - #ifdef CONFIG_MMU 53 - return do_fork(SIGCHLD, regs->sp, regs, 0, NULL, NULL); 54 - #else 55 - return -EINVAL; 56 - #endif 57 - }