summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gcip-kernel-driver/drivers/gcip/gcip-iommu.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/gcip-kernel-driver/drivers/gcip/gcip-iommu.c b/gcip-kernel-driver/drivers/gcip/gcip-iommu.c
index 2e0dac6..979eb86 100644
--- a/gcip-kernel-driver/drivers/gcip/gcip-iommu.c
+++ b/gcip-kernel-driver/drivers/gcip/gcip-iommu.c
@@ -102,7 +102,12 @@ static dma_addr_t iovad_alloc_iova_space(struct gcip_iommu_domain *domain, size_
{
unsigned long iova, shift = gcip_iommu_domain_shift(domain);
- iova = alloc_iova_fast(&domain->iova_space.iovad, size >> shift,
+ size = size >> shift;
+
+ if (size < (1 << (IOVA_RANGE_CACHE_MAX_SIZE - 1)))
+ size = roundup_pow_of_two(size);
+
+ iova = alloc_iova_fast(&domain->iova_space.iovad, size,
domain->domain_pool->last_daddr >> shift, true);
return (dma_addr_t)iova << shift;