All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [patch] dma-pool: warn when coherent pool is depleted
@ 2020-06-21 21:12 ` Guenter Roeck
  0 siblings, 0 replies; 8+ messages in thread
From: Guenter Roeck @ 2020-06-21 21:12 UTC (permalink / raw)
  To: David Rientjes
  Cc: Christoph Hellwig, Geert Uytterhoeven, Marek Szyprowski,
	Robin Murphy, Linux IOMMU, Linux Kernel Mailing List

On Sun, Jun 21, 2020 at 01:43:02PM -0700, David Rientjes wrote:
> When a DMA coherent pool is depleted, allocation failures may or may not
> get reported in the kernel log depending on the allocator.
> 
> The admin does have a workaround, however, by using coherent_pool= on the
> kernel command line.
> 
> Provide some guidance on the failure and a recommended minimum size for
> the pools (double the size).
> 
> Signed-off-by: David Rientjes <rientjes@google.com>

Tested-by: Guenter Roeck <linux@roeck-us.net>

Also confirmed that coherent_pool=256k works around the crash
I had observed.

Guenter

> ---
>  kernel/dma/pool.c | 6 +++++-
>  1 file changed, 5 insertions(+), 1 deletion(-)
> 
> diff --git a/kernel/dma/pool.c b/kernel/dma/pool.c
> --- a/kernel/dma/pool.c
> +++ b/kernel/dma/pool.c
> @@ -239,12 +239,16 @@ void *dma_alloc_from_pool(struct device *dev, size_t size,
>  	}
>  
>  	val = gen_pool_alloc(pool, size);
> -	if (val) {
> +	if (likely(val)) {
>  		phys_addr_t phys = gen_pool_virt_to_phys(pool, val);
>  
>  		*ret_page = pfn_to_page(__phys_to_pfn(phys));
>  		ptr = (void *)val;
>  		memset(ptr, 0, size);
> +	} else {
> +		WARN_ONCE(1, "DMA coherent pool depleted, increase size "
> +			     "(recommended min coherent_pool=%zuK)\n",
> +			  gen_pool_size(pool) >> 9);
>  	}
>  	if (gen_pool_avail(pool) < atomic_pool_size)
>  		schedule_work(&atomic_pool_work);

^ permalink raw reply	[flat|nested] 8+ messages in thread
* [patch] dma-pool: warn when coherent pool is depleted
@ 2020-06-21 20:43 ` David Rientjes via iommu
  0 siblings, 0 replies; 8+ messages in thread
From: David Rientjes @ 2020-06-21 20:43 UTC (permalink / raw)
  To: Christoph Hellwig, Guenter Roeck
  Cc: Geert Uytterhoeven, Marek Szyprowski, Robin Murphy, Linux IOMMU,
	Linux Kernel Mailing List

When a DMA coherent pool is depleted, allocation failures may or may not
get reported in the kernel log depending on the allocator.

The admin does have a workaround, however, by using coherent_pool= on the
kernel command line.

Provide some guidance on the failure and a recommended minimum size for
the pools (double the size).

Signed-off-by: David Rientjes <rientjes@google.com>
---
 kernel/dma/pool.c | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/kernel/dma/pool.c b/kernel/dma/pool.c
--- a/kernel/dma/pool.c
+++ b/kernel/dma/pool.c
@@ -239,12 +239,16 @@ void *dma_alloc_from_pool(struct device *dev, size_t size,
 	}
 
 	val = gen_pool_alloc(pool, size);
-	if (val) {
+	if (likely(val)) {
 		phys_addr_t phys = gen_pool_virt_to_phys(pool, val);
 
 		*ret_page = pfn_to_page(__phys_to_pfn(phys));
 		ptr = (void *)val;
 		memset(ptr, 0, size);
+	} else {
+		WARN_ONCE(1, "DMA coherent pool depleted, increase size "
+			     "(recommended min coherent_pool=%zuK)\n",
+			  gen_pool_size(pool) >> 9);
 	}
 	if (gen_pool_avail(pool) < atomic_pool_size)
 		schedule_work(&atomic_pool_work);

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-06-29 18:41 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-21 21:12 [patch] dma-pool: warn when coherent pool is depleted Guenter Roeck
2020-06-21 21:12 ` Guenter Roeck
2020-06-28  4:25 ` David Rientjes
2020-06-28  4:25   ` David Rientjes via iommu
2020-06-29  8:05   ` Christoph Hellwig
2020-06-29  8:05     ` Christoph Hellwig
  -- strict thread matches above, loose matches on Subject: below --
2020-06-21 20:43 David Rientjes
2020-06-21 20:43 ` David Rientjes via iommu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.