]> git.baikalelectronics.ru Git - kernel.git/commit
iommu/vt-d: Correctly calculate sagaw value of IOMMU
authorLu Baolu <baolu.lu@linux.intel.com>
Tue, 23 Aug 2022 06:15:55 +0000 (14:15 +0800)
committerJoerg Roedel <jroedel@suse.de>
Wed, 7 Sep 2022 13:14:56 +0000 (15:14 +0200)
commit1132d39dd2ce80957a126f2ce22ceeb0f417e574
treea6339ee620841a793f8bad9a50b3d8a8f9a239df
parent47a517843bcb6c9a87a53c24ba2087208d696a01
iommu/vt-d: Correctly calculate sagaw value of IOMMU

The Intel IOMMU driver possibly selects between the first-level and the
second-level translation tables for DMA address translation. However,
the levels of page-table walks for the 4KB base page size are calculated
from the SAGAW field of the capability register, which is only valid for
the second-level page table. This causes the IOMMU driver to stop working
if the hardware (or the emulated IOMMU) advertises only first-level
translation capability and reports the SAGAW field as 0.

This solves the above problem by considering both the first level and the
second level when calculating the supported page table levels.

Fixes: 5050bb449f17e ("iommu/vt-d: Use iova over first level")
Cc: stable@vger.kernel.org
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Link: https://lore.kernel.org/r/20220817023558.3253263-1-baolu.lu@linux.intel.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/intel/iommu.c