Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Linux-御风守护者
linux
提交
b42c6344
L
linux
项目概览
Linux-御风守护者
/
linux
与 Fork 源项目一致
从无法访问的项目Fork
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
L
linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
b42c6344
编写于
9月 20, 2009
作者:
R
Russell King
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ARM: Update page fault handling for new OOM techniques
Signed-off-by:
N
Russell King
<
rmk+kernel@arm.linux.org.uk
>
上级
c88d6aa7
变更
1
显示空白变更内容
内联
并排
Showing
1 changed file
with
14 addition
and
33 deletion
+14
-33
arch/arm/mm/fault.c
arch/arm/mm/fault.c
+14
-33
未找到文件。
arch/arm/mm/fault.c
浏览文件 @
b42c6344
...
...
@@ -223,37 +223,18 @@ __do_page_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
goto
out
;
/*
* If for any reason at all we couldn't handle
* the fault, make sure we exit gracefully rather
* than endlessly redo the fault.
* If for any reason at all we couldn't handle the fault, make
* sure we exit gracefully rather than endlessly redo the fault.
*/
survive:
fault
=
handle_mm_fault
(
mm
,
vma
,
addr
&
PAGE_MASK
,
(
fsr
&
FSR_WRITE
)
?
FAULT_FLAG_WRITE
:
0
);
if
(
unlikely
(
fault
&
VM_FAULT_ERROR
))
{
if
(
fault
&
VM_FAULT_OOM
)
goto
out_of_memory
;
else
if
(
fault
&
VM_FAULT_SIGBUS
)
if
(
unlikely
(
fault
&
VM_FAULT_ERROR
))
return
fault
;
BUG
();
}
if
(
fault
&
VM_FAULT_MAJOR
)
tsk
->
maj_flt
++
;
else
tsk
->
min_flt
++
;
return
fault
;
out_of_memory:
if
(
!
is_global_init
(
tsk
))
goto
out
;
/*
* If we are out of memory for pid1, sleep for a while and retry
*/
up_read
(
&
mm
->
mmap_sem
);
yield
();
down_read
(
&
mm
->
mmap_sem
);
goto
survive
;
check_stack:
if
(
vma
->
vm_flags
&
VM_GROWSDOWN
&&
!
expand_stack
(
vma
,
addr
))
goto
good_area
;
...
...
@@ -301,6 +282,16 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
if
(
likely
(
!
(
fault
&
(
VM_FAULT_ERROR
|
VM_FAULT_BADMAP
|
VM_FAULT_BADACCESS
))))
return
0
;
if
(
fault
&
VM_FAULT_OOM
)
{
/*
* We ran out of memory, call the OOM killer, and return to
* userspace (which will retry the fault, or kill us if we
* got oom-killed)
*/
pagefault_out_of_memory
();
return
0
;
}
/*
* If we are in kernel mode at this point, we
* have no context to handle this fault with.
...
...
@@ -308,16 +299,6 @@ do_page_fault(unsigned long addr, unsigned int fsr, struct pt_regs *regs)
if
(
!
user_mode
(
regs
))
goto
no_context
;
if
(
fault
&
VM_FAULT_OOM
)
{
/*
* We ran out of memory, or some other thing
* happened to us that made us unable to handle
* the page fault gracefully.
*/
printk
(
"VM: killing process %s
\n
"
,
tsk
->
comm
);
do_group_exit
(
SIGKILL
);
return
0
;
}
if
(
fault
&
VM_FAULT_SIGBUS
)
{
/*
* We had some memory, but were unable to
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录