All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/2] drm/ttm: fix object deallocation to properly fill in the page pool.
@ 2015-07-08 18:16 j.glisse
  2015-07-08 18:16 ` [PATCH 2/2] drm/ttm: improve uncached page deallocation j.glisse
                   ` (2 more replies)
  0 siblings, 3 replies; 5+ messages in thread
From: j.glisse @ 2015-07-08 18:16 UTC (permalink / raw)
  To: dri-devel
  Cc: Jérôme Glisse, Thomas Hellstrom, Konrad Rzeszutek Wilk

From: Jérôme Glisse <jglisse@redhat.com>

Current code never allowed the page pool to actualy fill in anyway.
This fix it, so that we only start freeing page from the pool when
we go over the pool size.

Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
Reviewed-by: Mario Kleiner <mario.kleiner.de@gmail.com>
Tested-by: Michel Dänzer <michel@daenzer.net>
Cc: Thomas Hellstrom <thellstrom@vmware.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
---
 drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 8 +-------
 1 file changed, 1 insertion(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
index c96db43..0194a93 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
@@ -953,14 +953,8 @@ void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev)
 	} else {
 		pool->npages_free += count;
 		list_splice(&ttm_dma->pages_list, &pool->free_list);
-		npages = count;
-		if (pool->npages_free > _manager->options.max_size) {
+		if (pool->npages_free > _manager->options.max_size)
 			npages = pool->npages_free - _manager->options.max_size;
-			/* free at least NUM_PAGES_TO_ALLOC number of pages
-			 * to reduce calls to set_memory_wb */
-			if (npages < NUM_PAGES_TO_ALLOC)
-				npages = NUM_PAGES_TO_ALLOC;
-		}
 	}
 	spin_unlock_irqrestore(&pool->lock, irq_flags);
 
-- 
1.8.3.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* [PATCH 2/2] drm/ttm: improve uncached page deallocation.
  2015-07-08 18:16 [PATCH 1/2] drm/ttm: fix object deallocation to properly fill in the page pool j.glisse
@ 2015-07-08 18:16 ` j.glisse
  2015-07-08 18:40   ` Konrad Rzeszutek Wilk
  2015-07-08 18:41 ` [PATCH 1/2] drm/ttm: fix object deallocation to properly fill in the page pool Konrad Rzeszutek Wilk
  2015-07-09  2:41 ` Michel Dänzer
  2 siblings, 1 reply; 5+ messages in thread
From: j.glisse @ 2015-07-08 18:16 UTC (permalink / raw)
  To: dri-devel
  Cc: Jérôme Glisse, Konrad Rzeszutek Wilk,
	Michel Dänzer, Thomas Hellstrom

From: Jérôme Glisse <jglisse@redhat.com>

Calls to set_memory_wb() incure heavy TLB flush and IPI cost. To
minimize those wait until pool grow beyond batch size before
draining the pool.

Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
Reviewed-by: Mario Kleiner <mario.kleiner.de@gmail.com>
Cc: Michel Dänzer <michel@daenzer.net>
Cc: Thomas Hellstrom <thellstrom@vmware.com>
Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
---
 drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
index 0194a93..8028dd6 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
@@ -953,7 +953,12 @@ void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev)
 	} else {
 		pool->npages_free += count;
 		list_splice(&ttm_dma->pages_list, &pool->free_list);
-		if (pool->npages_free > _manager->options.max_size)
+		/*
+		 * Wait to have at at least NUM_PAGES_TO_ALLOC number of pages
+		 * to free in order to minimize calls to set_memory_wb().
+		 */
+		if (pool->npages_free >= (_manager->options.max_size +
+					  NUM_PAGES_TO_ALLOC))
 			npages = pool->npages_free - _manager->options.max_size;
 	}
 	spin_unlock_irqrestore(&pool->lock, irq_flags);
-- 
1.8.3.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 2/2] drm/ttm: improve uncached page deallocation.
  2015-07-08 18:16 ` [PATCH 2/2] drm/ttm: improve uncached page deallocation j.glisse
@ 2015-07-08 18:40   ` Konrad Rzeszutek Wilk
  0 siblings, 0 replies; 5+ messages in thread
From: Konrad Rzeszutek Wilk @ 2015-07-08 18:40 UTC (permalink / raw)
  To: j.glisse
  Cc: Jérôme Glisse, Michel Dänzer, dri-devel,
	Thomas Hellstrom

On Wed, Jul 08, 2015 at 02:16:37PM -0400, j.glisse@gmail.com wrote:
> From: Jérôme Glisse <jglisse@redhat.com>
> 
> Calls to set_memory_wb() incure heavy TLB flush and IPI cost. To
> minimize those wait until pool grow beyond batch size before
> draining the pool.
> 
> Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
> Reviewed-by: Mario Kleiner <mario.kleiner.de@gmail.com>
> Cc: Michel Dänzer <michel@daenzer.net>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> ---
>  drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> index 0194a93..8028dd6 100644
> --- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> @@ -953,7 +953,12 @@ void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev)
>  	} else {
>  		pool->npages_free += count;
>  		list_splice(&ttm_dma->pages_list, &pool->free_list);
> -		if (pool->npages_free > _manager->options.max_size)
> +		/*
> +		 * Wait to have at at least NUM_PAGES_TO_ALLOC number of pages
> +		 * to free in order to minimize calls to set_memory_wb().
> +		 */
> +		if (pool->npages_free >= (_manager->options.max_size +
> +					  NUM_PAGES_TO_ALLOC))
>  			npages = pool->npages_free - _manager->options.max_size;
>  	}
>  	spin_unlock_irqrestore(&pool->lock, irq_flags);
> -- 
> 1.8.3.1
> 
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 1/2] drm/ttm: fix object deallocation to properly fill in the page pool.
  2015-07-08 18:16 [PATCH 1/2] drm/ttm: fix object deallocation to properly fill in the page pool j.glisse
  2015-07-08 18:16 ` [PATCH 2/2] drm/ttm: improve uncached page deallocation j.glisse
@ 2015-07-08 18:41 ` Konrad Rzeszutek Wilk
  2015-07-09  2:41 ` Michel Dänzer
  2 siblings, 0 replies; 5+ messages in thread
From: Konrad Rzeszutek Wilk @ 2015-07-08 18:41 UTC (permalink / raw)
  To: j.glisse; +Cc: Jérôme Glisse, Thomas Hellstrom, dri-devel

On Wed, Jul 08, 2015 at 02:16:36PM -0400, j.glisse@gmail.com wrote:
> From: Jérôme Glisse <jglisse@redhat.com>
> 
> Current code never allowed the page pool to actualy fill in anyway.
> This fix it, so that we only start freeing page from the pool when
> we go over the pool size.
> 
> Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
> Reviewed-by: Mario Kleiner <mario.kleiner.de@gmail.com>
> Tested-by: Michel Dänzer <michel@daenzer.net>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
> Cc: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>

> ---
>  drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 8 +-------
>  1 file changed, 1 insertion(+), 7 deletions(-)
> 
> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> index c96db43..0194a93 100644
> --- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> @@ -953,14 +953,8 @@ void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev)
>  	} else {
>  		pool->npages_free += count;
>  		list_splice(&ttm_dma->pages_list, &pool->free_list);
> -		npages = count;
> -		if (pool->npages_free > _manager->options.max_size) {
> +		if (pool->npages_free > _manager->options.max_size)
>  			npages = pool->npages_free - _manager->options.max_size;
> -			/* free at least NUM_PAGES_TO_ALLOC number of pages
> -			 * to reduce calls to set_memory_wb */
> -			if (npages < NUM_PAGES_TO_ALLOC)
> -				npages = NUM_PAGES_TO_ALLOC;
> -		}
>  	}
>  	spin_unlock_irqrestore(&pool->lock, irq_flags);
>  
> -- 
> 1.8.3.1
> 
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 1/2] drm/ttm: fix object deallocation to properly fill in the page pool.
  2015-07-08 18:16 [PATCH 1/2] drm/ttm: fix object deallocation to properly fill in the page pool j.glisse
  2015-07-08 18:16 ` [PATCH 2/2] drm/ttm: improve uncached page deallocation j.glisse
  2015-07-08 18:41 ` [PATCH 1/2] drm/ttm: fix object deallocation to properly fill in the page pool Konrad Rzeszutek Wilk
@ 2015-07-09  2:41 ` Michel Dänzer
  2 siblings, 0 replies; 5+ messages in thread
From: Michel Dänzer @ 2015-07-09  2:41 UTC (permalink / raw)
  To: j.glisse, dri-devel
  Cc: Jérôme Glisse, Thomas Hellstrom, Konrad Rzeszutek Wilk

On 09.07.2015 03:16, j.glisse@gmail.com wrote:
> From: Jérôme Glisse <jglisse@redhat.com>
> 
> Current code never allowed the page pool to actualy fill in anyway.
> This fix it, so that we only start freeing page from the pool when
> we go over the pool size.
> 
> Signed-off-by: Jérôme Glisse <jglisse@redhat.com>

[...]

> -		if (pool->npages_free > _manager->options.max_size) {
> +		if (pool->npages_free > _manager->options.max_size)
>  			npages = pool->npages_free - _manager->options.max_size;
> -			/* free at least NUM_PAGES_TO_ALLOC number of pages
> -			 * to reduce calls to set_memory_wb */
> -			if (npages < NUM_PAGES_TO_ALLOC)
> -				npages = NUM_PAGES_TO_ALLOC;
> -		}

This should be part of patch 2. With that fixed, both patches are

Reviewed-and-Tested-by: Michel Dänzer <michel.daenzer@amd.com>


-- 
Earthling Michel Dänzer               |               http://www.amd.com
Libre software enthusiast             |             Mesa and X developer
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel

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

end of thread, other threads:[~2015-07-09  2:41 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-07-08 18:16 [PATCH 1/2] drm/ttm: fix object deallocation to properly fill in the page pool j.glisse
2015-07-08 18:16 ` [PATCH 2/2] drm/ttm: improve uncached page deallocation j.glisse
2015-07-08 18:40   ` Konrad Rzeszutek Wilk
2015-07-08 18:41 ` [PATCH 1/2] drm/ttm: fix object deallocation to properly fill in the page pool Konrad Rzeszutek Wilk
2015-07-09  2:41 ` Michel Dänzer

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.