]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
iommu/vt-d: Restore WO permissions on second-level paging entries
authorJason Gunthorpe <jgg@nvidia.com>
Tue, 13 May 2025 03:07:35 +0000 (11:07 +0800)
committerJoerg Roedel <jroedel@suse.de>
Fri, 16 May 2025 06:49:27 +0000 (08:49 +0200)
VT-D HW can do WO permissions on the second-stage but not the first-stage
page table formats. The commit eea53c581688 ("iommu/vt-d: Remove WO
permissions on second-level paging entries") wanted to make this uniform
for VT-D by disabling the support for WO permissions in the second-stage.

This isn't consistent with how other drivers are working. Instead if the
underlying HW can support WO, it should. For instance AMD already supports
WO on its second stage (v1) format and not its first (v2).

If WO support needs to be discoverable it should be done through an
iommu_domain capability flag.

Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Kevin Tian <kevin.tian@intel.com>
Link: https://lore.kernel.org/r/0-v1-c26553717e90+65f-iommu_vtd_ss_wo_jgg@nvidia.com
Signed-off-by: Lu Baolu <baolu.lu@linux.intel.com>
Signed-off-by: Joerg Roedel <jroedel@suse.de>
drivers/iommu/intel/iommu.c

index b29da2d96d0b18742b51b7801038b17b5c33907e..bdf771bc4a2659335cde2e035b4788d1b35888d2 100644 (file)
@@ -1681,9 +1681,8 @@ __domain_mapping(struct dmar_domain *domain, unsigned long iov_pfn,
        }
 
        attr = prot & (DMA_PTE_READ | DMA_PTE_WRITE | DMA_PTE_SNP);
-       attr |= DMA_FL_PTE_PRESENT;
        if (domain->use_first_level) {
-               attr |= DMA_FL_PTE_US | DMA_FL_PTE_ACCESS;
+               attr |= DMA_FL_PTE_PRESENT | DMA_FL_PTE_US | DMA_FL_PTE_ACCESS;
                if (prot & DMA_PTE_WRITE)
                        attr |= DMA_FL_PTE_DIRTY;
        }