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
Kirill Smelkov
linux
Commits
9ccc9c75
Commit
9ccc9c75
authored
Apr 22, 2012
by
Al Viro
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
xtensa: switch to generic rt_sigsuspend(2)
Signed-off-by:
Al Viro
<
viro@zeniv.linux.org.uk
>
parent
446cdd13
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
16 additions
and
43 deletions
+16
-43
arch/xtensa/include/asm/syscall.h
arch/xtensa/include/asm/syscall.h
+0
-2
arch/xtensa/include/asm/unistd.h
arch/xtensa/include/asm/unistd.h
+1
-1
arch/xtensa/kernel/entry.S
arch/xtensa/kernel/entry.S
+0
-1
arch/xtensa/kernel/signal.c
arch/xtensa/kernel/signal.c
+15
-39
No files found.
arch/xtensa/include/asm/syscall.h
View file @
9ccc9c75
...
@@ -15,8 +15,6 @@ asmlinkage long xtensa_clone(unsigned long, unsigned long, struct pt_regs*);
...
@@ -15,8 +15,6 @@ asmlinkage long xtensa_clone(unsigned long, unsigned long, struct pt_regs*);
asmlinkage
long
xtensa_ptrace
(
long
,
long
,
long
,
long
);
asmlinkage
long
xtensa_ptrace
(
long
,
long
,
long
,
long
);
asmlinkage
long
xtensa_sigreturn
(
struct
pt_regs
*
);
asmlinkage
long
xtensa_sigreturn
(
struct
pt_regs
*
);
asmlinkage
long
xtensa_rt_sigreturn
(
struct
pt_regs
*
);
asmlinkage
long
xtensa_rt_sigreturn
(
struct
pt_regs
*
);
asmlinkage
long
xtensa_sigsuspend
(
struct
pt_regs
*
);
asmlinkage
long
xtensa_rt_sigsuspend
(
struct
pt_regs
*
);
asmlinkage
long
xtensa_sigaction
(
int
,
const
struct
old_sigaction
*
,
asmlinkage
long
xtensa_sigaction
(
int
,
const
struct
old_sigaction
*
,
struct
old_sigaction
*
);
struct
old_sigaction
*
);
asmlinkage
long
xtensa_sigaltstack
(
struct
pt_regs
*
regs
);
asmlinkage
long
xtensa_sigaltstack
(
struct
pt_regs
*
regs
);
...
...
arch/xtensa/include/asm/unistd.h
View file @
9ccc9c75
...
@@ -507,7 +507,7 @@ __SYSCALL(229, sys_rt_sigtimedwait, 4)
...
@@ -507,7 +507,7 @@ __SYSCALL(229, sys_rt_sigtimedwait, 4)
#define __NR_rt_sigqueueinfo 230
#define __NR_rt_sigqueueinfo 230
__SYSCALL
(
230
,
sys_rt_sigqueueinfo
,
3
)
__SYSCALL
(
230
,
sys_rt_sigqueueinfo
,
3
)
#define __NR_rt_sigsuspend 231
#define __NR_rt_sigsuspend 231
__SYSCALL
(
231
,
xtensa
_rt_sigsuspend
,
2
)
__SYSCALL
(
231
,
sys
_rt_sigsuspend
,
2
)
/* Message */
/* Message */
...
...
arch/xtensa/kernel/entry.S
View file @
9ccc9c75
...
@@ -418,7 +418,6 @@ common_exception_return:
...
@@ -418,7 +418,6 @@ common_exception_return:
movi
a4
,
do_signal
#
int
do_signal
(
struct
pt_regs
*,
sigset_t
*)
movi
a4
,
do_signal
#
int
do_signal
(
struct
pt_regs
*,
sigset_t
*)
mov
a6
,
a1
mov
a6
,
a1
movi
a7
,
0
callx4
a4
callx4
a4
j
1
b
j
1
b
...
...
arch/xtensa/kernel/signal.c
View file @
9ccc9c75
...
@@ -31,8 +31,6 @@
...
@@ -31,8 +31,6 @@
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
asmlinkage
int
do_signal
(
struct
pt_regs
*
regs
,
sigset_t
*
oldset
);
extern
struct
task_struct
*
coproc_owners
[];
extern
struct
task_struct
*
coproc_owners
[];
struct
rt_sigframe
struct
rt_sigframe
...
@@ -429,37 +427,6 @@ static int setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
...
@@ -429,37 +427,6 @@ static int setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
return
-
EFAULT
;
return
-
EFAULT
;
}
}
/*
* Atomically swap in the new signal mask, and wait for a signal.
*/
asmlinkage
long
xtensa_rt_sigsuspend
(
sigset_t
__user
*
unewset
,
size_t
sigsetsize
,
long
a2
,
long
a3
,
long
a4
,
long
a5
,
struct
pt_regs
*
regs
)
{
sigset_t
saveset
,
newset
;
/* XXX: Don't preclude handling different sized sigset_t's. */
if
(
sigsetsize
!=
sizeof
(
sigset_t
))
return
-
EINVAL
;
if
(
copy_from_user
(
&
newset
,
unewset
,
sizeof
(
newset
)))
return
-
EFAULT
;
sigdelsetmask
(
&
newset
,
~
_BLOCKABLE
);
saveset
=
current
->
blocked
;
set_current_blocked
(
&
newset
);
regs
->
areg
[
2
]
=
-
EINTR
;
while
(
1
)
{
current
->
state
=
TASK_INTERRUPTIBLE
;
schedule
();
if
(
do_signal
(
regs
,
&
saveset
))
return
-
EINTR
;
}
}
asmlinkage
long
xtensa_sigaltstack
(
const
stack_t
__user
*
uss
,
asmlinkage
long
xtensa_sigaltstack
(
const
stack_t
__user
*
uss
,
stack_t
__user
*
uoss
,
stack_t
__user
*
uoss
,
long
a2
,
long
a3
,
long
a4
,
long
a5
,
long
a2
,
long
a3
,
long
a4
,
long
a5
,
...
@@ -479,19 +446,22 @@ asmlinkage long xtensa_sigaltstack(const stack_t __user *uss,
...
@@ -479,19 +446,22 @@ asmlinkage long xtensa_sigaltstack(const stack_t __user *uss,
* the kernel can handle, and then we build all the user-level signal handling
* the kernel can handle, and then we build all the user-level signal handling
* stack-frames in one go after that.
* stack-frames in one go after that.
*/
*/
int
do_signal
(
struct
pt_regs
*
regs
,
sigset_t
*
oldset
)
void
do_signal
(
struct
pt_regs
*
regs
)
{
{
siginfo_t
info
;
siginfo_t
info
;
int
signr
;
int
signr
;
struct
k_sigaction
ka
;
struct
k_sigaction
ka
;
sigset_t
oldset
;
if
(
!
user_mode
(
regs
))
if
(
!
user_mode
(
regs
))
return
0
;
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
;
task_pt_regs
(
current
)
->
icountlevel
=
0
;
task_pt_regs
(
current
)
->
icountlevel
=
0
;
...
@@ -535,13 +505,14 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
...
@@ -535,13 +505,14 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
/* Set up the stack frame */
/* Set up the stack frame */
ret
=
setup_frame
(
signr
,
&
ka
,
&
info
,
oldset
,
regs
);
ret
=
setup_frame
(
signr
,
&
ka
,
&
info
,
oldset
,
regs
);
if
(
ret
)
if
(
ret
)
return
ret
;
return
;
clear_thread_flag
(
TIF_RESTORE_SIGMASK
);
block_sigmask
(
&
ka
,
signr
);
block_sigmask
(
&
ka
,
signr
);
if
(
current
->
ptrace
&
PT_SINGLESTEP
)
if
(
current
->
ptrace
&
PT_SINGLESTEP
)
task_pt_regs
(
current
)
->
icountlevel
=
1
;
task_pt_regs
(
current
)
->
icountlevel
=
1
;
return
1
;
return
;
}
}
no_signal:
no_signal:
...
@@ -561,8 +532,13 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
...
@@ -561,8 +532,13 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
break
;
break
;
}
}
}
}
/* If there's no signal to deliver, we just restore the saved mask. */
if
(
test_and_clear_thread_flag
(
TIF_RESTORE_SIGMASK
))
set_current_blocked
(
&
current
->
saved_sigmask
);
if
(
current
->
ptrace
&
PT_SINGLESTEP
)
if
(
current
->
ptrace
&
PT_SINGLESTEP
)
task_pt_regs
(
current
)
->
icountlevel
=
1
;
task_pt_regs
(
current
)
->
icountlevel
=
1
;
return
0
;
return
;
}
}
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