Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
64ae892b
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
64ae892b
编写于
10年前
作者:
D
David Woodhouse
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
iommu/vt-d: Pass iommu to domain_context_mapping_one() and iommu_support_dev_iotlb()
Signed-off-by:
N
David Woodhouse
<
David.Woodhouse@intel.com
>
上级
0bcb3e28
无相关合并请求
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
17 addition
and
18 deletion
+17
-18
drivers/iommu/intel-iommu.c
drivers/iommu/intel-iommu.c
+17
-18
未找到文件。
drivers/iommu/intel-iommu.c
浏览文件 @
64ae892b
...
...
@@ -1240,13 +1240,13 @@ static void __iommu_flush_iotlb(struct intel_iommu *iommu, u16 did,
(
unsigned
long
long
)
DMA_TLB_IAIG
(
val
));
}
static
struct
device_domain_info
*
iommu_support_dev_iotlb
(
struct
dmar_domain
*
domain
,
int
segment
,
u8
bus
,
u8
devfn
)
static
struct
device_domain_info
*
iommu_support_dev_iotlb
(
struct
dmar_domain
*
domain
,
struct
intel_iommu
*
iommu
,
u8
bus
,
u8
devfn
)
{
int
found
=
0
;
unsigned
long
flags
;
struct
device_domain_info
*
info
;
struct
intel_iommu
*
iommu
=
device_to_iommu
(
segment
,
bus
,
devfn
);
struct
pci_dev
*
pdev
;
if
(
!
ecap_dev_iotlb_support
(
iommu
->
ecap
))
...
...
@@ -1700,12 +1700,12 @@ static void domain_exit(struct dmar_domain *domain)
free_domain_mem
(
domain
);
}
static
int
domain_context_mapping_one
(
struct
dmar_domain
*
domain
,
int
segment
,
u8
bus
,
u8
devfn
,
int
translation
)
static
int
domain_context_mapping_one
(
struct
dmar_domain
*
domain
,
struct
intel_iommu
*
iommu
,
u8
bus
,
u8
devfn
,
int
translation
)
{
struct
context_entry
*
context
;
unsigned
long
flags
;
struct
intel_iommu
*
iommu
;
struct
dma_pte
*
pgd
;
unsigned
long
num
;
unsigned
long
ndomains
;
...
...
@@ -1720,10 +1720,6 @@ static int domain_context_mapping_one(struct dmar_domain *domain, int segment,
BUG_ON
(
translation
!=
CONTEXT_TT_PASS_THROUGH
&&
translation
!=
CONTEXT_TT_MULTI_LEVEL
);
iommu
=
device_to_iommu
(
segment
,
bus
,
devfn
);
if
(
!
iommu
)
return
-
ENODEV
;
context
=
device_to_context_entry
(
iommu
,
bus
,
devfn
);
if
(
!
context
)
return
-
ENOMEM
;
...
...
@@ -1781,7 +1777,7 @@ static int domain_context_mapping_one(struct dmar_domain *domain, int segment,
context_set_domain_id
(
context
,
id
);
if
(
translation
!=
CONTEXT_TT_PASS_THROUGH
)
{
info
=
iommu_support_dev_iotlb
(
domain
,
segment
,
bus
,
devfn
);
info
=
iommu_support_dev_iotlb
(
domain
,
iommu
,
bus
,
devfn
);
translation
=
info
?
CONTEXT_TT_DEV_IOTLB
:
CONTEXT_TT_MULTI_LEVEL
;
}
...
...
@@ -1836,8 +1832,14 @@ domain_context_mapping(struct dmar_domain *domain, struct pci_dev *pdev,
{
int
ret
;
struct
pci_dev
*
tmp
,
*
parent
;
struct
intel_iommu
*
iommu
;
iommu
=
device_to_iommu
(
pci_domain_nr
(
pdev
->
bus
),
pdev
->
bus
->
number
,
pdev
->
devfn
);
if
(
!
iommu
)
return
-
ENODEV
;
ret
=
domain_context_mapping_one
(
domain
,
pci_domain_nr
(
pdev
->
bus
)
,
ret
=
domain_context_mapping_one
(
domain
,
iommu
,
pdev
->
bus
->
number
,
pdev
->
devfn
,
translation
);
if
(
ret
)
...
...
@@ -1850,8 +1852,7 @@ domain_context_mapping(struct dmar_domain *domain, struct pci_dev *pdev,
/* Secondary interface's bus number and devfn 0 */
parent
=
pdev
->
bus
->
self
;
while
(
parent
!=
tmp
)
{
ret
=
domain_context_mapping_one
(
domain
,
pci_domain_nr
(
parent
->
bus
),
ret
=
domain_context_mapping_one
(
domain
,
iommu
,
parent
->
bus
->
number
,
parent
->
devfn
,
translation
);
if
(
ret
)
...
...
@@ -1859,13 +1860,11 @@ domain_context_mapping(struct dmar_domain *domain, struct pci_dev *pdev,
parent
=
parent
->
bus
->
self
;
}
if
(
pci_is_pcie
(
tmp
))
/* this is a PCIe-to-PCI bridge */
return
domain_context_mapping_one
(
domain
,
pci_domain_nr
(
tmp
->
subordinate
),
return
domain_context_mapping_one
(
domain
,
iommu
,
tmp
->
subordinate
->
number
,
0
,
translation
);
else
/* this is a legacy PCI bridge */
return
domain_context_mapping_one
(
domain
,
pci_domain_nr
(
tmp
->
bus
),
return
domain_context_mapping_one
(
domain
,
iommu
,
tmp
->
bus
->
number
,
tmp
->
devfn
,
translation
);
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
反馈
建议
客服
返回
顶部