]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
iommupt: Check for missing PAGE_SIZE in the pgsize_bitmap
authorJason Gunthorpe <jgg@nvidia.com>
Tue, 12 May 2026 16:46:16 +0000 (13:46 -0300)
committerJoerg Roedel <joerg.roedel@amd.com>
Fri, 15 May 2026 05:29:16 +0000 (07:29 +0200)
Sashiko pointed out that the driver could drop PAGE_SIZE from the
pgsize_bitmap. That is technically allowed but nothing does it, and
such an iommu_domain would not be used with the DMA API today.

Still, it is against the design and it is trivial to fix up. Lift
the PT_WARN_ON to the if branch and just skip the fast path.

Fixes: dcd6a011a8d5 ("iommupt: Add map_pages op")
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Reviewed-by: Pranjal Shrivastava <praan@google.com>
Reviewed-by: Samiullah Khawaja <skhawaja@google.com>
Tested-by: Josua Mayer <josua@solid-run.com>
Signed-off-by: Joerg Roedel <joerg.roedel@amd.com>
drivers/iommu/generic_pt/iommu_pt.h

index 19b6daf88f2ab1a277b86613f8179c56c6954c7c..4877b05291c9d48d0a51888237560b10e477e3a5 100644 (file)
@@ -920,8 +920,8 @@ static int NS(map_range)(struct pt_iommu *iommu_table, dma_addr_t iova,
                return ret;
 
        /* Calculate target page size and level for the leaves */
-       if (pt_has_system_page_size(common) && len == PAGE_SIZE) {
-               PT_WARN_ON(!(pgsize_bitmap & PAGE_SIZE));
+       if (pt_has_system_page_size(common) && len == PAGE_SIZE &&
+               likely(pgsize_bitmap & PAGE_SIZE)) {
                if (log2_mod(iova | paddr, PAGE_SHIFT))
                        return -ENXIO;
                map.leaf_pgsize_lg2 = PAGE_SHIFT;