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 <leobra...@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 <a...@ozlabs.ru>



>               } else {
>                       /* Give up */
>                       spin_unlock_irqrestore(&(pool->lock), flags);
> 

-- 
Alexey

Reply via email to