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;