Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
ea4a1da9
K
Kernel
项目概览
openeuler
/
Kernel
接近 2 年 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
ea4a1da9
编写于
10月 15, 2012
作者:
A
Al Viro
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
m32r: switch to generic kernel_thread()/kernel_execve()
Signed-off-by:
N
Al Viro
<
viro@zeniv.linux.org.uk
>
上级
ddffeb8c
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
27 addition
and
70 deletion
+27
-70
arch/m32r/Kconfig
arch/m32r/Kconfig
+2
-0
arch/m32r/include/asm/processor.h
arch/m32r/include/asm/processor.h
+0
-5
arch/m32r/kernel/entry.S
arch/m32r/kernel/entry.S
+9
-0
arch/m32r/kernel/process.c
arch/m32r/kernel/process.c
+16
-44
arch/m32r/kernel/sys_m32r.c
arch/m32r/kernel/sys_m32r.c
+0
-21
未找到文件。
arch/m32r/Kconfig
浏览文件 @
ea4a1da9
...
@@ -15,6 +15,8 @@ config M32R
...
@@ -15,6 +15,8 @@ config M32R
select GENERIC_ATOMIC64
select GENERIC_ATOMIC64
select ARCH_USES_GETTIMEOFFSET
select ARCH_USES_GETTIMEOFFSET
select MODULES_USE_ELF_RELA
select MODULES_USE_ELF_RELA
select GENERIC_KERNEL_THREAD
select GENERIC_KERNEL_EXECVE
config SBUS
config SBUS
bool
bool
...
...
arch/m32r/include/asm/processor.h
浏览文件 @
ea4a1da9
...
@@ -118,11 +118,6 @@ struct mm_struct;
...
@@ -118,11 +118,6 @@ struct mm_struct;
/* Free all resources held by a thread. */
/* Free all resources held by a thread. */
extern
void
release_thread
(
struct
task_struct
*
);
extern
void
release_thread
(
struct
task_struct
*
);
/*
* create a kernel thread without removing it from tasklists
*/
extern
int
kernel_thread
(
int
(
*
fn
)(
void
*
),
void
*
arg
,
unsigned
long
flags
);
/* Copy and release all segment info associated with a VM */
/* Copy and release all segment info associated with a VM */
extern
void
copy_segments
(
struct
task_struct
*
p
,
struct
mm_struct
*
mm
);
extern
void
copy_segments
(
struct
task_struct
*
p
,
struct
mm_struct
*
mm
);
extern
void
release_segments
(
struct
mm_struct
*
mm
);
extern
void
release_segments
(
struct
mm_struct
*
mm
);
...
...
arch/m32r/kernel/entry.S
浏览文件 @
ea4a1da9
...
@@ -125,6 +125,15 @@
...
@@ -125,6 +125,15 @@
and
\
reg
,
sp
and
\
reg
,
sp
.
endm
.
endm
ENTRY
(
ret_from_kernel_thread
)
pop
r0
bl
schedule_tail
GET_THREAD_INFO
(
r8
)
ld
r0
,
R0
(
r8
)
ld
r1
,
R1
(
r8
)
jl
r1
bra
syscall_exit
ENTRY
(
ret_from_fork
)
ENTRY
(
ret_from_fork
)
pop
r0
pop
r0
bl
schedule_tail
bl
schedule_tail
...
...
arch/m32r/kernel/process.c
浏览文件 @
ea4a1da9
...
@@ -164,41 +164,6 @@ void show_regs(struct pt_regs * regs)
...
@@ -164,41 +164,6 @@ void show_regs(struct pt_regs * regs)
#endif
#endif
}
}
/*
* Create a kernel thread
*/
/*
* This is the mechanism for creating a new kernel thread.
*
* NOTE! Only a kernel-only process(ie the swapper or direct descendants
* who haven't done an "execve()") should use this: it will work within
* a system call from a "real" process, but the process memory space will
* not be free'd until both the parent and the child have exited.
*/
static
void
kernel_thread_helper
(
void
*
nouse
,
int
(
*
fn
)(
void
*
),
void
*
arg
)
{
fn
(
arg
);
do_exit
(
-
1
);
}
int
kernel_thread
(
int
(
*
fn
)(
void
*
),
void
*
arg
,
unsigned
long
flags
)
{
struct
pt_regs
regs
;
memset
(
&
regs
,
0
,
sizeof
(
regs
));
regs
.
r1
=
(
unsigned
long
)
fn
;
regs
.
r2
=
(
unsigned
long
)
arg
;
regs
.
bpc
=
(
unsigned
long
)
kernel_thread_helper
;
regs
.
psw
=
M32R_PSW_BIE
;
/* Ok, create the new process. */
return
do_fork
(
flags
|
CLONE_VM
|
CLONE_UNTRACED
,
0
,
&
regs
,
0
,
NULL
,
NULL
);
}
/*
/*
* Free current thread data structures etc..
* Free current thread data structures etc..
*/
*/
...
@@ -227,19 +192,26 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu)
...
@@ -227,19 +192,26 @@ int dump_fpu(struct pt_regs *regs, elf_fpregset_t *fpu)
}
}
int
copy_thread
(
unsigned
long
clone_flags
,
unsigned
long
spu
,
int
copy_thread
(
unsigned
long
clone_flags
,
unsigned
long
spu
,
unsigned
long
unused
,
struct
task_struct
*
tsk
,
struct
pt_regs
*
regs
)
unsigned
long
arg
,
struct
task_struct
*
tsk
,
struct
pt_regs
*
regs
)
{
{
struct
pt_regs
*
childregs
=
task_pt_regs
(
tsk
);
struct
pt_regs
*
childregs
=
task_pt_regs
(
tsk
);
extern
void
ret_from_fork
(
void
);
extern
void
ret_from_fork
(
void
);
extern
void
ret_from_kernel_thread
(
void
);
/* Copy registers */
*
childregs
=
*
regs
;
if
(
unlikely
(
tsk
->
flags
&
PF_KTHREAD
))
{
memset
(
childregs
,
0
,
sizeof
(
struct
pt_regs
));
childregs
->
spu
=
spu
;
childregs
->
psw
=
M32R_PSW_BIE
;
childregs
->
r0
=
0
;
/* Child gets zero as return value */
childregs
->
r1
=
spu
;
/* fn */
regs
->
r0
=
tsk
->
pid
;
childregs
->
r0
=
arg
;
tsk
->
thread
.
lr
=
(
unsigned
long
)
ret_from_kernel_thread
;
}
else
{
/* Copy registers */
*
childregs
=
*
regs
;
childregs
->
spu
=
spu
;
childregs
->
r0
=
0
;
/* Child gets zero as return value */
tsk
->
thread
.
lr
=
(
unsigned
long
)
ret_from_fork
;
}
tsk
->
thread
.
sp
=
(
unsigned
long
)
childregs
;
tsk
->
thread
.
sp
=
(
unsigned
long
)
childregs
;
tsk
->
thread
.
lr
=
(
unsigned
long
)
ret_from_fork
;
return
0
;
return
0
;
}
}
...
...
arch/m32r/kernel/sys_m32r.c
浏览文件 @
ea4a1da9
...
@@ -88,24 +88,3 @@ asmlinkage int sys_cachectl(char *addr, int nbytes, int op)
...
@@ -88,24 +88,3 @@ asmlinkage int sys_cachectl(char *addr, int nbytes, int op)
/* Not implemented yet. */
/* Not implemented yet. */
return
-
ENOSYS
;
return
-
ENOSYS
;
}
}
/*
* Do a system call from kernel instead of calling sys_execve so we
* end up with proper pt_regs.
*/
int
kernel_execve
(
const
char
*
filename
,
const
char
*
const
argv
[],
const
char
*
const
envp
[])
{
register
long
__scno
__asm__
(
"r7"
)
=
__NR_execve
;
register
long
__arg3
__asm__
(
"r2"
)
=
(
long
)(
envp
);
register
long
__arg2
__asm__
(
"r1"
)
=
(
long
)(
argv
);
register
long
__res
__asm__
(
"r0"
)
=
(
long
)(
filename
);
__asm__
__volatile__
(
"trap #"
SYSCALL_VECTOR
"|| nop"
:
"=r"
(
__res
)
:
"r"
(
__scno
),
"0"
(
__res
),
"r"
(
__arg2
),
"r"
(
__arg3
)
:
"memory"
);
return
__res
;
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录