Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
9ccc9c75
R
raspberrypi-kernel
项目概览
openeuler
/
raspberrypi-kernel
通知
13
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
raspberrypi-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
9ccc9c75
编写于
4月 22, 2012
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
xtensa: switch to generic rt_sigsuspend(2)
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
446cdd13
变更
4
隐藏空白更改
内联
并排
Showing
4 changed file
with
16 addition
and
43 deletion
+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
未找到文件。
arch/xtensa/include/asm/syscall.h
浏览文件 @
9ccc9c75
...
...
@@ -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_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
*
,
struct
old_sigaction
*
);
asmlinkage
long
xtensa_sigaltstack
(
struct
pt_regs
*
regs
);
...
...
arch/xtensa/include/asm/unistd.h
浏览文件 @
9ccc9c75
...
...
@@ -507,7 +507,7 @@ __SYSCALL(229, sys_rt_sigtimedwait, 4)
#define __NR_rt_sigqueueinfo 230
__SYSCALL
(
230
,
sys_rt_sigqueueinfo
,
3
)
#define __NR_rt_sigsuspend 231
__SYSCALL
(
231
,
xtensa
_rt_sigsuspend
,
2
)
__SYSCALL
(
231
,
sys
_rt_sigsuspend
,
2
)
/* Message */
...
...
arch/xtensa/kernel/entry.S
浏览文件 @
9ccc9c75
...
...
@@ -418,7 +418,6 @@ common_exception_return:
movi
a4
,
do_signal
#
int
do_signal
(
struct
pt_regs
*,
sigset_t
*)
mov
a6
,
a1
movi
a7
,
0
callx4
a4
j
1
b
...
...
arch/xtensa/kernel/signal.c
浏览文件 @
9ccc9c75
...
...
@@ -31,8 +31,6 @@
#define _BLOCKABLE (~(sigmask(SIGKILL) | sigmask(SIGSTOP)))
asmlinkage
int
do_signal
(
struct
pt_regs
*
regs
,
sigset_t
*
oldset
);
extern
struct
task_struct
*
coproc_owners
[];
struct
rt_sigframe
...
...
@@ -429,37 +427,6 @@ static int setup_frame(int sig, struct k_sigaction *ka, siginfo_t *info,
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
,
stack_t
__user
*
uoss
,
long
a2
,
long
a3
,
long
a4
,
long
a5
,
...
...
@@ -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
* 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
;
int
signr
;
struct
k_sigaction
ka
;
sigset_t
oldset
;
if
(
!
user_mode
(
regs
))
return
0
;
return
;
if
(
try_to_freeze
())
goto
no_signal
;
if
(
!
oldset
)
if
(
test_thread_flag
(
TIF_RESTORE_SIGMASK
))
oldset
=
&
current
->
saved_sigmask
;
else
oldset
=
&
current
->
blocked
;
task_pt_regs
(
current
)
->
icountlevel
=
0
;
...
...
@@ -535,13 +505,14 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
/* Set up the stack frame */
ret
=
setup_frame
(
signr
,
&
ka
,
&
info
,
oldset
,
regs
);
if
(
ret
)
return
ret
;
return
;
clear_thread_flag
(
TIF_RESTORE_SIGMASK
);
block_sigmask
(
&
ka
,
signr
);
if
(
current
->
ptrace
&
PT_SINGLESTEP
)
task_pt_regs
(
current
)
->
icountlevel
=
1
;
return
1
;
return
;
}
no_signal:
...
...
@@ -561,8 +532,13 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
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
)
task_pt_regs
(
current
)
->
icountlevel
=
1
;
return
0
;
return
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录