Hello, FYI: This patch was reviewed when it was part of another patchset: http://patchwork.ozlabs.org/project/linuxppc-dev/patch/20200817234033.442511-4-leobra...@gmail.com/
On Thu, 2021-03-18 at 14:44 -0300, Leonardo Bras wrote: > As of today, doing iommu_range_alloc() only for !largealloc (npages <= 15) > will only be able to use 3/4 of the available pages, given pages on > largepool not being available for !largealloc. > > This could mean some drivers not being able to fully use all the available > pages for the DMA window. > > Add pages on largepool as a last resort for !largealloc, making all pages > of the DMA window available. > > Signed-off-by: Leonardo Bras <leobra...@gmail.com> > Reviewed-by: Alexey Kardashevskiy <a...@ozlabs.ru> > --- > arch/powerpc/kernel/iommu.c | 9 +++++++++ > 1 file changed, 9 insertions(+) > > diff --git a/arch/powerpc/kernel/iommu.c b/arch/powerpc/kernel/iommu.c > index 3329ef045805..ae6ad8dca605 100644 > --- a/arch/powerpc/kernel/iommu.c > +++ b/arch/powerpc/kernel/iommu.c > @@ -255,6 +255,15 @@ static unsigned long iommu_range_alloc(struct device > *dev, > pass++; > goto again; > > > + } else if (pass == tbl->nr_pools + 1) { > + /* Last resort: try largepool */ > + spin_unlock(&pool->lock); > + pool = &tbl->large_pool; > + spin_lock(&pool->lock); > + pool->hint = pool->start; > + pass++; > + goto again; > + > } else { > /* Give up */ > spin_unlock_irqrestore(&(pool->lock), flags);