Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
f564c5fe
Commit
f564c5fe
authored
Feb 08, 2006
by
Linus Torvalds
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'upstream' of
git://ftp.linux-mips.org/pub/scm/upstream-linus
parents
423ab71a
b887d3f2
Changes
13
Hide whitespace changes
Inline
Side-by-side
Showing
13 changed files
with
215 additions
and
78 deletions
+215
-78
arch/mips/kernel/process.c
arch/mips/kernel/process.c
+3
-2
arch/mips/kernel/scall32-o32.S
arch/mips/kernel/scall32-o32.S
+17
-0
arch/mips/kernel/scall64-64.S
arch/mips/kernel/scall64-64.S
+17
-0
arch/mips/kernel/scall64-n32.S
arch/mips/kernel/scall64-n32.S
+17
-0
arch/mips/kernel/scall64-o32.S
arch/mips/kernel/scall64-o32.S
+17
-0
arch/mips/kernel/signal.c
arch/mips/kernel/signal.c
+50
-38
arch/mips/kernel/signal32.c
arch/mips/kernel/signal32.c
+4
-4
arch/mips/kernel/signal_n32.c
arch/mips/kernel/signal_n32.c
+2
-2
arch/mips/kernel/syscall.c
arch/mips/kernel/syscall.c
+26
-22
include/asm-mips/abi.h
include/asm-mips/abi.h
+2
-2
include/asm-mips/io.h
include/asm-mips/io.h
+1
-1
include/asm-mips/thread_info.h
include/asm-mips/thread_info.h
+2
-0
include/asm-mips/unistd.h
include/asm-mips/unistd.h
+57
-7
No files found.
arch/mips/kernel/process.c
View file @
f564c5fe
...
@@ -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
...
...
arch/mips/kernel/scall32-o32.S
View file @
f564c5fe
...
@@ -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
...
...
arch/mips/kernel/scall64-64.S
View file @
f564c5fe
...
@@ -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
arch/mips/kernel/scall64-n32.S
View file @
f564c5fe
...
@@ -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
arch/mips/kernel/scall64-o32.S
View file @
f564c5fe
...
@@ -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
arch/mips/kernel/signal.c
View file @
f564c5fe
...
@@ -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
);
}
}
}
arch/mips/kernel/signal32.c
View file @
f564c5fe
...
@@ -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
,
...
...
arch/mips/kernel/signal_n32.c
View file @
f564c5fe
...
@@ -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
;
}
}
arch/mips/kernel/syscall.c
View file @
f564c5fe
...
@@ -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
;
}
}
...
...
include/asm-mips/abi.h
View file @
f564c5fe
...
@@ -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
);
...
...
include/asm-mips/io.h
View file @
f564c5fe
...
@@ -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; \
...
...
include/asm-mips/thread_info.h
View file @
f564c5fe
...
@@ -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)
...
...
include/asm-mips/unistd.h
View file @
f564c5fe
...
@@ -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
28
3
#define __NR_O32_Linux_syscalls
30
3
#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 2
45
#define __NR_Linux_syscalls 2
62
#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 2
4
2
#define __NR_64_Linux_syscalls 2
6
2
#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 2
49
#define __NR_Linux_syscalls 2
66
#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 2
4
6
#define __NR_N32_Linux_syscalls 2
6
6
#ifndef __ASSEMBLY__
#ifndef __ASSEMBLY__
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment