Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
raspberrypi-kernel
提交
4f073eff
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看板
提交
4f073eff
编写于
1月 21, 2008
作者:
J
Jesper Nilsson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
CRIS v10: Don't call get_mmu_context when switching between tasks with shared memory descriptors
Also, cleanup formatting and fix whitespace errors.
上级
40316c1f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
29 addition
and
29 deletion
+29
-29
arch/cris/arch-v10/mm/tlb.c
arch/cris/arch-v10/mm/tlb.c
+29
-29
未找到文件。
arch/cris/arch-v10/mm/tlb.c
浏览文件 @
4f073eff
...
...
@@ -4,8 +4,8 @@
* Low level TLB handling
*
*
* Copyright (C) 2000-200
2
Axis Communications AB
*
* Copyright (C) 2000-200
7
Axis Communications AB
*
* Authors: Bjorn Wesen (bjornw@axis.com)
*
*/
...
...
@@ -39,7 +39,7 @@ flush_tlb_all(void)
unsigned
long
flags
;
/* the vpn of i & 0xf is so we dont write similar TLB entries
* in the same 4-way entry group. details..
* in the same 4-way entry group. details..
.
*/
local_irq_save
(
flags
);
...
...
@@ -47,7 +47,7 @@ flush_tlb_all(void)
*
R_TLB_SELECT
=
(
IO_FIELD
(
R_TLB_SELECT
,
index
,
i
)
);
*
R_TLB_HI
=
(
IO_FIELD
(
R_TLB_HI
,
page_id
,
INVALID_PAGEID
)
|
IO_FIELD
(
R_TLB_HI
,
vpn
,
i
&
0xf
)
);
*
R_TLB_LO
=
(
IO_STATE
(
R_TLB_LO
,
global
,
no
)
|
IO_STATE
(
R_TLB_LO
,
valid
,
no
)
|
IO_STATE
(
R_TLB_LO
,
kernel
,
no
)
|
...
...
@@ -71,10 +71,10 @@ flush_tlb_mm(struct mm_struct *mm)
if
(
page_id
==
NO_CONTEXT
)
return
;
/* mark the TLB entries that match the page_id as invalid.
* here we could also check the _PAGE_GLOBAL bit and NOT flush
* global pages. is it worth the extra I/O ?
* global pages. is it worth the extra I/O ?
*/
local_irq_save
(
flags
);
...
...
@@ -83,7 +83,7 @@ flush_tlb_mm(struct mm_struct *mm)
if
(
IO_EXTRACT
(
R_TLB_HI
,
page_id
,
*
R_TLB_HI
)
==
page_id
)
{
*
R_TLB_HI
=
(
IO_FIELD
(
R_TLB_HI
,
page_id
,
INVALID_PAGEID
)
|
IO_FIELD
(
R_TLB_HI
,
vpn
,
i
&
0xf
)
);
*
R_TLB_LO
=
(
IO_STATE
(
R_TLB_LO
,
global
,
no
)
|
IO_STATE
(
R_TLB_LO
,
valid
,
no
)
|
IO_STATE
(
R_TLB_LO
,
kernel
,
no
)
|
...
...
@@ -96,9 +96,7 @@ flush_tlb_mm(struct mm_struct *mm)
/* invalidate a single page */
void
flush_tlb_page
(
struct
vm_area_struct
*
vma
,
unsigned
long
addr
)
void
flush_tlb_page
(
struct
vm_area_struct
*
vma
,
unsigned
long
addr
)
{
struct
mm_struct
*
mm
=
vma
->
vm_mm
;
int
page_id
=
mm
->
context
.
page_id
;
...
...
@@ -113,7 +111,7 @@ flush_tlb_page(struct vm_area_struct *vma,
addr
&=
PAGE_MASK
;
/* perhaps not necessary */
/* invalidate those TLB entries that match both the mm context
* and the virtual address requested
* and the virtual address requested
*/
local_irq_save
(
flags
);
...
...
@@ -125,7 +123,7 @@ flush_tlb_page(struct vm_area_struct *vma,
(
tlb_hi
&
PAGE_MASK
)
==
addr
)
{
*
R_TLB_HI
=
IO_FIELD
(
R_TLB_HI
,
page_id
,
INVALID_PAGEID
)
|
addr
;
/* same addr as before works. */
*
R_TLB_LO
=
(
IO_STATE
(
R_TLB_LO
,
global
,
no
)
|
IO_STATE
(
R_TLB_LO
,
valid
,
no
)
|
IO_STATE
(
R_TLB_LO
,
kernel
,
no
)
|
...
...
@@ -144,7 +142,7 @@ dump_tlb_all(void)
{
int i;
unsigned long flags;
printk("TLB dump. LO is: pfn | reserved | global | valid | kernel | we |\n");
local_save_flags(flags);
...
...
@@ -172,27 +170,29 @@ init_new_context(struct task_struct *tsk, struct mm_struct *mm)
/* called in schedule() just before actually doing the switch_to */
void
switch_mm
(
struct
mm_struct
*
prev
,
struct
mm_struct
*
next
,
struct
task_struct
*
tsk
)
void
switch_mm
(
struct
mm_struct
*
prev
,
struct
mm_struct
*
next
,
struct
task_struct
*
tsk
)
{
/* make sure we have a context */
if
(
prev
!=
next
)
{
/* make sure we have a context */
get_mmu_context
(
next
);
get_mmu_context
(
next
);
/* remember the pgd for the fault handlers
* this is similar to the pgd register in some other CPU's.
* we need our own copy of it because current and active_mm
* might be invalid at points where we still need to derefer
* the pgd.
*/
/* remember the pgd for the fault handlers
* this is similar to the pgd register in some other CPU's.
* we need our own copy of it because current and active_mm
* might be invalid at points where we still need to derefer
* the pgd.
*/
per_cpu
(
current_pgd
,
smp_processor_id
())
=
next
->
pgd
;
per_cpu
(
current_pgd
,
smp_processor_id
())
=
next
->
pgd
;
/* switch context in the MMU */
/* switch context in the MMU */
D
(
printk
(
"switching mmu_context to %d (%p)
\n
"
,
next
->
context
,
next
));
D
(
printk
(
KERN_DEBUG
"switching mmu_context to %d (%p)
\n
"
,
next
->
context
,
next
));
*
R_MMU_CONTEXT
=
IO_FIELD
(
R_MMU_CONTEXT
,
page_id
,
next
->
context
.
page_id
);
*
R_MMU_CONTEXT
=
IO_FIELD
(
R_MMU_CONTEXT
,
page_id
,
next
->
context
.
page_id
);
}
}
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录