Commit f564c5fe authored by Linus Torvalds's avatar Linus Torvalds
parents 423ab71a b887d3f2
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
* for more details. * for more details.
* *
* Copyright (C) 1994 - 1999, 2000 by Ralf Baechle and others. * Copyright (C) 1994 - 1999, 2000 by Ralf Baechle and others.
* Copyright (C) 2005, 2006 by Ralf Baechle (ralf@linux-mips.org)
* Copyright (C) 1999, 2000 Silicon Graphics, Inc. * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
* Copyright (C) 2004 Thiemo Seufer * Copyright (C) 2004 Thiemo Seufer
*/ */
...@@ -58,8 +59,8 @@ ATTRIB_NORET void cpu_idle(void) ...@@ -58,8 +59,8 @@ ATTRIB_NORET void cpu_idle(void)
} }
} }
extern int do_signal(sigset_t *oldset, struct pt_regs *regs); extern void do_signal(struct pt_regs *regs);
extern int do_signal32(sigset_t *oldset, struct pt_regs *regs); extern void do_signal32(struct pt_regs *regs);
/* /*
* Native o32 and N64 ABI without DSP ASE * Native o32 and N64 ABI without DSP ASE
......
...@@ -617,6 +617,23 @@ einval: li v0, -EINVAL ...@@ -617,6 +617,23 @@ einval: li v0, -EINVAL
sys sys_inotify_init 0 sys sys_inotify_init 0
sys sys_inotify_add_watch 3 /* 4285 */ sys sys_inotify_add_watch 3 /* 4285 */
sys sys_inotify_rm_watch 2 sys sys_inotify_rm_watch 2
sys sys_migrate_pages 4
sys sys_openat 4
sys sys_mkdirat 3
sys sys_mknodat 4 /* 4290 */
sys sys_fchownat 5
sys sys_futimesat 3
sys sys_newfstatat 4
sys sys_unlinkat 3
sys sys_renameat 4 /* 4295 */
sys sys_linkat 4
sys sys_symlinkat 3
sys sys_readlinkat 4
sys sys_fchmodat 3
sys sys_faccessat 3 /* 4300 */
sys sys_pselect6 6
sys sys_ppoll 5
sys sys_unshare 1
.endm .endm
/* We pre-compute the number of _instruction_ bytes needed to /* We pre-compute the number of _instruction_ bytes needed to
......
...@@ -443,3 +443,20 @@ sys_call_table: ...@@ -443,3 +443,20 @@ sys_call_table:
PTR sys_inotify_init PTR sys_inotify_init
PTR sys_inotify_add_watch PTR sys_inotify_add_watch
PTR sys_inotify_rm_watch /* 5245 */ PTR sys_inotify_rm_watch /* 5245 */
PTR sys_migrate_pages
PTR sys_openat
PTR sys_mkdirat
PTR sys_mknodat
PTR sys_fchownat /* 5250 */
PTR sys_futimesat
PTR sys_newfstatat
PTR sys_unlinkat
PTR sys_renameat
PTR sys_linkat /* 5255 */
PTR sys_symlinkat
PTR sys_readlinkat
PTR sys_fchmodat
PTR sys_faccessat
PTR sys_pselect6 /* 5260 */
PTR sys_ppoll
PTR sys_unshare
...@@ -369,3 +369,20 @@ EXPORT(sysn32_call_table) ...@@ -369,3 +369,20 @@ EXPORT(sysn32_call_table)
PTR sys_inotify_init PTR sys_inotify_init
PTR sys_inotify_add_watch PTR sys_inotify_add_watch
PTR sys_inotify_rm_watch PTR sys_inotify_rm_watch
PTR sys_migrate_pages /* 6250 */
PTR sys_openat
PTR sys_mkdirat
PTR sys_mknodat
PTR sys_fchownat
PTR sys_futimesat /* 6255 */
PTR sys_newfstatat
PTR sys_unlinkat
PTR sys_renameat
PTR sys_linkat
PTR sys_symlinkat /* 6260 */
PTR sys_readlinkat
PTR sys_fchmodat
PTR sys_faccessat
PTR sys_pselect6
PTR sys_ppoll /* 6265 */
PTR sys_unshare
...@@ -491,4 +491,21 @@ sys_call_table: ...@@ -491,4 +491,21 @@ sys_call_table:
PTR sys_inotify_init PTR sys_inotify_init
PTR sys_inotify_add_watch /* 4285 */ PTR sys_inotify_add_watch /* 4285 */
PTR sys_inotify_rm_watch PTR sys_inotify_rm_watch
PTR sys_migrate_pages
PTR compat_sys_openat
PTR sys_mkdirat
PTR sys_mknodat /* 4290 */
PTR sys_fchownat
PTR compat_sys_futimesat
PTR compat_sys_newfstatat
PTR sys_unlinkat
PTR sys_renameat /* 4295 */
PTR sys_linkat
PTR sys_symlinkat
PTR sys_readlinkat
PTR sys_fchmodat
PTR sys_faccessat /* 4300 */
PTR sys_pselect6
PTR sys_ppoll
PTR sys_unshare
.size sys_call_table,.-sys_call_table .size sys_call_table,.-sys_call_table
...@@ -39,8 +39,6 @@ ...@@ -39,8 +39,6 @@
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP))) #define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
int do_signal(sigset_t *oldset, struct pt_regs *regs);
/* /*
* Atomically swap in the new signal mask, and wait for a signal. * Atomically swap in the new signal mask, and wait for a signal.
*/ */
...@@ -50,7 +48,7 @@ save_static_function(sys_sigsuspend); ...@@ -50,7 +48,7 @@ save_static_function(sys_sigsuspend);
__attribute_used__ noinline static int __attribute_used__ noinline static int
_sys_sigsuspend(nabi_no_regargs struct pt_regs regs) _sys_sigsuspend(nabi_no_regargs struct pt_regs regs)
{ {
sigset_t saveset, newset; sigset_t newset;
sigset_t __user *uset; sigset_t __user *uset;
uset = (sigset_t __user *) regs.regs[4]; uset = (sigset_t __user *) regs.regs[4];
...@@ -59,19 +57,15 @@ _sys_sigsuspend(nabi_no_regargs struct pt_regs regs) ...@@ -59,19 +57,15 @@ _sys_sigsuspend(nabi_no_regargs struct pt_regs regs)
sigdelsetmask(&newset, ~_BLOCKABLE); sigdelsetmask(&newset, ~_BLOCKABLE);
spin_lock_irq(&current->sighand->siglock); spin_lock_irq(&current->sighand->siglock);
saveset = current->blocked; current->saved_sigmask = current->blocked;
current->blocked = newset; current->blocked = newset;
recalc_sigpending(); recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock); spin_unlock_irq(&current->sighand->siglock);
regs.regs[2] = EINTR; current->state = TASK_INTERRUPTIBLE;
regs.regs[7] = 1; schedule();
while (1) { set_thread_flag(TIF_RESTORE_SIGMASK);
current->state = TASK_INTERRUPTIBLE; return -ERESTARTNOHAND;
schedule();
if (do_signal(&saveset, &regs))
return -EINTR;
}
} }
#endif #endif
...@@ -79,7 +73,7 @@ save_static_function(sys_rt_sigsuspend); ...@@ -79,7 +73,7 @@ save_static_function(sys_rt_sigsuspend);
__attribute_used__ noinline static int __attribute_used__ noinline static int
_sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) _sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs)
{ {
sigset_t saveset, newset; sigset_t newset;
sigset_t __user *unewset; sigset_t __user *unewset;
size_t sigsetsize; size_t sigsetsize;
...@@ -94,19 +88,15 @@ _sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs) ...@@ -94,19 +88,15 @@ _sys_rt_sigsuspend(nabi_no_regargs struct pt_regs regs)
sigdelsetmask(&newset, ~_BLOCKABLE); sigdelsetmask(&newset, ~_BLOCKABLE);
spin_lock_irq(&current->sighand->siglock); spin_lock_irq(&current->sighand->siglock);
saveset = current->blocked; current->saved_sigmask = current->blocked;
current->blocked = newset; current->blocked = newset;
recalc_sigpending(); recalc_sigpending();
spin_unlock_irq(&current->sighand->siglock); spin_unlock_irq(&current->sighand->siglock);
regs.regs[2] = EINTR; current->state = TASK_INTERRUPTIBLE;
regs.regs[7] = 1; schedule();
while (1) { set_thread_flag(TIF_RESTORE_SIGMASK);
current->state = TASK_INTERRUPTIBLE; return -ERESTARTNOHAND;
schedule();
if (do_signal(&saveset, &regs))
return -EINTR;
}
} }
#ifdef CONFIG_TRAD_SIGNALS #ifdef CONFIG_TRAD_SIGNALS
...@@ -315,11 +305,11 @@ int setup_frame(struct k_sigaction * ka, struct pt_regs *regs, ...@@ -315,11 +305,11 @@ int setup_frame(struct k_sigaction * ka, struct pt_regs *regs,
current->comm, current->pid, current->comm, current->pid,
frame, regs->cp0_epc, frame->regs[31]); frame, regs->cp0_epc, frame->regs[31]);
#endif #endif
return 1; return 0;
give_sigsegv: give_sigsegv:
force_sigsegv(signr, current); force_sigsegv(signr, current);
return 0; return -EFAULT;
} }
#endif #endif
...@@ -375,11 +365,11 @@ int setup_rt_frame(struct k_sigaction * ka, struct pt_regs *regs, ...@@ -375,11 +365,11 @@ int setup_rt_frame(struct k_sigaction * ka, struct pt_regs *regs,
current->comm, current->pid, current->comm, current->pid,
frame, regs->cp0_epc, regs->regs[31]); frame, regs->cp0_epc, regs->regs[31]);
#endif #endif
return 1; return 0;
give_sigsegv: give_sigsegv:
force_sigsegv(signr, current); force_sigsegv(signr, current);
return 0; return -EFAULT;
} }
static inline int handle_signal(unsigned long sig, siginfo_t *info, static inline int handle_signal(unsigned long sig, siginfo_t *info,
...@@ -393,7 +383,7 @@ static inline int handle_signal(unsigned long sig, siginfo_t *info, ...@@ -393,7 +383,7 @@ static inline int handle_signal(unsigned long sig, siginfo_t *info,
regs->regs[2] = EINTR; regs->regs[2] = EINTR;
break; break;
case ERESTARTSYS: case ERESTARTSYS:
if(!(ka->sa.sa_flags & SA_RESTART)) { if (!(ka->sa.sa_flags & SA_RESTART)) {
regs->regs[2] = EINTR; regs->regs[2] = EINTR;
break; break;
} }
...@@ -420,9 +410,10 @@ static inline int handle_signal(unsigned long sig, siginfo_t *info, ...@@ -420,9 +410,10 @@ static inline int handle_signal(unsigned long sig, siginfo_t *info,
return ret; return ret;
} }
int do_signal(sigset_t *oldset, struct pt_regs *regs) void do_signal(struct pt_regs *regs)
{ {
struct k_sigaction ka; struct k_sigaction ka;
sigset_t *oldset;
siginfo_t info; siginfo_t info;
int signr; int signr;
...@@ -432,17 +423,31 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs) ...@@ -432,17 +423,31 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs)
* if so. * if so.
*/ */
if (!user_mode(regs)) if (!user_mode(regs))
return 1; return;
if (try_to_freeze()) if (try_to_freeze())
goto no_signal; goto no_signal;
if (!oldset) if (test_thread_flag(TIF_RESTORE_SIGMASK))
oldset = &current->saved_sigmask;
else
oldset = &current->blocked; oldset = &current->blocked;
signr = get_signal_to_deliver(&info, &ka, regs, NULL); signr = get_signal_to_deliver(&info, &ka, regs, NULL);
if (signr > 0) if (signr > 0) {
return handle_signal(signr, &info, &ka, oldset, regs); /* Whee! Actually deliver the signal. */
if (handle_signal(signr, &info, &ka, oldset, regs) == 0) {
/*
* A signal was successfully delivered; the saved
* sigmask will have been stored in the signal frame,
* and will be restored by sigreturn, so we can simply
* clear the TIF_RESTORE_SIGMASK flag.
*/
if (test_thread_flag(TIF_RESTORE_SIGMASK))
clear_thread_flag(TIF_RESTORE_SIGMASK);
}
}
no_signal: no_signal:
/* /*
...@@ -463,18 +468,25 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs) ...@@ -463,18 +468,25 @@ int do_signal(sigset_t *oldset, struct pt_regs *regs)
regs->cp0_epc -= 4; regs->cp0_epc -= 4;
} }
} }
return 0;
/*
* If there's no signal to deliver, we just put the saved sigmask
* back
*/
if (test_thread_flag(TIF_RESTORE_SIGMASK)) {
clear_thread_flag(TIF_RESTORE_SIGMASK);
sigprocmask(SIG_SETMASK, &current->saved_sigmask, NULL);
}
} }
/* /*
* notification of userspace execution resumption * notification of userspace execution resumption
* - triggered by current->work.notify_resume * - triggered by the TIF_WORK_MASK flags
*/ */
asmlinkage void do_notify_resume(struct pt_regs *regs, sigset_t *oldset, asmlinkage void do_notify_resume(struct pt_regs *regs, void *unused,
__u32 thread_info_flags) __u32 thread_info_flags)
{ {
/* deal with pending signal delivery */ /* deal with pending signal delivery */
if (thread_info_flags & _TIF_SIGPENDING) { if (thread_info_flags & (_TIF_SIGPENDING | _TIF_RESTORE_SIGMASK))
current->thread.abi->do_signal(oldset, regs); current->thread.abi->do_signal(regs);
}
} }
...@@ -694,11 +694,11 @@ int setup_frame_32(struct k_sigaction * ka, struct pt_regs *regs, ...@@ -694,11 +694,11 @@ int setup_frame_32(struct k_sigaction * ka, struct pt_regs *regs,
current->comm, current->pid, current->comm, current->pid,
frame, regs->cp0_epc, frame->sf_code); frame, regs->cp0_epc, frame->sf_code);
#endif #endif
return 1; return 0;
give_sigsegv: give_sigsegv:
force_sigsegv(signr, current); force_sigsegv(signr, current);
return 0; return -EFAULT;
} }
int setup_rt_frame_32(struct k_sigaction * ka, struct pt_regs *regs, int setup_rt_frame_32(struct k_sigaction * ka, struct pt_regs *regs,
...@@ -765,11 +765,11 @@ int setup_rt_frame_32(struct k_sigaction * ka, struct pt_regs *regs, ...@@ -765,11 +765,11 @@ int setup_rt_frame_32(struct k_sigaction * ka, struct pt_regs *regs,
current->comm, current->pid, current->comm, current->pid,
frame, regs->cp0_epc, frame->rs_code); frame, regs->cp0_epc, frame->rs_code);
#endif #endif
return 1; return 0;
give_sigsegv: give_sigsegv:
force_sigsegv(signr, current); force_sigsegv(signr, current);
return 0; return -EFAULT;
} }
static inline int handle_signal(unsigned long sig, siginfo_t *info, static inline int handle_signal(unsigned long sig, siginfo_t *info,
......
...@@ -186,9 +186,9 @@ int setup_rt_frame_n32(struct k_sigaction * ka, ...@@ -186,9 +186,9 @@ int setup_rt_frame_n32(struct k_sigaction * ka,
current->comm, current->pid, current->comm, current->pid,
frame, regs->cp0_epc, regs->regs[31]); frame, regs->cp0_epc, regs->regs[31]);
#endif #endif
return 1; return 0;
give_sigsegv: give_sigsegv:
force_sigsegv(signr, current); force_sigsegv(signr, current);
return 0; return -EFAULT;
} }
...@@ -212,12 +212,12 @@ asmlinkage int sys_execve(nabi_no_regargs struct pt_regs regs) ...@@ -212,12 +212,12 @@ asmlinkage int sys_execve(nabi_no_regargs struct pt_regs regs)
int error; int error;
char * filename; char * filename;
filename = getname((char *) (long)regs.regs[4]); filename = getname((char __user *) (long)regs.regs[4]);
error = PTR_ERR(filename); error = PTR_ERR(filename);
if (IS_ERR(filename)) if (IS_ERR(filename))
goto out; goto out;
error = do_execve(filename, (char **) (long)regs.regs[5], error = do_execve(filename, (char __user *__user *) (long)regs.regs[5],
(char **) (long)regs.regs[6], &regs); (char __user *__user *) (long)regs.regs[6], &regs);
putname(filename); putname(filename);
out: out:
...@@ -227,7 +227,7 @@ asmlinkage int sys_execve(nabi_no_regargs struct pt_regs regs) ...@@ -227,7 +227,7 @@ asmlinkage int sys_execve(nabi_no_regargs struct pt_regs regs)
/* /*
* Compacrapability ... * Compacrapability ...
*/ */
asmlinkage int sys_uname(struct old_utsname * name) asmlinkage int sys_uname(struct old_utsname __user * name)
{ {
if (name && !copy_to_user(name, &system_utsname, sizeof (*name))) if (name && !copy_to_user(name, &system_utsname, sizeof (*name)))
return 0; return 0;
...@@ -237,7 +237,7 @@ asmlinkage int sys_uname(struct old_utsname * name) ...@@ -237,7 +237,7 @@ asmlinkage int sys_uname(struct old_utsname * name)
/* /*
* Compacrapability ... * Compacrapability ...
*/ */
asmlinkage int sys_olduname(struct oldold_utsname * name) asmlinkage int sys_olduname(struct oldold_utsname __user * name)
{ {
int error; int error;
...@@ -274,7 +274,7 @@ void sys_set_thread_area(unsigned long addr) ...@@ -274,7 +274,7 @@ void sys_set_thread_area(unsigned long addr)
asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3)
{ {
int tmp, len; int tmp, len;
char *name; char __user *name;
switch(cmd) { switch(cmd) {
case SETNAME: { case SETNAME: {
...@@ -283,7 +283,7 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) ...@@ -283,7 +283,7 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3)
if (!capable(CAP_SYS_ADMIN)) if (!capable(CAP_SYS_ADMIN))
return -EPERM; return -EPERM;
name = (char *) arg1; name = (char __user *) arg1;
len = strncpy_from_user(nodename, name, __NEW_UTS_LEN); len = strncpy_from_user(nodename, name, __NEW_UTS_LEN);
if (len < 0) if (len < 0)
...@@ -324,7 +324,7 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3) ...@@ -324,7 +324,7 @@ asmlinkage int _sys_sysmips(int cmd, long arg1, int arg2, int arg3)
* This is really horribly ugly. * This is really horribly ugly.
*/ */
asmlinkage int sys_ipc (uint call, int first, int second, asmlinkage int sys_ipc (uint call, int first, int second,
unsigned long third, void *ptr, long fifth) unsigned long third, void __user *ptr, long fifth)
{ {
int version, ret; int version, ret;
...@@ -333,24 +333,25 @@ asmlinkage int sys_ipc (uint call, int first, int second, ...@@ -333,24 +333,25 @@ asmlinkage int sys_ipc (uint call, int first, int second,
switch (call) { switch (call) {
case SEMOP: case SEMOP:
return sys_semtimedop (first, (struct sembuf *)ptr, second, return sys_semtimedop (first, (struct sembuf __user *)ptr,
NULL); second, NULL);
case SEMTIMEDOP: case SEMTIMEDOP:
return sys_semtimedop (first, (struct sembuf *)ptr, second, return sys_semtimedop (first, (struct sembuf __user *)ptr,
(const struct timespec __user *)fifth); second,
(const struct timespec __user *)fifth);
case SEMGET: case SEMGET:
return sys_semget (first, second, third); return sys_semget (first, second, third);
case SEMCTL: { case SEMCTL: {
union semun fourth; union semun fourth;
if (!ptr) if (!ptr)
return -EINVAL; return -EINVAL;
if (get_user(fourth.__pad, (void **) ptr)) if (get_user(fourth.__pad, (void *__user *) ptr))
return -EFAULT; return -EFAULT;
return sys_semctl (first, second, third, fourth); return sys_semctl (first, second, third, fourth);
} }
case MSGSND: case MSGSND:
return sys_msgsnd (first, (struct msgbuf *) ptr, return sys_msgsnd (first, (struct msgbuf __user *) ptr,
second, third); second, third);
case MSGRCV: case MSGRCV:
switch (version) { switch (version) {
...@@ -360,7 +361,7 @@ asmlinkage int sys_ipc (uint call, int first, int second, ...@@ -360,7 +361,7 @@ asmlinkage int sys_ipc (uint call, int first, int second,
return -EINVAL; return -EINVAL;
if (copy_from_user(&tmp, if (copy_from_user(&tmp,
(struct ipc_kludge *) ptr, (struct ipc_kludge __user *) ptr,
sizeof (tmp))) sizeof (tmp)))
return -EFAULT; return -EFAULT;
return sys_msgrcv (first, tmp.msgp, second, return sys_msgrcv (first, tmp.msgp, second,
...@@ -368,35 +369,38 @@ asmlinkage int sys_ipc (uint call, int first, int second, ...@@ -368,35 +369,38 @@ asmlinkage int sys_ipc (uint call, int first, int second,
} }
default: default:
return sys_msgrcv (first, return sys_msgrcv (first,
(struct msgbuf *) ptr, (struct msgbuf __user *) ptr,
second, fifth, third); second, fifth, third);
} }
case MSGGET: case MSGGET:
return sys_msgget ((key_t) first, second); return sys_msgget ((key_t) first, second);
case MSGCTL: case MSGCTL:
return sys_msgctl (first, second, (struct msqid_ds *) ptr); return sys_msgctl (first, second,
(struct msqid_ds __user *) ptr);
case SHMAT: case SHMAT:
switch (version) { switch (version) {
default: { default: {
ulong raddr; ulong raddr;
ret = do_shmat (first, (char *) ptr, second, &raddr); ret = do_shmat (first, (char __user *) ptr, second,
&raddr);
if (ret) if (ret)
return ret; return ret;
return put_user (raddr, (ulong *) third); return put_user (raddr, (ulong __user *) third);
} }
case 1: /* iBCS2 emulator entry point */ case 1: /* iBCS2 emulator entry point */
if (!segment_eq(get_fs(), get_ds())) if (!segment_eq(get_fs(), get_ds()))
return -EINVAL; return -EINVAL;
return do_shmat (first, (char *) ptr, second, (ulong *) third); return do_shmat (first, (char __user *) ptr, second,
(ulong *) third);
} }
case SHMDT: case SHMDT:
return sys_shmdt ((char *)ptr); return sys_shmdt ((char __user *)ptr);
case SHMGET: case SHMGET:
return sys_shmget (first, second, third); return sys_shmget (first, second, third);
case SHMCTL: case SHMCTL:
return sys_shmctl (first, second, return sys_shmctl (first, second,
(struct shmid_ds *) ptr); (struct shmid_ds __user *) ptr);
default: default:
return -ENOSYS; return -ENOSYS;
} }
......
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
* License. See the file "COPYING" in the main directory of this archive * License. See the file "COPYING" in the main directory of this archive
* for more details. * for more details.
* *
* Copyright (C) 2005 by Ralf Baechle * Copyright (C) 2005, 06 by Ralf Baechle (ralf@linux-mips.org)
* Copyright (C) 2005 MIPS Technologies, Inc. * Copyright (C) 2005 MIPS Technologies, Inc.
*/ */
#ifndef _ASM_ABI_H #ifndef _ASM_ABI_H
...@@ -13,7 +13,7 @@ ...@@ -13,7 +13,7 @@
#include <asm/siginfo.h> #include <asm/siginfo.h>
struct mips_abi { struct mips_abi {
int (* const do_signal)(sigset_t *oldset, struct pt_regs *regs); void (* const do_signal)(struct pt_regs *regs);
int (* const setup_frame)(struct k_sigaction * ka, int (* const setup_frame)(struct k_sigaction * ka,
struct pt_regs *regs, int signr, struct pt_regs *regs, int signr,
sigset_t *set); sigset_t *set);
......
...@@ -342,7 +342,7 @@ static inline void pfx##write##bwlq(type val, \ ...@@ -342,7 +342,7 @@ static inline void pfx##write##bwlq(type val, \
BUG(); \ BUG(); \
} \ } \
\ \
static inline type pfx##read##bwlq(volatile void __iomem *mem) \ static inline type pfx##read##bwlq(const volatile void __iomem *mem) \
{ \ { \
volatile type *__mem; \ volatile type *__mem; \
type __val; \ type __val; \
......
...@@ -114,6 +114,7 @@ register struct thread_info *__current_thread_info __asm__("$28"); ...@@ -114,6 +114,7 @@ register struct thread_info *__current_thread_info __asm__("$28");
#define TIF_NEED_RESCHED 3 /* rescheduling necessary */ #define TIF_NEED_RESCHED 3 /* rescheduling necessary */
#define TIF_SYSCALL_AUDIT 4 /* syscall auditing active */ #define TIF_SYSCALL_AUDIT 4 /* syscall auditing active */
#define TIF_SECCOMP 5 /* secure computing */ #define TIF_SECCOMP 5 /* secure computing */
#define TIF_RESTORE_SIGMASK 9 /* restore signal mask in do_signal() */
#define TIF_USEDFPU 16 /* FPU was used by this task this quantum (SMP) */ #define TIF_USEDFPU 16 /* FPU was used by this task this quantum (SMP) */
#define TIF_POLLING_NRFLAG 17 /* true if poll_idle() is polling TIF_NEED_RESCHED */ #define TIF_POLLING_NRFLAG 17 /* true if poll_idle() is polling TIF_NEED_RESCHED */
#define TIF_MEMDIE 18 #define TIF_MEMDIE 18
...@@ -125,6 +126,7 @@ register struct thread_info *__current_thread_info __asm__("$28"); ...@@ -125,6 +126,7 @@ register struct thread_info *__current_thread_info __asm__("$28");
#define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED) #define _TIF_NEED_RESCHED (1<<TIF_NEED_RESCHED)
#define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT) #define _TIF_SYSCALL_AUDIT (1<<TIF_SYSCALL_AUDIT)
#define _TIF_SECCOMP (1<<TIF_SECCOMP) #define _TIF_SECCOMP (1<<TIF_SECCOMP)
#define _TIF_RESTORE_SIGMASK (1<<TIF_RESTORE_SIGMASK)
#define _TIF_USEDFPU (1<<TIF_USEDFPU) #define _TIF_USEDFPU (1<<TIF_USEDFPU)
#define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG) #define _TIF_POLLING_NRFLAG (1<<TIF_POLLING_NRFLAG)
......
...@@ -307,17 +307,33 @@ ...@@ -307,17 +307,33 @@
#define __NR_inotify_init (__NR_Linux + 284) #define __NR_inotify_init (__NR_Linux + 284)
#define __NR_inotify_add_watch (__NR_Linux + 285) #define __NR_inotify_add_watch (__NR_Linux + 285)
#define __NR_inotify_rm_watch (__NR_Linux + 286) #define __NR_inotify_rm_watch (__NR_Linux + 286)
#define __NR_migrate_pages (__NR_Linux + 287)
#define __NR_openat (__NR_Linux + 288)
#define __NR_mkdirat (__NR_Linux + 289)
#define __NR_mknodat (__NR_Linux + 290)
#define __NR_fchownat (__NR_Linux + 291)
#define __NR_futimesat (__NR_Linux + 292)
#define __NR_newfstatat (__NR_Linux + 293)
#define __NR_unlinkat (__NR_Linux + 294)
#define __NR_renameat (__NR_Linux + 295)
#define __NR_linkat (__NR_Linux + 296)
#define __NR_symlinkat (__NR_Linux + 297)
#define __NR_readlinkat (__NR_Linux + 298)
#define __NR_fchmodat (__NR_Linux + 299)
#define __NR_faccessat (__NR_Linux + 300)
#define __NR_pselect6 (__NR_Linux + 301)
#define __NR_ppoll (__NR_Linux + 302)
#define __NR_unshare (__NR_Linux + 303)
/* /*
* Offset of the last Linux o32 flavoured syscall * Offset of the last Linux o32 flavoured syscall
*/ */
#define __NR_Linux_syscalls 286 #define __NR_Linux_syscalls 303
#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */ #endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
#define __NR_O32_Linux 4000 #define __NR_O32_Linux 4000
#define __NR_O32_Linux_syscalls 283 #define __NR_O32_Linux_syscalls 303
#if _MIPS_SIM == _MIPS_SIM_ABI64 #if _MIPS_SIM == _MIPS_SIM_ABI64
...@@ -571,16 +587,33 @@ ...@@ -571,16 +587,33 @@
#define __NR_inotify_init (__NR_Linux + 243) #define __NR_inotify_init (__NR_Linux + 243)
#define __NR_inotify_add_watch (__NR_Linux + 244) #define __NR_inotify_add_watch (__NR_Linux + 244)
#define __NR_inotify_rm_watch (__NR_Linux + 245) #define __NR_inotify_rm_watch (__NR_Linux + 245)
#define __NR_migrate_pages (__NR_Linux + 246)
#define __NR_openat (__NR_Linux + 247)
#define __NR_mkdirat (__NR_Linux + 248)
#define __NR_mknodat (__NR_Linux + 249)
#define __NR_fchownat (__NR_Linux + 250)
#define __NR_futimesat (__NR_Linux + 251)
#define __NR_newfstatat (__NR_Linux + 252)
#define __NR_unlinkat (__NR_Linux + 253)
#define __NR_renameat (__NR_Linux + 254)
#define __NR_linkat (__NR_Linux + 255)
#define __NR_symlinkat (__NR_Linux + 256)
#define __NR_readlinkat (__NR_Linux + 257)
#define __NR_fchmodat (__NR_Linux + 258)
#define __NR_faccessat (__NR_Linux + 259)
#define __NR_pselect6 (__NR_Linux + 260)
#define __NR_ppoll (__NR_Linux + 261)
#define __NR_unshare (__NR_Linux + 262)
/* /*
* Offset of the last Linux 64-bit flavoured syscall * Offset of the last Linux 64-bit flavoured syscall
*/ */
#define __NR_Linux_syscalls 245 #define __NR_Linux_syscalls 262
#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */ #endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
#define __NR_64_Linux 5000 #define __NR_64_Linux 5000
#define __NR_64_Linux_syscalls 242 #define __NR_64_Linux_syscalls 262
#if _MIPS_SIM == _MIPS_SIM_NABI32 #if _MIPS_SIM == _MIPS_SIM_NABI32
...@@ -838,16 +871,33 @@ ...@@ -838,16 +871,33 @@
#define __NR_inotify_init (__NR_Linux + 247) #define __NR_inotify_init (__NR_Linux + 247)
#define __NR_inotify_add_watch (__NR_Linux + 248) #define __NR_inotify_add_watch (__NR_Linux + 248)
#define __NR_inotify_rm_watch (__NR_Linux + 249) #define __NR_inotify_rm_watch (__NR_Linux + 249)
#define __NR_migrate_pages (__NR_Linux + 250)
#define __NR_openat (__NR_Linux + 251)
#define __NR_mkdirat (__NR_Linux + 252)
#define __NR_mknodat (__NR_Linux + 253)
#define __NR_fchownat (__NR_Linux + 254)
#define __NR_futimesat (__NR_Linux + 255)
#define __NR_newfstatat (__NR_Linux + 256)
#define __NR_unlinkat (__NR_Linux + 257)
#define __NR_renameat (__NR_Linux + 258)
#define __NR_linkat (__NR_Linux + 259)
#define __NR_symlinkat (__NR_Linux + 260)
#define __NR_readlinkat (__NR_Linux + 261)
#define __NR_fchmodat (__NR_Linux + 262)
#define __NR_faccessat (__NR_Linux + 263)
#define __NR_pselect6 (__NR_Linux + 264)
#define __NR_ppoll (__NR_Linux + 265)
#define __NR_unshare (__NR_Linux + 266)
/* /*
* Offset of the last N32 flavoured syscall * Offset of the last N32 flavoured syscall
*/ */
#define __NR_Linux_syscalls 249 #define __NR_Linux_syscalls 266
#endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */ #endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
#define __NR_N32_Linux 6000 #define __NR_N32_Linux 6000
#define __NR_N32_Linux_syscalls 246 #define __NR_N32_Linux_syscalls 266
#ifndef __ASSEMBLY__ #ifndef __ASSEMBLY__
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment