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

* 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: Linux Kernel Mailing List, Linux IOMMU, Geert Uytterhoeven,
	Robin Murphy, Christoph Hellwig

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);
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

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

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

On Sun, 21 Jun 2020, Guenter Roeck 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.
> 

Thanks Guenter.  Christoph, does it make sense to apply this patch since 
there may not be an artifact left behind in the kernel log on allocation 
failure by the caller?

> 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

* Re: [patch] dma-pool: warn when coherent pool is depleted
@ 2020-06-28  4:25   ` David Rientjes via iommu
  0 siblings, 0 replies; 8+ messages in thread
From: David Rientjes via iommu @ 2020-06-28  4:25 UTC (permalink / raw)
  To: Guenter Roeck
  Cc: Linux Kernel Mailing List, Linux IOMMU, Geert Uytterhoeven,
	Robin Murphy, Christoph Hellwig

On Sun, 21 Jun 2020, Guenter Roeck 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.
> 

Thanks Guenter.  Christoph, does it make sense to apply this patch since 
there may not be an artifact left behind in the kernel log on allocation 
failure by the caller?

> 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);
> 
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

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

* Re: [patch] dma-pool: warn when coherent pool is depleted
  2020-06-28  4:25   ` David Rientjes via iommu
@ 2020-06-29  8:05     ` Christoph Hellwig
  -1 siblings, 0 replies; 8+ messages in thread
From: Christoph Hellwig @ 2020-06-29  8:05 UTC (permalink / raw)
  To: David Rientjes
  Cc: Guenter Roeck, Christoph Hellwig, Geert Uytterhoeven,
	Marek Szyprowski, Robin Murphy, Linux IOMMU,
	Linux Kernel Mailing List

On Sat, Jun 27, 2020 at 09:25:21PM -0700, David Rientjes wrote:
> Thanks Guenter.  Christoph, does it make sense to apply this patch since 
> there may not be an artifact left behind in the kernel log on allocation 
> failure by the caller?

Sorry, this fell through the cracks.  I've added it to the dma-mapping
tree now.

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

* Re: [patch] dma-pool: warn when coherent pool is depleted
@ 2020-06-29  8:05     ` Christoph Hellwig
  0 siblings, 0 replies; 8+ messages in thread
From: Christoph Hellwig @ 2020-06-29  8:05 UTC (permalink / raw)
  To: David Rientjes
  Cc: Linux Kernel Mailing List, Linux IOMMU, Geert Uytterhoeven,
	Robin Murphy, Christoph Hellwig, Guenter Roeck

On Sat, Jun 27, 2020 at 09:25:21PM -0700, David Rientjes wrote:
> Thanks Guenter.  Christoph, does it make sense to apply this patch since 
> there may not be an artifact left behind in the kernel log on allocation 
> failure by the caller?

Sorry, this fell through the cracks.  I've added it to the dma-mapping
tree now.
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

^ 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

* [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 via iommu @ 2020-06-21 20:43 UTC (permalink / raw)
  To: Christoph Hellwig, Guenter Roeck
  Cc: Robin Murphy, Linux IOMMU, Geert Uytterhoeven, 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);
_______________________________________________
iommu mailing list
iommu@lists.linux-foundation.org
https://lists.linuxfoundation.org/mailman/listinfo/iommu

^ 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.