All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 1/3] drm/ttm: add set_pages_wb for handling page order more than zero
@ 2017-11-22 11:44 Roger He
       [not found] ` <1511351069-4757-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
                   ` (2 more replies)
  0 siblings, 3 replies; 7+ messages in thread
From: Roger He @ 2017-11-22 11:44 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: Roger He

Change-Id: Idf5ccb579d264b343199d8b8344bddeec2c0019f
Signed-off-by: Roger He <Hongbo.He@amd.com>
---
 drivers/gpu/drm/ttm/ttm_page_alloc.c | 11 +++++++++++
 1 file changed, 11 insertions(+)

diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
index a8b2bfa..cdbb731 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
@@ -223,6 +223,17 @@ static struct kobj_type ttm_pool_kobj_type = {
 static struct ttm_pool_manager *_manager;
 
 #ifndef CONFIG_X86
+static int set_pages_wb(struct page *page, int numpages)
+{
+#if IS_ENABLED(CONFIG_AGP)
+	int i;
+
+	for (i = 0; i < numpages; i++)
+		unmap_page_from_agp(page++);
+#endif
+	return 0;
+}
+
 static int set_pages_array_wb(struct page **pages, int addrinarray)
 {
 #if IS_ENABLED(CONFIG_AGP)
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

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

* [PATCH 2/3] drm/ttm: add page order support in ttm_pages_put
       [not found] ` <1511351069-4757-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
@ 2017-11-22 11:44   ` Roger He
  2017-11-22 11:50   ` [PATCH 1/3] drm/ttm: add set_pages_wb for handling page order more than zero Chris Wilson
  1 sibling, 0 replies; 7+ messages in thread
From: Roger He @ 2017-11-22 11:44 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: Roger He

Change-Id: Ia55b206d95812c5afcfd6cec29f580758d1f50f0
Signed-off-by: Roger He <Hongbo.He@amd.com>
---
 drivers/gpu/drm/ttm/ttm_page_alloc.c | 26 ++++++++++++++++++--------
 1 file changed, 18 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
index cdbb731..25b0fa5 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
@@ -296,13 +296,23 @@ static struct ttm_page_pool *ttm_get_pool(int flags, bool huge,
 }
 
 /* set memory back to wb and free the pages. */
-static void ttm_pages_put(struct page *pages[], unsigned npages)
+static void ttm_pages_put(struct page *pages[], unsigned npages,
+		unsigned int order)
 {
-	unsigned i;
-	if (set_pages_array_wb(pages, npages))
-		pr_err("Failed to set %d pages to wb!\n", npages);
-	for (i = 0; i < npages; ++i)
-		__free_page(pages[i]);
+	unsigned int i, pages_nr = (1 << order);
+
+	if (order == 0) {
+		if (set_pages_array_wb(pages, npages))
+			pr_err("Failed to set %d pages to wb!\n", npages);
+	}
+
+	for (i = 0; i < npages; ++i) {
+		if (order > 0) {
+			if (set_pages_wb(pages[i], pages_nr))
+				pr_err("Failed to set %d pages to wb!\n", pages_nr);
+		}
+		__free_pages(pages[i], order);
+	}
 }
 
 static void ttm_pool_update_free_locked(struct ttm_page_pool *pool,
@@ -365,7 +375,7 @@ static int ttm_page_pool_free(struct ttm_page_pool *pool, unsigned nr_free,
 			 */
 			spin_unlock_irqrestore(&pool->lock, irq_flags);
 
-			ttm_pages_put(pages_to_free, freed_pages);
+			ttm_pages_put(pages_to_free, freed_pages, pool->order);
 			if (likely(nr_free != FREE_ALL_PAGES))
 				nr_free -= freed_pages;
 
@@ -400,7 +410,7 @@ static int ttm_page_pool_free(struct ttm_page_pool *pool, unsigned nr_free,
 	spin_unlock_irqrestore(&pool->lock, irq_flags);
 
 	if (freed_pages)
-		ttm_pages_put(pages_to_free, freed_pages);
+		ttm_pages_put(pages_to_free, freed_pages, pool->order);
 out:
 	if (pages_to_free != static_buf)
 		kfree(pages_to_free);
-- 
2.7.4

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

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

* [PATCH 3/3] drm/ttm: roundup the shrink request to prevent skip huge pool
  2017-11-22 11:44 [PATCH 1/3] drm/ttm: add set_pages_wb for handling page order more than zero Roger He
       [not found] ` <1511351069-4757-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
@ 2017-11-22 11:44 ` Roger He
  2017-11-22 11:52   ` Chris Wilson
  2017-11-22 11:53 ` [PATCH 1/3] drm/ttm: add set_pages_wb for handling page order more than zero Christian König
  2 siblings, 1 reply; 7+ messages in thread
From: Roger He @ 2017-11-22 11:44 UTC (permalink / raw)
  To: amd-gfx, dri-devel; +Cc: Roger He

e.g. shrink reqeust is less than 512, the logic will skip huge pool

Change-Id: Id8bd4d1ecff9f3ab14355e2dbd1c59b9fe824e01
Signed-off-by: Roger He <Hongbo.He@amd.com>
---
 drivers/gpu/drm/ttm/ttm_page_alloc.c | 12 +++++++-----
 1 file changed, 7 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
index 25b0fa5..1543532 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
@@ -442,17 +442,19 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
 	/* select start pool in round robin fashion */
 	for (i = 0; i < NUM_POOLS; ++i) {
 		unsigned nr_free = shrink_pages;
+		unsigned page_nr;
+
 		if (shrink_pages == 0)
 			break;
 
 		pool = &_manager->pools[(i + pool_offset)%NUM_POOLS];
+		page_nr = (1 << pool->order);
 		/* OK to use static buffer since global mutex is held. */
-		nr_free_pool = (nr_free >> pool->order);
-		if (nr_free_pool == 0)
-			continue;
-
+		nr_free_pool = roundup(nr_free, page_nr) >> pool->order;
 		shrink_pages = ttm_page_pool_free(pool, nr_free_pool, true);
-		freed += ((nr_free_pool - shrink_pages) << pool->order);
+		freed += (nr_free_pool - shrink_pages) << pool->order;
+		if (freed >= sc->nr_to_scan)
+			break;
 	}
 	mutex_unlock(&lock);
 	return freed;
-- 
2.7.4

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

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

* Re: [PATCH 1/3] drm/ttm: add set_pages_wb for handling page order more than zero
       [not found] ` <1511351069-4757-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
  2017-11-22 11:44   ` [PATCH 2/3] drm/ttm: add page order support in ttm_pages_put Roger He
@ 2017-11-22 11:50   ` Chris Wilson
  2017-11-22 11:54     ` Christian König
  1 sibling, 1 reply; 7+ messages in thread
From: Chris Wilson @ 2017-11-22 11:50 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: Roger He

Quoting Roger He (2017-11-22 11:44:27)
> Change-Id: Idf5ccb579d264b343199d8b8344bddeec2c0019f
> Signed-off-by: Roger He <Hongbo.He@amd.com>
> ---
>  drivers/gpu/drm/ttm/ttm_page_alloc.c | 11 +++++++++++
>  1 file changed, 11 insertions(+)
> 
> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> index a8b2bfa..cdbb731 100644
> --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> @@ -223,6 +223,17 @@ static struct kobj_type ttm_pool_kobj_type = {
>  static struct ttm_pool_manager *_manager;
>  
>  #ifndef CONFIG_X86
> +static int set_pages_wb(struct page *page, int numpages)
> +{
> +#if IS_ENABLED(CONFIG_AGP)
> +       int i;
> +
> +       for (i = 0; i < numpages; i++)
> +               unmap_page_from_agp(page++);
> +#endif
> +       return 0;
> +}
> +
>  static int set_pages_array_wb(struct page **pages, int addrinarray)

Both of these are shadowing exports from arch/x86, probably not the
wisest choice of names.
-Chris
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

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

* Re: [PATCH 3/3] drm/ttm: roundup the shrink request to prevent skip huge pool
  2017-11-22 11:44 ` [PATCH 3/3] drm/ttm: roundup the shrink request to prevent skip huge pool Roger He
@ 2017-11-22 11:52   ` Chris Wilson
  0 siblings, 0 replies; 7+ messages in thread
From: Chris Wilson @ 2017-11-22 11:52 UTC (permalink / raw)
  To: amd-gfx, dri-devel; +Cc: Roger He

Quoting Roger He (2017-11-22 11:44:29)
> e.g. shrink reqeust is less than 512, the logic will skip huge pool

You should also tell the shrinker that you skipped objects so that it
knows to accumulate the request for the next pass. See
shrinkctl->nr_scanned.
-Chris
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

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

* Re: [PATCH 1/3] drm/ttm: add set_pages_wb for handling page order more than zero
  2017-11-22 11:44 [PATCH 1/3] drm/ttm: add set_pages_wb for handling page order more than zero Roger He
       [not found] ` <1511351069-4757-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
  2017-11-22 11:44 ` [PATCH 3/3] drm/ttm: roundup the shrink request to prevent skip huge pool Roger He
@ 2017-11-22 11:53 ` Christian König
  2 siblings, 0 replies; 7+ messages in thread
From: Christian König @ 2017-11-22 11:53 UTC (permalink / raw)
  To: Roger He, amd-gfx, dri-devel

Am 22.11.2017 um 12:44 schrieb Roger He:
> Change-Id: Idf5ccb579d264b343199d8b8344bddeec2c0019f
> Signed-off-by: Roger He <Hongbo.He@amd.com>

Reviewed-by: Christian König <christian.koenig@amd.com> for the whole 
series.

> ---
>   drivers/gpu/drm/ttm/ttm_page_alloc.c | 11 +++++++++++
>   1 file changed, 11 insertions(+)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> index a8b2bfa..cdbb731 100644
> --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> @@ -223,6 +223,17 @@ static struct kobj_type ttm_pool_kobj_type = {
>   static struct ttm_pool_manager *_manager;
>   
>   #ifndef CONFIG_X86
> +static int set_pages_wb(struct page *page, int numpages)
> +{
> +#if IS_ENABLED(CONFIG_AGP)
> +	int i;
> +
> +	for (i = 0; i < numpages; i++)
> +		unmap_page_from_agp(page++);
> +#endif
> +	return 0;
> +}
> +
>   static int set_pages_array_wb(struct page **pages, int addrinarray)
>   {
>   #if IS_ENABLED(CONFIG_AGP)


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

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

* Re: [PATCH 1/3] drm/ttm: add set_pages_wb for handling page order more than zero
  2017-11-22 11:50   ` [PATCH 1/3] drm/ttm: add set_pages_wb for handling page order more than zero Chris Wilson
@ 2017-11-22 11:54     ` Christian König
  0 siblings, 0 replies; 7+ messages in thread
From: Christian König @ 2017-11-22 11:54 UTC (permalink / raw)
  To: Chris Wilson, Roger He, amd-gfx, dri-devel

Am 22.11.2017 um 12:50 schrieb Chris Wilson:
> Quoting Roger He (2017-11-22 11:44:27)
>> Change-Id: Idf5ccb579d264b343199d8b8344bddeec2c0019f
>> Signed-off-by: Roger He <Hongbo.He@amd.com>
>> ---
>>   drivers/gpu/drm/ttm/ttm_page_alloc.c | 11 +++++++++++
>>   1 file changed, 11 insertions(+)
>>
>> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
>> index a8b2bfa..cdbb731 100644
>> --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
>> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
>> @@ -223,6 +223,17 @@ static struct kobj_type ttm_pool_kobj_type = {
>>   static struct ttm_pool_manager *_manager;
>>   
>>   #ifndef CONFIG_X86
>> +static int set_pages_wb(struct page *page, int numpages)
>> +{
>> +#if IS_ENABLED(CONFIG_AGP)
>> +       int i;
>> +
>> +       for (i = 0; i < numpages; i++)
>> +               unmap_page_from_agp(page++);
>> +#endif
>> +       return 0;
>> +}
>> +
>>   static int set_pages_array_wb(struct page **pages, int addrinarray)
> Both of these are shadowing exports from arch/x86, probably not the
> wisest choice of names.

That is intended, please note the "#ifndef CONFIG_X86".

Basically TTM provides the same function for other architectures that we 
have for X86.

Christian.

> -Chris
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel


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

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

end of thread, other threads:[~2017-11-22 11:54 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-22 11:44 [PATCH 1/3] drm/ttm: add set_pages_wb for handling page order more than zero Roger He
     [not found] ` <1511351069-4757-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
2017-11-22 11:44   ` [PATCH 2/3] drm/ttm: add page order support in ttm_pages_put Roger He
2017-11-22 11:50   ` [PATCH 1/3] drm/ttm: add set_pages_wb for handling page order more than zero Chris Wilson
2017-11-22 11:54     ` Christian König
2017-11-22 11:44 ` [PATCH 3/3] drm/ttm: roundup the shrink request to prevent skip huge pool Roger He
2017-11-22 11:52   ` Chris Wilson
2017-11-22 11:53 ` [PATCH 1/3] drm/ttm: add set_pages_wb for handling page order more than zero Christian König

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.