Messages in this thread | | | Subject | Re: [PATCH v1 03/10] powerpc/kernel/iommu: Use largepool as a last resort when !largealloc | From | Alexey Kardashevskiy <> | Date | Sat, 22 Aug 2020 20:09:55 +1000 |
| |
On 18/08/2020 09:40, 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 <leobras.c@gmail.com> > --- > 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 d7086087830f..7f603d4e62d4 100644 > --- a/arch/powerpc/kernel/iommu.c > +++ b/arch/powerpc/kernel/iommu.c > @@ -261,6 +261,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; > +
A nit: unnecessary new line.
Reviewed-by: Alexey Kardashevskiy <aik@ozlabs.ru>
> } else { > /* Give up */ > spin_unlock_irqrestore(&(pool->lock), flags); >
-- Alexey
| |