diff -drupN a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c
--- a/drivers/iommu/iommu.c	2018-08-06 17:23:04.000000000 +0300
+++ b/drivers/iommu/iommu.c	2022-06-12 05:28:14.000000000 +0300
@@ -1058,6 +1058,7 @@ void iommu_set_fault_handler(struct iomm
 }
 EXPORT_SYMBOL_GPL(iommu_set_fault_handler);
 
+
 static struct iommu_domain *__iommu_domain_alloc(struct bus_type *bus,
 						 unsigned type)
 {
@@ -1401,9 +1402,9 @@ size_t iommu_unmap(struct iommu_domain *
 	 * or we hit an area that isn't mapped.
 	 */
 	while (unmapped < size) {
-		size_t pgsize = iommu_pgsize(domain, iova, size - unmapped);
+		size_t left = size - unmapped;
 
-		unmapped_page = domain->ops->unmap(domain, iova, pgsize);
+		unmapped_page = domain->ops->unmap(domain, iova, left);
 		if (!unmapped_page)
 			break;