8000 Merge tag 'iommu-fixes-v4.7-rc6' of git://git.kernel.org/pub/scm/linu… · bsd-unix/linux@b89c44b · GitHub
[go: up one dir, main page]

Skip to content

Commit b89c44b

Browse files
committed
Merge tag 'iommu-fixes-v4.7-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu
Pull IOMMU fixes from Joerg Roedel: "Two Fixes: - Intel VT-d fix for a suspend/resume issue, introduced with the scalability improvements in this cycle. - AMD IOMMU fix for systems that have unity mappings defined. There was a race where translation got enabled before the unity mappings were in place. This issue was seen on some HP servers" * tag 'iommu-fixes-v4.7-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/joro/iommu: iommu/amd: Fix unity mapping initialization race iommu/vt-d: Fix infinite loop in free_all_cpu_cached_iovas
2 parents cfae7e3 + 522e5cb commit b89c44b

File tree

2 files changed

+14
-4
lines changed

2 files changed

+14
-4
lines changed

drivers/iommu/amd_iommu_init.c

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1568,13 +1568,23 @@ static int __init amd_iommu_init_pci(void)
15681568
break;
15691569
}
15701570

1571+
/*
1572+
* Order is important here to make sure any unity map requirements are
1573+
* fulfilled. The unity mappings are created and written to the device
1574+
* table during the amd_iommu_init_api() call.
1575+
*
1576+
* After that we call init_device_table_dma() to make sure any
1577+
* uninitialized DTE will block DMA, and in the end we flush the caches
1578+
* of all IOMMUs to make sure the changes to the device table are
1579+
* active.
1580+
*/
1581+
ret = amd_iommu_init_api();
1582+
15711583
init_device_table_dma();
15721584

15731585
for_each_iommu(iommu)
15741586
iommu_flush_all_caches(iommu);
15751587

1576-
ret = amd_iommu_init_api();
1577-
15781588
if (!ret)
15791589
print_iommu_info();
15801590

drivers/iommu/intel-iommu.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4602,13 +4602,13 @@ static void free_all_cpu_cached_iovas(unsigned int cpu)
46024602
for (i = 0; i < g_num_of_iommus; i++) {
46034603
struct intel_iommu *iommu = g_iommus[i];
46044604
struct dmar_domain *domain;
4605-
u16 did;
4605+
int did;
46064606

46074607
if (!iommu)
46084608
continue;
46094609

46104610
for (did = 0; did < cap_ndoms(iommu->cap); did++) {
4611-
domain = get_iommu_domain(iommu, did);
4611+
domain = get_iommu_domain(iommu, (u16)did);
46124612

46134613
if (!domain)
46144614
continue;

0 commit comments

Comments
 (0)
0