Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
ef0197e8
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 3 年多
通知
13
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
ef0197e8
编写于
5月 30, 2007
作者:
A
Avi Kivity
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
KVM: MMU: Simplify fetch() a little bit
Signed-off-by:
N
Avi Kivity
<
avi@qumranet.com
>
上级
d3d25b04
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
17 addition
and
17 deletion
+17
-17
drivers/kvm/paging_tmpl.h
drivers/kvm/paging_tmpl.h
+17
-17
未找到文件。
drivers/kvm/paging_tmpl.h
浏览文件 @
ef0197e8
...
...
@@ -241,6 +241,7 @@ static u64 *FNAME(fetch)(struct kvm_vcpu *vcpu, gva_t addr,
{
hpa_t
shadow_addr
;
int
level
;
u64
*
shadow_ent
;
u64
*
prev_shadow_ent
=
NULL
;
pt_element_t
*
guest_ent
=
walker
->
ptep
;
...
...
@@ -257,13 +258,13 @@ static u64 *FNAME(fetch)(struct kvm_vcpu *vcpu, gva_t addr,
for
(;
;
level
--
)
{
u32
index
=
SHADOW_PT_INDEX
(
addr
,
level
);
u64
*
shadow_ent
=
((
u64
*
)
__va
(
shadow_addr
))
+
index
;
struct
kvm_mmu_page
*
shadow_page
;
u64
shadow_pte
;
int
metaphysical
;
gfn_t
table_gfn
;
unsigned
hugepage_access
=
0
;
shadow_ent
=
((
u64
*
)
__va
(
shadow_addr
))
+
index
;
if
(
is_present_pte
(
*
shadow_ent
)
||
is_io_pte
(
*
shadow_ent
))
{
if
(
level
==
PT_PAGE_TABLE_LEVEL
)
return
shadow_ent
;
...
...
@@ -272,22 +273,8 @@ static u64 *FNAME(fetch)(struct kvm_vcpu *vcpu, gva_t addr,
continue
;
}
if
(
level
==
PT_PAGE_TABLE_LEVEL
)
{
if
(
walker
->
level
==
PT_DIRECTORY_LEVEL
)
{
if
(
prev_shadow_ent
)
*
prev_shadow_ent
|=
PT_SHADOW_PS_MARK
;
FNAME
(
set_pde
)(
vcpu
,
*
guest_ent
,
shadow_ent
,
walker
->
inherited_ar
,
walker
->
gfn
);
}
else
{
ASSERT
(
walker
->
level
==
PT_PAGE_TABLE_LEVEL
);
FNAME
(
set_pte
)(
vcpu
,
*
guest_ent
,
shadow_ent
,
walker
->
inherited_ar
,
walker
->
gfn
);
}
return
shadow_ent
;
}
if
(
level
==
PT_PAGE_TABLE_LEVEL
)
break
;
if
(
level
-
1
==
PT_PAGE_TABLE_LEVEL
&&
walker
->
level
==
PT_DIRECTORY_LEVEL
)
{
...
...
@@ -310,6 +297,19 @@ static u64 *FNAME(fetch)(struct kvm_vcpu *vcpu, gva_t addr,
*
shadow_ent
=
shadow_pte
;
prev_shadow_ent
=
shadow_ent
;
}
if
(
walker
->
level
==
PT_DIRECTORY_LEVEL
)
{
if
(
prev_shadow_ent
)
*
prev_shadow_ent
|=
PT_SHADOW_PS_MARK
;
FNAME
(
set_pde
)(
vcpu
,
*
guest_ent
,
shadow_ent
,
walker
->
inherited_ar
,
walker
->
gfn
);
}
else
{
ASSERT
(
walker
->
level
==
PT_PAGE_TABLE_LEVEL
);
FNAME
(
set_pte
)(
vcpu
,
*
guest_ent
,
shadow_ent
,
walker
->
inherited_ar
,
walker
->
gfn
);
}
return
shadow_ent
;
}
/*
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录