mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-01-15 09:34:17 +00:00
IOMMU Fixes for Linux v4.7-rc6
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. -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iQIcBAABAgAGBQJXf7bkAAoJECvwRC2XARrjzYoP/AvvkL955TW0pSdMWZqQ0o9j kL3jSl75Te1EwaSyJxR9nOK8azSsfYcG4NdzMxnFUCK6ydDA6Ogz0cMtcd6s2skd unQuCSpjOJiMQU426ssQrsW+KoTxi5utpapMY3Ayh94/BbEDuVtv/iUIBE1Ca9eE H/SQUl4l8c3Cwe//1Kwrzm6O0pslrLBoOABTpFhl4GZ5pWCcv7bwbSEjVfSY5X8x //trqhgsACdh+Qlp5dA56BeMVyEblOvnY5XO2ODeWOG2vlEbqH9MiUeuDBNoXxtM MqhLTSKijZ1wp2a1iaCuyBLKFlaW7zChU41YyQmYJ8B60u6CwVuFwGs+XltnkOha iYBK56xZ8npFKOs4iauBmsVZZnNrAY0mxCYg28KtNh2uUT4sQdqUCnT/SxA9Z0RC bRtudpoX5I3NZrlDlt6OzWqCjxFj8Zq57RwrhDuQm+ijqAAor4C7NhH7cT0QTC4k l1srxnLtSM/iiqWgs2hNIC2GzNbdhix8YU98kIxpT2iNB99qlqPXK9ve0bJIb03N oECjKBu+d0I7ApdfOlL6N/RHgZJ01O+6gK1neArtVnviBgN7tmTxgWvcioJd+JuL bmjytsExfP/Z2p7iy9yQCiIDicAo0+wpMOzZRG8jAXvHHCj8laZ8PhL74voWc2wH Mn+iaXAXUysLblaXzpEx =axsu -----END PGP SIGNATURE----- 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
This commit is contained in:
commit
b89c44bb23
@ -1568,13 +1568,23 @@ static int __init amd_iommu_init_pci(void)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Order is important here to make sure any unity map requirements are
|
||||||
|
* fulfilled. The unity mappings are created and written to the device
|
||||||
|
* table during the amd_iommu_init_api() call.
|
||||||
|
*
|
||||||
|
* After that we call init_device_table_dma() to make sure any
|
||||||
|
* uninitialized DTE will block DMA, and in the end we flush the caches
|
||||||
|
* of all IOMMUs to make sure the changes to the device table are
|
||||||
|
* active.
|
||||||
|
*/
|
||||||
|
ret = amd_iommu_init_api();
|
||||||
|
|
||||||
init_device_table_dma();
|
init_device_table_dma();
|
||||||
|
|
||||||
for_each_iommu(iommu)
|
for_each_iommu(iommu)
|
||||||
iommu_flush_all_caches(iommu);
|
iommu_flush_all_caches(iommu);
|
||||||
|
|
||||||
ret = amd_iommu_init_api();
|
|
||||||
|
|
||||||
if (!ret)
|
if (!ret)
|
||||||
print_iommu_info();
|
print_iommu_info();
|
||||||
|
|
||||||
|
@ -4602,13 +4602,13 @@ static void free_all_cpu_cached_iovas(unsigned int cpu)
|
|||||||
for (i = 0; i < g_num_of_iommus; i++) {
|
for (i = 0; i < g_num_of_iommus; i++) {
|
||||||
struct intel_iommu *iommu = g_iommus[i];
|
struct intel_iommu *iommu = g_iommus[i];
|
||||||
struct dmar_domain *domain;
|
struct dmar_domain *domain;
|
||||||
u16 did;
|
int did;
|
||||||
|
|
||||||
if (!iommu)
|
if (!iommu)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
for (did = 0; did < cap_ndoms(iommu->cap); did++) {
|
for (did = 0; did < cap_ndoms(iommu->cap); did++) {
|
||||||
domain = get_iommu_domain(iommu, did);
|
domain = get_iommu_domain(iommu, (u16)did);
|
||||||
|
|
||||||
if (!domain)
|
if (!domain)
|
||||||
continue;
|
continue;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user