Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
e1f167f3
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
163
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
e1f167f3
编写于
3月 09, 2014
作者:
D
David Woodhouse
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
iommu/vt-d: Make domain_context_mapp{ed,ing}() take struct device
Signed-off-by:
N
David Woodhouse
<
David.Woodhouse@intel.com
>
上级
156baca8
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
17 addition
and
14 deletion
+17
-14
drivers/iommu/intel-iommu.c
drivers/iommu/intel-iommu.c
+17
-14
未找到文件。
drivers/iommu/intel-iommu.c
浏览文件 @
e1f167f3
...
...
@@ -1840,24 +1840,25 @@ static int domain_context_mapping_one(struct dmar_domain *domain,
}
static
int
domain_context_mapping
(
struct
dmar_domain
*
domain
,
struct
pci_dev
*
p
dev
,
int
translation
)
domain_context_mapping
(
struct
dmar_domain
*
domain
,
struct
device
*
dev
,
int
translation
)
{
int
ret
;
struct
pci_dev
*
tmp
,
*
parent
;
struct
pci_dev
*
pdev
,
*
tmp
,
*
parent
;
struct
intel_iommu
*
iommu
;
u8
bus
,
devfn
;
iommu
=
device_to_iommu
(
&
pdev
->
dev
,
&
bus
,
&
devfn
);
iommu
=
device_to_iommu
(
dev
,
&
bus
,
&
devfn
);
if
(
!
iommu
)
return
-
ENODEV
;
ret
=
domain_context_mapping_one
(
domain
,
iommu
,
bus
,
devfn
,
translation
);
if
(
ret
)
if
(
ret
||
!
dev_is_pci
(
dev
)
)
return
ret
;
/* dependent device mapping */
pdev
=
to_pci_dev
(
dev
);
tmp
=
pci_find_upstream_pcie_bridge
(
pdev
);
if
(
!
tmp
)
return
0
;
...
...
@@ -1882,21 +1883,23 @@ domain_context_mapping(struct dmar_domain *domain, struct pci_dev *pdev,
translation
);
}
static
int
domain_context_mapped
(
struct
pci_dev
*
p
dev
)
static
int
domain_context_mapped
(
struct
device
*
dev
)
{
int
ret
;
struct
pci_dev
*
tmp
,
*
parent
;
struct
pci_dev
*
pdev
,
*
tmp
,
*
parent
;
struct
intel_iommu
*
iommu
;
u8
bus
,
devfn
;
iommu
=
device_to_iommu
(
&
pdev
->
dev
,
&
bus
,
&
devfn
);
iommu
=
device_to_iommu
(
dev
,
&
bus
,
&
devfn
);
if
(
!
iommu
)
return
-
ENODEV
;
ret
=
device_context_mapped
(
iommu
,
bus
,
devfn
);
if
(
!
ret
)
if
(
!
ret
||
!
dev_is_pci
(
dev
)
)
return
ret
;
/* dependent device mapping */
pdev
=
to_pci_dev
(
dev
);
tmp
=
pci_find_upstream_pcie_bridge
(
pdev
);
if
(
!
tmp
)
return
ret
;
...
...
@@ -2361,7 +2364,7 @@ static int iommu_prepare_identity_map(struct pci_dev *pdev,
goto
error
;
/* context entry init */
ret
=
domain_context_mapping
(
domain
,
p
dev
,
CONTEXT_TT_MULTI_LEVEL
);
ret
=
domain_context_mapping
(
domain
,
&
pdev
->
dev
,
CONTEXT_TT_MULTI_LEVEL
);
if
(
ret
)
goto
error
;
...
...
@@ -2485,7 +2488,7 @@ static int domain_add_dev_info(struct dmar_domain *domain,
if
(
ndomain
!=
domain
)
return
-
EBUSY
;
ret
=
domain_context_mapping
(
domain
,
p
dev
,
translation
);
ret
=
domain_context_mapping
(
domain
,
&
pdev
->
dev
,
translation
);
if
(
ret
)
{
domain_remove_one_dev_info
(
domain
,
pdev
);
return
ret
;
...
...
@@ -2870,8 +2873,8 @@ static struct dmar_domain *__get_valid_domain_for_dev(struct pci_dev *pdev)
}
/* make sure context mapping is ok */
if
(
unlikely
(
!
domain_context_mapped
(
p
dev
)))
{
ret
=
domain_context_mapping
(
domain
,
p
dev
,
if
(
unlikely
(
!
domain_context_mapped
(
&
pdev
->
dev
)))
{
ret
=
domain_context_mapping
(
domain
,
&
pdev
->
dev
,
CONTEXT_TT_MULTI_LEVEL
);
if
(
ret
)
{
printk
(
KERN_ERR
...
...
@@ -4159,7 +4162,7 @@ static int intel_iommu_attach_device(struct iommu_domain *domain,
u8
bus
,
devfn
;
/* normally pdev is not mapped */
if
(
unlikely
(
domain_context_mapped
(
p
dev
)))
{
if
(
unlikely
(
domain_context_mapped
(
&
pdev
->
dev
)))
{
struct
dmar_domain
*
old_domain
;
old_domain
=
find_domain
(
dev
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录