* [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; 7+ 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] 7+ 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; 7+ 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] 7+ 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; 7+ 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] 7+ 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; 7+ 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] 7+ 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; 7+ 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] 7+ messages in thread
* [PATCH 1/2] drm/ttm: fix uncached page deallocation to properly fill page pool v3.
@ 2015-07-09 18:19 j.glisse
2015-07-09 18:19 ` [PATCH 2/2] drm/ttm: improve uncached page deallocation j.glisse
0 siblings, 1 reply; 7+ messages in thread
From: j.glisse @ 2015-07-09 18:19 UTC (permalink / raw)
To: dri-devel; +Cc: Jérôme Glisse, Thomas Hellstrom
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.
Changed since v1:
- Move the page batching optimization to its separate patch.
Changed since v2:
- Do not remove code part of the batching optimization with
this patch.
- Better commit message.
Signed-off-by: Jérôme Glisse <jglisse@redhat.com>
Reviewed-by: Mario Kleiner <mario.kleiner.de@gmail.com>
Reviewed-and-Tested-by: Michel Dänzer <michel.daenzer@amd.com>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Thomas Hellstrom <thellstrom@vmware.com>
---
drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 1 -
1 file changed, 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 3077f15..af23080 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
@@ -963,7 +963,6 @@ 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) {
npages = pool->npages_free - _manager->options.max_size;
/* free at least NUM_PAGES_TO_ALLOC number of pages
--
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] 7+ messages in thread* [PATCH 2/2] drm/ttm: improve uncached page deallocation.
2015-07-09 18:19 [PATCH 1/2] drm/ttm: fix uncached page deallocation to properly fill page pool v3 j.glisse
@ 2015-07-09 18:19 ` j.glisse
2015-07-09 18:28 ` Alex Deucher
0 siblings, 1 reply; 7+ messages in thread
From: j.glisse @ 2015-07-09 18:19 UTC (permalink / raw)
To: dri-devel; +Cc: Jérôme Glisse, 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>
Reviewed-and-Tested-by: Michel Dänzer <michel@daenzer.net>
Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
Cc: Thomas Hellstrom <thellstrom@vmware.com>
---
drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 12 ++++++------
1 file changed, 6 insertions(+), 6 deletions(-)
diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
index af23080..624d941 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
@@ -963,13 +963,13 @@ 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;
- /* 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] 7+ messages in thread* Re: [PATCH 2/2] drm/ttm: improve uncached page deallocation.
2015-07-09 18:19 ` [PATCH 2/2] drm/ttm: improve uncached page deallocation j.glisse
@ 2015-07-09 18:28 ` Alex Deucher
0 siblings, 0 replies; 7+ messages in thread
From: Alex Deucher @ 2015-07-09 18:28 UTC (permalink / raw)
To: Jerome Glisse
Cc: Jérôme Glisse, Thomas Hellstrom,
Maling list - DRI developers
On Thu, Jul 9, 2015 at 2:19 PM, <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>
> Reviewed-and-Tested-by: Michel Dänzer <michel@daenzer.net>
> Reviewed-by: Konrad Rzeszutek Wilk <konrad.wilk@oracle.com>
> Cc: Thomas Hellstrom <thellstrom@vmware.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
> ---
> drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> index af23080..624d941 100644
> --- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> @@ -963,13 +963,13 @@ 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;
> - /* 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
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2015-07-09 18:28 UTC | newest]
Thread overview: 7+ 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
-- strict thread matches above, loose matches on Subject: below --
2015-07-09 18:19 [PATCH 1/2] drm/ttm: fix uncached page deallocation to properly fill page pool v3 j.glisse
2015-07-09 18:19 ` [PATCH 2/2] drm/ttm: improve uncached page deallocation j.glisse
2015-07-09 18:28 ` Alex Deucher
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox