Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Linux-御风守护者
linux
提交
c88d6aa7
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,发现更多精彩内容 >>
提交
c88d6aa7
编写于
9月 20, 2009
作者:
R
Russell King
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ARM: Provide definitions and helpers for decoding the FSR register
Signed-off-by:
N
Russell King
<
rmk+kernel@arm.linux.org.uk
>
上级
4275c13c
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
15 addition
and
3 deletion
+15
-3
arch/arm/mm/fault.c
arch/arm/mm/fault.c
+15
-3
未找到文件。
arch/arm/mm/fault.c
浏览文件 @
c88d6aa7
...
...
@@ -25,6 +25,18 @@
#include "fault.h"
/*
* Fault status register encodings
*/
#define FSR_WRITE (1 << 11)
#define FSR_FS4 (1 << 10)
#define FSR_FS3_0 (15)
static
inline
int
fsr_fs
(
unsigned
int
fsr
)
{
return
(
fsr
&
FSR_FS3_0
)
|
(
fsr
&
FSR_FS4
)
>>
6
;
}
#ifdef CONFIG_MMU
#ifdef CONFIG_KPROBES
...
...
@@ -201,7 +213,7 @@ __do_page_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
* memory access, so we can handle it.
*/
good_area:
if
(
fsr
&
(
1
<<
11
))
/* write? */
if
(
fsr
&
FSR_WRITE
)
mask
=
VM_WRITE
;
else
mask
=
VM_READ
|
VM_EXEC
|
VM_WRITE
;
...
...
@@ -216,7 +228,7 @@ __do_page_fault(struct mm_struct *mm, unsigned long addr, unsigned int fsr,
* than endlessly redo the fault.
*/
survive:
fault
=
handle_mm_fault
(
mm
,
vma
,
addr
&
PAGE_MASK
,
(
fsr
&
(
1
<<
11
)
)
?
FAULT_FLAG_WRITE
:
0
);
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
;
...
...
@@ -489,7 +501,7 @@ hook_fault_code(int nr, int (*fn)(unsigned long, unsigned int, struct pt_regs *)
asmlinkage
void
__exception
do_DataAbort
(
unsigned
long
addr
,
unsigned
int
fsr
,
struct
pt_regs
*
regs
)
{
const
struct
fsr_info
*
inf
=
fsr_info
+
(
fsr
&
15
)
+
((
fsr
&
(
1
<<
10
))
>>
6
);
const
struct
fsr_info
*
inf
=
fsr_info
+
fsr_fs
(
fsr
);
struct
siginfo
info
;
if
(
!
inf
->
fn
(
addr
,
fsr
,
regs
))
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录