The current checks for the __IOMMU_DOMAIN_PAGING capability seem a
bit stifled, since it is quite likely now that a non-paging domain
won't have a pgsize_bitmap and/or mapping ops, and thus get caught
by the earlier condition anyway. Swap them around to test the more
fundamental condition first, then we can reasonably also upgrade
the other to a WARN_ON, since if a driver does ever expose a paging
domain without the means to actually page, it's clearly very broken.
Signed-off-by: Robin Murphy <robin.murphy@arm.com>
Link: https://lore.kernel.org/r/524db1ec0139c964d26928a6a264945aa66d010c.1694525662.git.robin.murphy@arm.com
Signed-off-by: Joerg Roedel <jroedel@suse.de>
        phys_addr_t orig_paddr = paddr;
        int ret = 0;
 
-       if (unlikely(!ops->map_pages || domain->pgsize_bitmap == 0UL))
-               return -ENODEV;
-
        if (unlikely(!(domain->type & __IOMMU_DOMAIN_PAGING)))
                return -EINVAL;
 
+       if (WARN_ON(!ops->map_pages || domain->pgsize_bitmap == 0UL))
+               return -ENODEV;
+
        /* find out the minimum page size supported */
        min_pagesz = 1 << __ffs(domain->pgsize_bitmap);
 
        unsigned long orig_iova = iova;
        unsigned int min_pagesz;
 
-       if (unlikely(!ops->unmap_pages || domain->pgsize_bitmap == 0UL))
+       if (unlikely(!(domain->type & __IOMMU_DOMAIN_PAGING)))
                return 0;
 
-       if (unlikely(!(domain->type & __IOMMU_DOMAIN_PAGING)))
+       if (WARN_ON(!ops->unmap_pages || domain->pgsize_bitmap == 0UL))
                return 0;
 
        /* find out the minimum page size supported */