All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/4] *** fix memory leak for HUGE PAGE  ***
@ 2017-11-21  9:32 Roger He
  2017-11-21  9:32 ` [PATCH 1/4] drm/ttm: add page order in page pool Roger He
                   ` (3 more replies)
  0 siblings, 4 replies; 14+ messages in thread
From: Roger He @ 2017-11-21  9:32 UTC (permalink / raw)
  To: amd-gfx, dri-devel; +Cc: Roger He

1. add page order into pool to support gtt huge page
2. add page order support when ttm pages put
3. update memory shrinker with order handling


Roger He (4):
  drm/ttm: add page order in page pool
  drm/ttm: use NUM_PAGES_TO_ALLOC always
  drm/ttm: add page order support in ttm_pages_put
  drm/ttm: free one in huge pool even shrink request less than one
    element

 drivers/gpu/drm/ttm/ttm_page_alloc.c | 80 ++++++++++++++++++++++++++----------
 1 file changed, 59 insertions(+), 21 deletions(-)

-- 
2.7.4

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

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

* [PATCH 1/4] drm/ttm: add page order in page pool
  2017-11-21  9:32 [PATCH 0/4] *** fix memory leak for HUGE PAGE *** Roger He
@ 2017-11-21  9:32 ` Roger He
  2017-11-21  9:52   ` Christian König
                     ` (2 more replies)
  2017-11-21  9:32 ` [PATCH 2/4] drm/ttm: use NUM_PAGES_TO_ALLOC always Roger He
                   ` (2 subsequent siblings)
  3 siblings, 3 replies; 14+ messages in thread
From: Roger He @ 2017-11-21  9:32 UTC (permalink / raw)
  To: amd-gfx, dri-devel; +Cc: Roger He

to indicate page order for each element in the pool

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

diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
index 316f831..2b83c52 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
@@ -81,6 +81,7 @@ struct ttm_page_pool {
 	char			*name;
 	unsigned long		nfrees;
 	unsigned long		nrefills;
+	unsigned int		order;
 };
 
 /**
@@ -412,6 +413,7 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
 	struct ttm_page_pool *pool;
 	int shrink_pages = sc->nr_to_scan;
 	unsigned long freed = 0;
+	unsigned int nr_free_pool;
 
 	if (!mutex_trylock(&lock))
 		return SHRINK_STOP;
@@ -421,10 +423,15 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
 		unsigned nr_free = shrink_pages;
 		if (shrink_pages == 0)
 			break;
+
 		pool = &_manager->pools[(i + pool_offset)%NUM_POOLS];
 		/* OK to use static buffer since global mutex is held. */
-		shrink_pages = ttm_page_pool_free(pool, nr_free, true);
-		freed += nr_free - shrink_pages;
+		nr_free_pool = (nr_free >> pool->order);
+		if (nr_free_pool == 0)
+			continue;
+
+		shrink_pages = ttm_page_pool_free(pool, nr_free_pool, true);
+		freed += ((nr_free_pool - shrink_pages) << pool->order);
 	}
 	mutex_unlock(&lock);
 	return freed;
@@ -436,9 +443,12 @@ ttm_pool_shrink_count(struct shrinker *shrink, struct shrink_control *sc)
 {
 	unsigned i;
 	unsigned long count = 0;
+	struct ttm_page_pool *pool;
 
-	for (i = 0; i < NUM_POOLS; ++i)
-		count += _manager->pools[i].npages;
+	for (i = 0; i < NUM_POOLS; ++i) {
+		pool = &_manager->pools[i];
+		count += (pool->npages << pool->order);
+	}
 
 	return count;
 }
@@ -933,7 +943,7 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags,
 }
 
 static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags,
-		char *name)
+		char *name, unsigned int order)
 {
 	spin_lock_init(&pool->lock);
 	pool->fill_lock = false;
@@ -941,6 +951,7 @@ static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags,
 	pool->npages = pool->nfrees = 0;
 	pool->gfp_flags = flags;
 	pool->name = name;
+	pool->order = order;
 }
 
 int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
@@ -953,23 +964,23 @@ int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
 
 	_manager = kzalloc(sizeof(*_manager), GFP_KERNEL);
 
-	ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc");
+	ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc", 0);
 
-	ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc");
+	ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc", 0);
 
 	ttm_page_pool_init_locked(&_manager->wc_pool_dma32,
-				  GFP_USER | GFP_DMA32, "wc dma");
+				  GFP_USER | GFP_DMA32, "wc dma", 0);
 
 	ttm_page_pool_init_locked(&_manager->uc_pool_dma32,
-				  GFP_USER | GFP_DMA32, "uc dma");
+				  GFP_USER | GFP_DMA32, "uc dma", 0);
 
 	ttm_page_pool_init_locked(&_manager->wc_pool_huge,
 				  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP),
-				  "wc huge");
+				  "wc huge", HPAGE_PMD_ORDER);
 
 	ttm_page_pool_init_locked(&_manager->uc_pool_huge,
 				  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP)
-				  , "uc huge");
+				  , "uc huge", HPAGE_PMD_ORDER);
 
 	_manager->options.max_size = max_pages;
 	_manager->options.small = SMALL_ALLOCATION;
-- 
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] 14+ messages in thread

* [PATCH 2/4] drm/ttm: use NUM_PAGES_TO_ALLOC always
  2017-11-21  9:32 [PATCH 0/4] *** fix memory leak for HUGE PAGE *** Roger He
  2017-11-21  9:32 ` [PATCH 1/4] drm/ttm: add page order in page pool Roger He
@ 2017-11-21  9:32 ` Roger He
       [not found]   ` <1511256742-5601-3-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
  2017-11-21  9:32 ` [PATCH 3/4] drm/ttm: add page order support in ttm_pages_put Roger He
       [not found] ` <1511256742-5601-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
  3 siblings, 1 reply; 14+ messages in thread
From: Roger He @ 2017-11-21  9:32 UTC (permalink / raw)
  To: amd-gfx, dri-devel; +Cc: Roger He

Change-Id: Ide96a1ccad9bb44b0bb0d80e123c2d810ba618ed
Signed-off-by: Roger He <Hongbo.He@amd.com>
---
 drivers/gpu/drm/ttm/ttm_page_alloc.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
index 2b83c52..27b2402 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
@@ -520,8 +520,7 @@ static int ttm_alloc_new_pages(struct list_head *pages, gfp_t gfp_flags,
 	int r = 0;
 	unsigned i, j, cpages;
 	unsigned npages = 1 << order;
-	unsigned max_cpages = min(count,
-			(unsigned)(PAGE_SIZE/sizeof(struct page *)));
+	unsigned max_cpages = min(count, (unsigned)NUM_PAGES_TO_ALLOC);
 
 	/* allocate array for page caching change */
 	caching_array = kmalloc(max_cpages*sizeof(struct page *), GFP_KERNEL);
-- 
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] 14+ messages in thread

* [PATCH 3/4] drm/ttm: add page order support in ttm_pages_put
  2017-11-21  9:32 [PATCH 0/4] *** fix memory leak for HUGE PAGE *** Roger He
  2017-11-21  9:32 ` [PATCH 1/4] drm/ttm: add page order in page pool Roger He
  2017-11-21  9:32 ` [PATCH 2/4] drm/ttm: use NUM_PAGES_TO_ALLOC always Roger He
@ 2017-11-21  9:32 ` Roger He
       [not found]   ` <1511256742-5601-4-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
       [not found] ` <1511256742-5601-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
  3 siblings, 1 reply; 14+ messages in thread
From: Roger He @ 2017-11-21  9:32 UTC (permalink / raw)
  To: amd-gfx, dri-devel; +Cc: Roger He

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

diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
index 27b2402..90546fd 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
@@ -285,13 +285,39 @@ 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]);
+	struct page **pages_to_free = NULL;
+	struct page **pages_array = NULL;
+	struct page *p = NULL;
+	unsigned int i, j, pages_nr = 1 << order;
+
+	if (order > 0) {
+		pages_to_free = kmalloc_array(pages_nr, sizeof(struct page *),
+					GFP_KERNEL);
+		if (!pages_to_free) {
+			pr_err("Failed to allocate memory for ttm pages put operation\n");
+			return;
+		}
+	}
+
+	for (i = 0; i < npages; ++i) {
+		if (order) {
+			p = pages[i];
+			for (j = 0; j < pages_nr; ++j)
+				pages_to_free[j] = p++;
+
+			pages_array = pages_to_free;
+		} else
+			pages_array = pages;
+
+		if (set_pages_array_wb(pages_array, pages_nr))
+			pr_err("Failed to set %d pages to wb!\n", pages_nr);
+		__free_pages(pages[i], order);
+	}
+
+	kfree(pages_to_free);
 }
 
 static void ttm_pool_update_free_locked(struct ttm_page_pool *pool,
@@ -354,7 +380,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;
 
@@ -389,7 +415,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

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

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

* [PATCH 4/4] drm/ttm: free one in huge pool even shrink request less than one element
       [not found] ` <1511256742-5601-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
@ 2017-11-21  9:32   ` Roger He
  0 siblings, 0 replies; 14+ messages in thread
From: Roger He @ 2017-11-21  9:32 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: Roger He

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

diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
index 90546fd..c194a51 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
@@ -453,11 +453,13 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
 		pool = &_manager->pools[(i + pool_offset)%NUM_POOLS];
 		/* OK to use static buffer since global mutex is held. */
 		nr_free_pool = (nr_free >> pool->order);
-		if (nr_free_pool == 0)
-			continue;
+		if (!nr_free_pool && pool->order)
+			nr_free_pool = 1;
 
 		shrink_pages = ttm_page_pool_free(pool, nr_free_pool, true);
 		freed += ((nr_free_pool - shrink_pages) << pool->order);
+		if (freed > sc->nr_to_scan)
+			break;
 	}
 	mutex_unlock(&lock);
 	return freed;
-- 
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] 14+ messages in thread

* Re: [PATCH 2/4] drm/ttm: use NUM_PAGES_TO_ALLOC always
       [not found]   ` <1511256742-5601-3-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
@ 2017-11-21  9:41     ` Christian König
  0 siblings, 0 replies; 14+ messages in thread
From: Christian König @ 2017-11-21  9:41 UTC (permalink / raw)
  To: Roger He, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Am 21.11.2017 um 10:32 schrieb Roger He:
> Change-Id: Ide96a1ccad9bb44b0bb0d80e123c2d810ba618ed
> Signed-off-by: Roger He <Hongbo.He@amd.com>

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

> ---
>   drivers/gpu/drm/ttm/ttm_page_alloc.c | 3 +--
>   1 file changed, 1 insertion(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> index 2b83c52..27b2402 100644
> --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> @@ -520,8 +520,7 @@ static int ttm_alloc_new_pages(struct list_head *pages, gfp_t gfp_flags,
>   	int r = 0;
>   	unsigned i, j, cpages;
>   	unsigned npages = 1 << order;
> -	unsigned max_cpages = min(count,
> -			(unsigned)(PAGE_SIZE/sizeof(struct page *)));
> +	unsigned max_cpages = min(count, (unsigned)NUM_PAGES_TO_ALLOC);
>   
>   	/* allocate array for page caching change */
>   	caching_array = kmalloc(max_cpages*sizeof(struct page *), GFP_KERNEL);


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

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

* Re: [PATCH 3/4] drm/ttm: add page order support in ttm_pages_put
       [not found]   ` <1511256742-5601-4-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
@ 2017-11-21  9:52     ` Christian König
  0 siblings, 0 replies; 14+ messages in thread
From: Christian König @ 2017-11-21  9:52 UTC (permalink / raw)
  To: Roger He, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Am 21.11.2017 um 10:32 schrieb Roger He:
> Change-Id: Ia55b206d95812c5afcfd6cec29f580758d1f50f0
> Signed-off-by: Roger He <Hongbo.He@amd.com>
> ---
>   drivers/gpu/drm/ttm/ttm_page_alloc.c | 42 +++++++++++++++++++++++++++++-------
>   1 file changed, 34 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> index 27b2402..90546fd 100644
> --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> @@ -285,13 +285,39 @@ 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]);
> +	struct page **pages_to_free = NULL;
> +	struct page **pages_array = NULL;
> +	struct page *p = NULL;
> +	unsigned int i, j, pages_nr = 1 << order;
> +
> +	if (order > 0) {
> +		pages_to_free = kmalloc_array(pages_nr, sizeof(struct page *),
> +					GFP_KERNEL);

We can't call kmalloc here, when this function is called by the shrinker 
we are tight on memory anyway.

That's also the reason we have this static buffer dance in 
ttm_page_pool_free() as well.

Christian.

> +		if (!pages_to_free) {
> +			pr_err("Failed to allocate memory for ttm pages put operation\n");
> +			return;
> +		}
> +	}
> +
> +	for (i = 0; i < npages; ++i) {
> +		if (order) {
> +			p = pages[i];
> +			for (j = 0; j < pages_nr; ++j)
> +				pages_to_free[j] = p++;
> +
> +			pages_array = pages_to_free;
> +		} else
> +			pages_array = pages;
> +
> +		if (set_pages_array_wb(pages_array, pages_nr))
> +			pr_err("Failed to set %d pages to wb!\n", pages_nr);
> +		__free_pages(pages[i], order);
> +	}
> +
> +	kfree(pages_to_free);
>   }
>   
>   static void ttm_pool_update_free_locked(struct ttm_page_pool *pool,
> @@ -354,7 +380,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;
>   
> @@ -389,7 +415,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);


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

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

* Re: [PATCH 1/4] drm/ttm: add page order in page pool
  2017-11-21  9:32 ` [PATCH 1/4] drm/ttm: add page order in page pool Roger He
@ 2017-11-21  9:52   ` Christian König
       [not found]   ` <1511256742-5601-2-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
  2017-11-23 21:49   ` kbuild test robot
  2 siblings, 0 replies; 14+ messages in thread
From: Christian König @ 2017-11-21  9:52 UTC (permalink / raw)
  To: Roger He, amd-gfx, dri-devel

Am 21.11.2017 um 10:32 schrieb Roger He:
> to indicate page order for each element in the pool
>
> Change-Id: Ic609925ca5d2a5d4ad49d6becf505388ce3624cf
> Signed-off-by: Roger He <Hongbo.He@amd.com>
> ---
>   drivers/gpu/drm/ttm/ttm_page_alloc.c | 33 ++++++++++++++++++++++-----------
>   1 file changed, 22 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> index 316f831..2b83c52 100644
> --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> @@ -81,6 +81,7 @@ struct ttm_page_pool {
>   	char			*name;
>   	unsigned long		nfrees;
>   	unsigned long		nrefills;
> +	unsigned int		order;
>   };
>   
>   /**
> @@ -412,6 +413,7 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
>   	struct ttm_page_pool *pool;
>   	int shrink_pages = sc->nr_to_scan;
>   	unsigned long freed = 0;
> +	unsigned int nr_free_pool;
>   
>   	if (!mutex_trylock(&lock))
>   		return SHRINK_STOP;
> @@ -421,10 +423,15 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
>   		unsigned nr_free = shrink_pages;
>   		if (shrink_pages == 0)
>   			break;
> +
>   		pool = &_manager->pools[(i + pool_offset)%NUM_POOLS];
>   		/* OK to use static buffer since global mutex is held. */
> -		shrink_pages = ttm_page_pool_free(pool, nr_free, true);
> -		freed += nr_free - shrink_pages;
> +		nr_free_pool = (nr_free >> pool->order);
> +		if (nr_free_pool == 0)
> +			continue;
> +
> +		shrink_pages = ttm_page_pool_free(pool, nr_free_pool, true);
> +		freed += ((nr_free_pool - shrink_pages) << pool->order);
>   	}
>   	mutex_unlock(&lock);
>   	return freed;
> @@ -436,9 +443,12 @@ ttm_pool_shrink_count(struct shrinker *shrink, struct shrink_control *sc)
>   {
>   	unsigned i;
>   	unsigned long count = 0;
> +	struct ttm_page_pool *pool;
>   
> -	for (i = 0; i < NUM_POOLS; ++i)
> -		count += _manager->pools[i].npages;
> +	for (i = 0; i < NUM_POOLS; ++i) {
> +		pool = &_manager->pools[i];
> +		count += (pool->npages << pool->order);
> +	}
>   
>   	return count;
>   }
> @@ -933,7 +943,7 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags,
>   }
>   
>   static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags,
> -		char *name)
> +		char *name, unsigned int order)
>   {
>   	spin_lock_init(&pool->lock);
>   	pool->fill_lock = false;
> @@ -941,6 +951,7 @@ static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags,
>   	pool->npages = pool->nfrees = 0;
>   	pool->gfp_flags = flags;
>   	pool->name = name;
> +	pool->order = order;
>   }
>   
>   int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
> @@ -953,23 +964,23 @@ int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
>   
>   	_manager = kzalloc(sizeof(*_manager), GFP_KERNEL);
>   
> -	ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc");
> +	ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc", 0);
>   
> -	ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc");
> +	ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc", 0);
>   
>   	ttm_page_pool_init_locked(&_manager->wc_pool_dma32,
> -				  GFP_USER | GFP_DMA32, "wc dma");
> +				  GFP_USER | GFP_DMA32, "wc dma", 0);
>   
>   	ttm_page_pool_init_locked(&_manager->uc_pool_dma32,
> -				  GFP_USER | GFP_DMA32, "uc dma");
> +				  GFP_USER | GFP_DMA32, "uc dma", 0);
>   
>   	ttm_page_pool_init_locked(&_manager->wc_pool_huge,
>   				  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP),
> -				  "wc huge");
> +				  "wc huge", HPAGE_PMD_ORDER);
>   
>   	ttm_page_pool_init_locked(&_manager->uc_pool_huge,
>   				  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP)
> -				  , "uc huge");
> +				  , "uc huge", HPAGE_PMD_ORDER);

HPAGE_PMD_ORDER isn't defined when huge page support isn't enabled.

That's why I avoided using this here.

Christian.

>   
>   	_manager->options.max_size = max_pages;
>   	_manager->options.small = SMALL_ALLOCATION;


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

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

* Re: [PATCH 1/4] drm/ttm: add page order in page pool
       [not found]   ` <1511256742-5601-2-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
@ 2017-11-23 20:07     ` kbuild test robot
  0 siblings, 0 replies; 14+ messages in thread
From: kbuild test robot @ 2017-11-23 20:07 UTC (permalink / raw)
  Cc: dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, Roger He,
	kbuild-all-JC7UmRfGjtg, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

[-- Attachment #1: Type: text/plain, Size: 9327 bytes --]

Hi Roger,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on drm/drm-next]
[also build test ERROR on next-20171122]
[cannot apply to v4.14]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Roger-He/drm-ttm-add-page-order-in-page-pool/20171124-032341
base:   git://people.freedesktop.org/~airlied/linux.git drm-next
config: x86_64-randconfig-x007-201747 (attached as .config)
compiler: gcc-6 (Debian 6.4.0-9) 6.4.0 20171026
reproduce:
        # save the attached .config to linux build tree
        make ARCH=x86_64 

All error/warnings (new ones prefixed by >>):

   In file included from include/uapi/linux/stddef.h:1:0,
                    from include/linux/stddef.h:4,
                    from include/uapi/linux/posix_types.h:4,
                    from include/uapi/linux/types.h:13,
                    from include/linux/types.h:5,
                    from include/linux/list.h:4,
                    from drivers/gpu/drm/ttm/ttm_page_alloc.c:36:
   drivers/gpu/drm/ttm/ttm_page_alloc.c: In function 'ttm_page_alloc_init':
>> include/linux/compiler.h:576:38: error: call to '__compiletime_assert_979' declared with attribute error: BUILD_BUG failed
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/linux/compiler.h:556:4: note: in definition of macro '__compiletime_assert'
       prefix ## suffix();    \
       ^~~~~~
   include/linux/compiler.h:576:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:46:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:80:21: note: in expansion of macro 'BUILD_BUG_ON_MSG'
    #define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed")
                        ^~~~~~~~~~~~~~~~
   include/linux/huge_mm.h:248:28: note: in expansion of macro 'BUILD_BUG'
    #define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; })
                               ^~~~~~~~~
   include/linux/huge_mm.h:78:26: note: in expansion of macro 'HPAGE_PMD_SHIFT'
    #define HPAGE_PMD_ORDER (HPAGE_PMD_SHIFT-PAGE_SHIFT)
                             ^~~~~~~~~~~~~~~
>> drivers/gpu/drm/ttm/ttm_page_alloc.c:979:18: note: in expansion of macro 'HPAGE_PMD_ORDER'
          "wc huge", HPAGE_PMD_ORDER);
                     ^~~~~~~~~~~~~~~
   include/linux/compiler.h:576:38: error: call to '__compiletime_assert_983' declared with attribute error: BUILD_BUG failed
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/linux/compiler.h:556:4: note: in definition of macro '__compiletime_assert'
       prefix ## suffix();    \
       ^~~~~~
   include/linux/compiler.h:576:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:46:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:80:21: note: in expansion of macro 'BUILD_BUG_ON_MSG'
    #define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed")
                        ^~~~~~~~~~~~~~~~
   include/linux/huge_mm.h:248:28: note: in expansion of macro 'BUILD_BUG'
    #define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; })
                               ^~~~~~~~~
   include/linux/huge_mm.h:78:26: note: in expansion of macro 'HPAGE_PMD_SHIFT'
    #define HPAGE_PMD_ORDER (HPAGE_PMD_SHIFT-PAGE_SHIFT)
                             ^~~~~~~~~~~~~~~
   drivers/gpu/drm/ttm/ttm_page_alloc.c:983:20: note: in expansion of macro 'HPAGE_PMD_ORDER'
          , "uc huge", HPAGE_PMD_ORDER);
                       ^~~~~~~~~~~~~~~
--
   In file included from include/uapi/linux/stddef.h:1:0,
                    from include/linux/stddef.h:4,
                    from include/uapi/linux/posix_types.h:4,
                    from include/uapi/linux/types.h:13,
                    from include/linux/types.h:5,
                    from include/linux/list.h:4,
                    from drivers/gpu//drm/ttm/ttm_page_alloc.c:36:
   drivers/gpu//drm/ttm/ttm_page_alloc.c: In function 'ttm_page_alloc_init':
>> include/linux/compiler.h:576:38: error: call to '__compiletime_assert_979' declared with attribute error: BUILD_BUG failed
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/linux/compiler.h:556:4: note: in definition of macro '__compiletime_assert'
       prefix ## suffix();    \
       ^~~~~~
   include/linux/compiler.h:576:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:46:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:80:21: note: in expansion of macro 'BUILD_BUG_ON_MSG'
    #define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed")
                        ^~~~~~~~~~~~~~~~
   include/linux/huge_mm.h:248:28: note: in expansion of macro 'BUILD_BUG'
    #define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; })
                               ^~~~~~~~~
   include/linux/huge_mm.h:78:26: note: in expansion of macro 'HPAGE_PMD_SHIFT'
    #define HPAGE_PMD_ORDER (HPAGE_PMD_SHIFT-PAGE_SHIFT)
                             ^~~~~~~~~~~~~~~
   drivers/gpu//drm/ttm/ttm_page_alloc.c:979:18: note: in expansion of macro 'HPAGE_PMD_ORDER'
          "wc huge", HPAGE_PMD_ORDER);
                     ^~~~~~~~~~~~~~~
   include/linux/compiler.h:576:38: error: call to '__compiletime_assert_983' declared with attribute error: BUILD_BUG failed
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
                                         ^
   include/linux/compiler.h:556:4: note: in definition of macro '__compiletime_assert'
       prefix ## suffix();    \
       ^~~~~~
   include/linux/compiler.h:576:2: note: in expansion of macro '_compiletime_assert'
     _compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
     ^~~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:46:37: note: in expansion of macro 'compiletime_assert'
    #define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
                                        ^~~~~~~~~~~~~~~~~~
   include/linux/build_bug.h:80:21: note: in expansion of macro 'BUILD_BUG_ON_MSG'
    #define BUILD_BUG() BUILD_BUG_ON_MSG(1, "BUILD_BUG failed")
                        ^~~~~~~~~~~~~~~~
   include/linux/huge_mm.h:248:28: note: in expansion of macro 'BUILD_BUG'
    #define HPAGE_PMD_SHIFT ({ BUILD_BUG(); 0; })
                               ^~~~~~~~~
   include/linux/huge_mm.h:78:26: note: in expansion of macro 'HPAGE_PMD_SHIFT'
    #define HPAGE_PMD_ORDER (HPAGE_PMD_SHIFT-PAGE_SHIFT)
                             ^~~~~~~~~~~~~~~
   drivers/gpu//drm/ttm/ttm_page_alloc.c:983:20: note: in expansion of macro 'HPAGE_PMD_ORDER'
          , "uc huge", HPAGE_PMD_ORDER);
                       ^~~~~~~~~~~~~~~

vim +/HPAGE_PMD_ORDER +979 drivers/gpu/drm/ttm/ttm_page_alloc.c

   956	
   957	int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
   958	{
   959		int ret;
   960	
   961		WARN_ON(_manager);
   962	
   963		pr_info("Initializing pool allocator\n");
   964	
   965		_manager = kzalloc(sizeof(*_manager), GFP_KERNEL);
   966	
   967		ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc", 0);
   968	
   969		ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc", 0);
   970	
   971		ttm_page_pool_init_locked(&_manager->wc_pool_dma32,
   972					  GFP_USER | GFP_DMA32, "wc dma", 0);
   973	
   974		ttm_page_pool_init_locked(&_manager->uc_pool_dma32,
   975					  GFP_USER | GFP_DMA32, "uc dma", 0);
   976	
   977		ttm_page_pool_init_locked(&_manager->wc_pool_huge,
   978					  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP),
 > 979					  "wc huge", HPAGE_PMD_ORDER);
   980	
   981		ttm_page_pool_init_locked(&_manager->uc_pool_huge,
   982					  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP)
   983					  , "uc huge", HPAGE_PMD_ORDER);
   984	
   985		_manager->options.max_size = max_pages;
   986		_manager->options.small = SMALL_ALLOCATION;
   987		_manager->options.alloc_size = NUM_PAGES_TO_ALLOC;
   988	
   989		ret = kobject_init_and_add(&_manager->kobj, &ttm_pool_kobj_type,
   990					   &glob->kobj, "pool");
   991		if (unlikely(ret != 0)) {
   992			kobject_put(&_manager->kobj);
   993			_manager = NULL;
   994			return ret;
   995		}
   996	
   997		ttm_pool_mm_shrink_init(_manager);
   998	
   999		return 0;
  1000	}
  1001	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 20237 bytes --]

[-- Attachment #3: Type: text/plain, Size: 154 bytes --]

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

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

* Re: [PATCH 1/4] drm/ttm: add page order in page pool
  2017-11-21  9:32 ` [PATCH 1/4] drm/ttm: add page order in page pool Roger He
  2017-11-21  9:52   ` Christian König
       [not found]   ` <1511256742-5601-2-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
@ 2017-11-23 21:49   ` kbuild test robot
  2 siblings, 0 replies; 14+ messages in thread
From: kbuild test robot @ 2017-11-23 21:49 UTC (permalink / raw)
  Cc: dri-devel, Roger He, kbuild-all, amd-gfx

[-- Attachment #1: Type: text/plain, Size: 2926 bytes --]

Hi Roger,

Thank you for the patch! Yet something to improve:

[auto build test ERROR on drm/drm-next]
[also build test ERROR on next-20171122]
[cannot apply to v4.14]
[if your patch is applied to the wrong git tree, please drop us a note to help improve the system]

url:    https://github.com/0day-ci/linux/commits/Roger-He/drm-ttm-add-page-order-in-page-pool/20171124-032341
base:   git://people.freedesktop.org/~airlied/linux.git drm-next
config: tile-allmodconfig (attached as .config)
compiler: tilegx-linux-gcc (GCC) 4.6.2
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        make.cross ARCH=tile 

All errors (new ones prefixed by >>):

   drivers/gpu//drm/ttm/ttm_page_alloc.c: In function 'ttm_page_alloc_init':
>> drivers/gpu//drm/ttm/ttm_page_alloc.c:979:18: error: call to '__compiletime_assert_979' declared with attribute error: BUILD_BUG failed
   drivers/gpu//drm/ttm/ttm_page_alloc.c:983:20: error: call to '__compiletime_assert_983' declared with attribute error: BUILD_BUG failed

vim +/__compiletime_assert_979 +979 drivers/gpu//drm/ttm/ttm_page_alloc.c

   956	
   957	int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
   958	{
   959		int ret;
   960	
   961		WARN_ON(_manager);
   962	
   963		pr_info("Initializing pool allocator\n");
   964	
   965		_manager = kzalloc(sizeof(*_manager), GFP_KERNEL);
   966	
   967		ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc", 0);
   968	
   969		ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc", 0);
   970	
   971		ttm_page_pool_init_locked(&_manager->wc_pool_dma32,
   972					  GFP_USER | GFP_DMA32, "wc dma", 0);
   973	
   974		ttm_page_pool_init_locked(&_manager->uc_pool_dma32,
   975					  GFP_USER | GFP_DMA32, "uc dma", 0);
   976	
   977		ttm_page_pool_init_locked(&_manager->wc_pool_huge,
   978					  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP),
 > 979					  "wc huge", HPAGE_PMD_ORDER);
   980	
   981		ttm_page_pool_init_locked(&_manager->uc_pool_huge,
   982					  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP)
   983					  , "uc huge", HPAGE_PMD_ORDER);
   984	
   985		_manager->options.max_size = max_pages;
   986		_manager->options.small = SMALL_ALLOCATION;
   987		_manager->options.alloc_size = NUM_PAGES_TO_ALLOC;
   988	
   989		ret = kobject_init_and_add(&_manager->kobj, &ttm_pool_kobj_type,
   990					   &glob->kobj, "pool");
   991		if (unlikely(ret != 0)) {
   992			kobject_put(&_manager->kobj);
   993			_manager = NULL;
   994			return ret;
   995		}
   996	
   997		ttm_pool_mm_shrink_init(_manager);
   998	
   999		return 0;
  1000	}
  1001	

---
0-DAY kernel test infrastructure                Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all                   Intel Corporation

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 50437 bytes --]

[-- Attachment #3: Type: text/plain, Size: 160 bytes --]

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

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

* RE: [PATCH 1/4] drm/ttm: add page order in page pool
       [not found]     ` <6c134a88-2322-b131-d79f-0e5e3b74cd17-5C7GfCeVMHo@public.gmane.org>
@ 2017-11-22  8:10       ` He, Roger
  0 siblings, 0 replies; 14+ messages in thread
From: He, Roger @ 2017-11-22  8:10 UTC (permalink / raw)
  To: Koenig, Christian, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW



-----Original Message-----
From: Koenig, Christian 
Sent: Wednesday, November 22, 2017 3:48 PM
To: He, Roger <Hongbo.He@amd.com>; amd-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 1/4] drm/ttm: add page order in page pool

Am 22.11.2017 um 06:36 schrieb Roger He:
> to indicate page order for each element in the pool
>
> Change-Id: Ic609925ca5d2a5d4ad49d6becf505388ce3624cf
> Signed-off-by: Roger He <Hongbo.He@amd.com>
> ---
>   drivers/gpu/drm/ttm/ttm_page_alloc.c | 42 ++++++++++++++++++++++++++----------
>   1 file changed, 31 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c 
> b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> index 72ea037..0a0c653 100644
> --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> @@ -81,6 +81,7 @@ struct ttm_page_pool {
>   	char			*name;
>   	unsigned long		nfrees;
>   	unsigned long		nrefills;
> +	unsigned int		order;
>   };
>   
>   /**
> @@ -412,6 +413,7 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
>   	struct ttm_page_pool *pool;
>   	int shrink_pages = sc->nr_to_scan;
>   	unsigned long freed = 0;
> +	unsigned int nr_free_pool;
>   
>   	if (!mutex_trylock(&lock))
>   		return SHRINK_STOP;
> @@ -421,10 +423,15 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
>   		unsigned nr_free = shrink_pages;
>   		if (shrink_pages == 0)
>   			break;
> +
>   		pool = &_manager->pools[(i + pool_offset)%NUM_POOLS];
>   		/* OK to use static buffer since global mutex is held. */
> -		shrink_pages = ttm_page_pool_free(pool, nr_free, true);
> -		freed += nr_free - shrink_pages;
> +		nr_free_pool = (nr_free >> pool->order);
> +		if (nr_free_pool == 0)
> +			continue;
> +
> +		shrink_pages = ttm_page_pool_free(pool, nr_free_pool, true);
> +		freed += ((nr_free_pool - shrink_pages) << pool->order);
>   	}
>   	mutex_unlock(&lock);
>   	return freed;
> @@ -436,9 +443,12 @@ ttm_pool_shrink_count(struct shrinker *shrink, struct shrink_control *sc)
>   {
>   	unsigned i;
>   	unsigned long count = 0;
> +	struct ttm_page_pool *pool;
>   
> -	for (i = 0; i < NUM_POOLS; ++i)
> -		count += _manager->pools[i].npages;
> +	for (i = 0; i < NUM_POOLS; ++i) {
> +		pool = &_manager->pools[i];
> +		count += (pool->npages << pool->order);
> +	}
>   
>   	return count;
>   }
> @@ -932,7 +942,7 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags,
>   }
>   
>   static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags,
> -		char *name)
> +		char *name, unsigned int order)
>   {
>   	spin_lock_init(&pool->lock);
>   	pool->fill_lock = false;
> @@ -940,8 +950,18 @@ static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags,
>   	pool->npages = pool->nfrees = 0;
>   	pool->gfp_flags = flags;
>   	pool->name = name;
> +	pool->order = order;
>   }
>   
> +/**
> + * Actually if TRANSPARENT_HUGEPAGE not enabled, we will not use
> + * wc_pool_huge and uc_pool_huge, so no matter whatever the page
> + * order are for those two pools
> + */
> +#ifndef CONFIG_TRANSPARENT_HUGEPAGE
> +#define	HPAGE_PMD_ORDER	9
> +#endif
> +

That still won't work and sorry I wasn't 100% clear in the last mail.

When CONFIG_TRANSPARENT_HUGEPAGE isn't set HPAGE_PMD_ORDER is defined as BUILD_BUG().

So you will still run into problems when that config option isn't set.

>   int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
>   {
>   	int ret;

I suggest to just handle it here like this

#ifdef CONFIG_TRANSPARENT_HUGEPAGE
     unsigned order = HPAGE_PMD_ORDER;
#else
     unsigned order = 0;
#endif

Apart from that the patch looks good to me, Christian.


Ok, going to modify it. Thanks!

Thanks
Roger(Hongbo.He)

> @@ -952,23 +972,23 @@ int ttm_page_alloc_init(struct ttm_mem_global 
> *glob, unsigned max_pages)
>   
>   	_manager = kzalloc(sizeof(*_manager), GFP_KERNEL);
>   
> -	ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc");
> +	ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc", 
> +0);
>   
> -	ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc");
> +	ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc", 
> +0);
>   
>   	ttm_page_pool_init_locked(&_manager->wc_pool_dma32,
> -				  GFP_USER | GFP_DMA32, "wc dma");
> +				  GFP_USER | GFP_DMA32, "wc dma", 0);
>   
>   	ttm_page_pool_init_locked(&_manager->uc_pool_dma32,
> -				  GFP_USER | GFP_DMA32, "uc dma");
> +				  GFP_USER | GFP_DMA32, "uc dma", 0);
>   
>   	ttm_page_pool_init_locked(&_manager->wc_pool_huge,
>   				  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP),
> -				  "wc huge");
> +				  "wc huge", HPAGE_PMD_ORDER);
>   
>   	ttm_page_pool_init_locked(&_manager->uc_pool_huge,
>   				  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP)
> -				  , "uc huge");
> +				  , "uc huge", HPAGE_PMD_ORDER);
>   
>   	_manager->options.max_size = max_pages;
>   	_manager->options.small = SMALL_ALLOCATION;


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

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

* Re: [PATCH 1/4] drm/ttm: add page order in page pool
       [not found] ` <1511329016-552-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
  2017-11-22  6:38   ` Chunming Zhou
@ 2017-11-22  7:47   ` Christian König
       [not found]     ` <6c134a88-2322-b131-d79f-0e5e3b74cd17-5C7GfCeVMHo@public.gmane.org>
  1 sibling, 1 reply; 14+ messages in thread
From: Christian König @ 2017-11-22  7:47 UTC (permalink / raw)
  To: Roger He, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW

Am 22.11.2017 um 06:36 schrieb Roger He:
> to indicate page order for each element in the pool
>
> Change-Id: Ic609925ca5d2a5d4ad49d6becf505388ce3624cf
> Signed-off-by: Roger He <Hongbo.He@amd.com>
> ---
>   drivers/gpu/drm/ttm/ttm_page_alloc.c | 42 ++++++++++++++++++++++++++----------
>   1 file changed, 31 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> index 72ea037..0a0c653 100644
> --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> @@ -81,6 +81,7 @@ struct ttm_page_pool {
>   	char			*name;
>   	unsigned long		nfrees;
>   	unsigned long		nrefills;
> +	unsigned int		order;
>   };
>   
>   /**
> @@ -412,6 +413,7 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
>   	struct ttm_page_pool *pool;
>   	int shrink_pages = sc->nr_to_scan;
>   	unsigned long freed = 0;
> +	unsigned int nr_free_pool;
>   
>   	if (!mutex_trylock(&lock))
>   		return SHRINK_STOP;
> @@ -421,10 +423,15 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
>   		unsigned nr_free = shrink_pages;
>   		if (shrink_pages == 0)
>   			break;
> +
>   		pool = &_manager->pools[(i + pool_offset)%NUM_POOLS];
>   		/* OK to use static buffer since global mutex is held. */
> -		shrink_pages = ttm_page_pool_free(pool, nr_free, true);
> -		freed += nr_free - shrink_pages;
> +		nr_free_pool = (nr_free >> pool->order);
> +		if (nr_free_pool == 0)
> +			continue;
> +
> +		shrink_pages = ttm_page_pool_free(pool, nr_free_pool, true);
> +		freed += ((nr_free_pool - shrink_pages) << pool->order);
>   	}
>   	mutex_unlock(&lock);
>   	return freed;
> @@ -436,9 +443,12 @@ ttm_pool_shrink_count(struct shrinker *shrink, struct shrink_control *sc)
>   {
>   	unsigned i;
>   	unsigned long count = 0;
> +	struct ttm_page_pool *pool;
>   
> -	for (i = 0; i < NUM_POOLS; ++i)
> -		count += _manager->pools[i].npages;
> +	for (i = 0; i < NUM_POOLS; ++i) {
> +		pool = &_manager->pools[i];
> +		count += (pool->npages << pool->order);
> +	}
>   
>   	return count;
>   }
> @@ -932,7 +942,7 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags,
>   }
>   
>   static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags,
> -		char *name)
> +		char *name, unsigned int order)
>   {
>   	spin_lock_init(&pool->lock);
>   	pool->fill_lock = false;
> @@ -940,8 +950,18 @@ static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags,
>   	pool->npages = pool->nfrees = 0;
>   	pool->gfp_flags = flags;
>   	pool->name = name;
> +	pool->order = order;
>   }
>   
> +/**
> + * Actually if TRANSPARENT_HUGEPAGE not enabled, we will not use
> + * wc_pool_huge and uc_pool_huge, so no matter whatever the page
> + * order are for those two pools
> + */
> +#ifndef CONFIG_TRANSPARENT_HUGEPAGE
> +#define	HPAGE_PMD_ORDER	9
> +#endif
> +

That still won't work and sorry I wasn't 100% clear in the last mail.

When CONFIG_TRANSPARENT_HUGEPAGE isn't set HPAGE_PMD_ORDER is defined as 
BUILD_BUG().

So you will still run into problems when that config option isn't set.

>   int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
>   {
>   	int ret;

I suggest to just handle it here like this

#ifdef CONFIG_TRANSPARENT_HUGEPAGE
     unsigned order = HPAGE_PMD_ORDER;
#else
     unsigned order = 0;
#endif

Apart from that the patch looks good to me,
Christian.

> @@ -952,23 +972,23 @@ int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
>   
>   	_manager = kzalloc(sizeof(*_manager), GFP_KERNEL);
>   
> -	ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc");
> +	ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc", 0);
>   
> -	ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc");
> +	ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc", 0);
>   
>   	ttm_page_pool_init_locked(&_manager->wc_pool_dma32,
> -				  GFP_USER | GFP_DMA32, "wc dma");
> +				  GFP_USER | GFP_DMA32, "wc dma", 0);
>   
>   	ttm_page_pool_init_locked(&_manager->uc_pool_dma32,
> -				  GFP_USER | GFP_DMA32, "uc dma");
> +				  GFP_USER | GFP_DMA32, "uc dma", 0);
>   
>   	ttm_page_pool_init_locked(&_manager->wc_pool_huge,
>   				  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP),
> -				  "wc huge");
> +				  "wc huge", HPAGE_PMD_ORDER);
>   
>   	ttm_page_pool_init_locked(&_manager->uc_pool_huge,
>   				  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP)
> -				  , "uc huge");
> +				  , "uc huge", HPAGE_PMD_ORDER);
>   
>   	_manager->options.max_size = max_pages;
>   	_manager->options.small = SMALL_ALLOCATION;


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

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

* Re: [PATCH 1/4] drm/ttm: add page order in page pool
       [not found] ` <1511329016-552-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
@ 2017-11-22  6:38   ` Chunming Zhou
  2017-11-22  7:47   ` Christian König
  1 sibling, 0 replies; 14+ messages in thread
From: Chunming Zhou @ 2017-11-22  6:38 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW



On 2017年11月22日 13:36, Roger He wrote:
> to indicate page order for each element in the pool
>
> Change-Id: Ic609925ca5d2a5d4ad49d6becf505388ce3624cf
> Signed-off-by: Roger He <Hongbo.He@amd.com>
> ---
>   drivers/gpu/drm/ttm/ttm_page_alloc.c | 42 ++++++++++++++++++++++++++----------
>   1 file changed, 31 insertions(+), 11 deletions(-)
>
> diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> index 72ea037..0a0c653 100644
> --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> @@ -81,6 +81,7 @@ struct ttm_page_pool {
>   	char			*name;
>   	unsigned long		nfrees;
>   	unsigned long		nrefills;
> +	unsigned int		order;
>   };
>   
>   /**
> @@ -412,6 +413,7 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
>   	struct ttm_page_pool *pool;
>   	int shrink_pages = sc->nr_to_scan;
>   	unsigned long freed = 0;
> +	unsigned int nr_free_pool;
>   
>   	if (!mutex_trylock(&lock))
>   		return SHRINK_STOP;
> @@ -421,10 +423,15 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
>   		unsigned nr_free = shrink_pages;
>   		if (shrink_pages == 0)
>   			break;
> +
>   		pool = &_manager->pools[(i + pool_offset)%NUM_POOLS];
>   		/* OK to use static buffer since global mutex is held. */
> -		shrink_pages = ttm_page_pool_free(pool, nr_free, true);
> -		freed += nr_free - shrink_pages;
> +		nr_free_pool = (nr_free >> pool->order);
How about nr_free_pool = roundup(nr_free >> pool->order, 1)?
  this way, your patch#4 is not need.

Regards,
David Zhou
> +		if (nr_free_pool == 0)
> +			continue;
> +
> +		shrink_pages = ttm_page_pool_free(pool, nr_free_pool, true);
> +		freed += ((nr_free_pool - shrink_pages) << pool->order);
>   	}
>   	mutex_unlock(&lock);
>   	return freed;
> @@ -436,9 +443,12 @@ ttm_pool_shrink_count(struct shrinker *shrink, struct shrink_control *sc)
>   {
>   	unsigned i;
>   	unsigned long count = 0;
> +	struct ttm_page_pool *pool;
>   
> -	for (i = 0; i < NUM_POOLS; ++i)
> -		count += _manager->pools[i].npages;
> +	for (i = 0; i < NUM_POOLS; ++i) {
> +		pool = &_manager->pools[i];
> +		count += (pool->npages << pool->order);
> +	}
>   
>   	return count;
>   }
> @@ -932,7 +942,7 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags,
>   }
>   
>   static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags,
> -		char *name)
> +		char *name, unsigned int order)
>   {
>   	spin_lock_init(&pool->lock);
>   	pool->fill_lock = false;
> @@ -940,8 +950,18 @@ static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags,
>   	pool->npages = pool->nfrees = 0;
>   	pool->gfp_flags = flags;
>   	pool->name = name;
> +	pool->order = order;
>   }
>   
> +/**
> + * Actually if TRANSPARENT_HUGEPAGE not enabled, we will not use
> + * wc_pool_huge and uc_pool_huge, so no matter whatever the page
> + * order are for those two pools
> + */
> +#ifndef CONFIG_TRANSPARENT_HUGEPAGE
> +#define	HPAGE_PMD_ORDER	9
> +#endif
> +
>   int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
>   {
>   	int ret;
> @@ -952,23 +972,23 @@ int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
>   
>   	_manager = kzalloc(sizeof(*_manager), GFP_KERNEL);
>   
> -	ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc");
> +	ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc", 0);
>   
> -	ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc");
> +	ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc", 0);
>   
>   	ttm_page_pool_init_locked(&_manager->wc_pool_dma32,
> -				  GFP_USER | GFP_DMA32, "wc dma");
> +				  GFP_USER | GFP_DMA32, "wc dma", 0);
>   
>   	ttm_page_pool_init_locked(&_manager->uc_pool_dma32,
> -				  GFP_USER | GFP_DMA32, "uc dma");
> +				  GFP_USER | GFP_DMA32, "uc dma", 0);
>   
>   	ttm_page_pool_init_locked(&_manager->wc_pool_huge,
>   				  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP),
> -				  "wc huge");
> +				  "wc huge", HPAGE_PMD_ORDER);
>   
>   	ttm_page_pool_init_locked(&_manager->uc_pool_huge,
>   				  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP)
> -				  , "uc huge");
> +				  , "uc huge", HPAGE_PMD_ORDER);
>   
>   	_manager->options.max_size = max_pages;
>   	_manager->options.small = SMALL_ALLOCATION;

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

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

* [PATCH 1/4] drm/ttm: add page order in page pool
@ 2017-11-22  5:36 Roger He
       [not found] ` <1511329016-552-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
  0 siblings, 1 reply; 14+ messages in thread
From: Roger He @ 2017-11-22  5:36 UTC (permalink / raw)
  To: amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW,
	dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW
  Cc: Roger He, Christian.Koenig-5C7GfCeVMHo

to indicate page order for each element in the pool

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

diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c
index 72ea037..0a0c653 100644
--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
+++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
@@ -81,6 +81,7 @@ struct ttm_page_pool {
 	char			*name;
 	unsigned long		nfrees;
 	unsigned long		nrefills;
+	unsigned int		order;
 };
 
 /**
@@ -412,6 +413,7 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
 	struct ttm_page_pool *pool;
 	int shrink_pages = sc->nr_to_scan;
 	unsigned long freed = 0;
+	unsigned int nr_free_pool;
 
 	if (!mutex_trylock(&lock))
 		return SHRINK_STOP;
@@ -421,10 +423,15 @@ ttm_pool_shrink_scan(struct shrinker *shrink, struct shrink_control *sc)
 		unsigned nr_free = shrink_pages;
 		if (shrink_pages == 0)
 			break;
+
 		pool = &_manager->pools[(i + pool_offset)%NUM_POOLS];
 		/* OK to use static buffer since global mutex is held. */
-		shrink_pages = ttm_page_pool_free(pool, nr_free, true);
-		freed += nr_free - shrink_pages;
+		nr_free_pool = (nr_free >> pool->order);
+		if (nr_free_pool == 0)
+			continue;
+
+		shrink_pages = ttm_page_pool_free(pool, nr_free_pool, true);
+		freed += ((nr_free_pool - shrink_pages) << pool->order);
 	}
 	mutex_unlock(&lock);
 	return freed;
@@ -436,9 +443,12 @@ ttm_pool_shrink_count(struct shrinker *shrink, struct shrink_control *sc)
 {
 	unsigned i;
 	unsigned long count = 0;
+	struct ttm_page_pool *pool;
 
-	for (i = 0; i < NUM_POOLS; ++i)
-		count += _manager->pools[i].npages;
+	for (i = 0; i < NUM_POOLS; ++i) {
+		pool = &_manager->pools[i];
+		count += (pool->npages << pool->order);
+	}
 
 	return count;
 }
@@ -932,7 +942,7 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags,
 }
 
 static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags,
-		char *name)
+		char *name, unsigned int order)
 {
 	spin_lock_init(&pool->lock);
 	pool->fill_lock = false;
@@ -940,8 +950,18 @@ static void ttm_page_pool_init_locked(struct ttm_page_pool *pool, gfp_t flags,
 	pool->npages = pool->nfrees = 0;
 	pool->gfp_flags = flags;
 	pool->name = name;
+	pool->order = order;
 }
 
+/**
+ * Actually if TRANSPARENT_HUGEPAGE not enabled, we will not use
+ * wc_pool_huge and uc_pool_huge, so no matter whatever the page
+ * order are for those two pools
+ */
+#ifndef CONFIG_TRANSPARENT_HUGEPAGE
+#define	HPAGE_PMD_ORDER	9
+#endif
+
 int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
 {
 	int ret;
@@ -952,23 +972,23 @@ int ttm_page_alloc_init(struct ttm_mem_global *glob, unsigned max_pages)
 
 	_manager = kzalloc(sizeof(*_manager), GFP_KERNEL);
 
-	ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc");
+	ttm_page_pool_init_locked(&_manager->wc_pool, GFP_HIGHUSER, "wc", 0);
 
-	ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc");
+	ttm_page_pool_init_locked(&_manager->uc_pool, GFP_HIGHUSER, "uc", 0);
 
 	ttm_page_pool_init_locked(&_manager->wc_pool_dma32,
-				  GFP_USER | GFP_DMA32, "wc dma");
+				  GFP_USER | GFP_DMA32, "wc dma", 0);
 
 	ttm_page_pool_init_locked(&_manager->uc_pool_dma32,
-				  GFP_USER | GFP_DMA32, "uc dma");
+				  GFP_USER | GFP_DMA32, "uc dma", 0);
 
 	ttm_page_pool_init_locked(&_manager->wc_pool_huge,
 				  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP),
-				  "wc huge");
+				  "wc huge", HPAGE_PMD_ORDER);
 
 	ttm_page_pool_init_locked(&_manager->uc_pool_huge,
 				  GFP_TRANSHUGE	& ~(__GFP_MOVABLE | __GFP_COMP)
-				  , "uc huge");
+				  , "uc huge", HPAGE_PMD_ORDER);
 
 	_manager->options.max_size = max_pages;
 	_manager->options.small = SMALL_ALLOCATION;
-- 
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] 14+ messages in thread

end of thread, other threads:[~2017-11-23 21:49 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-11-21  9:32 [PATCH 0/4] *** fix memory leak for HUGE PAGE *** Roger He
2017-11-21  9:32 ` [PATCH 1/4] drm/ttm: add page order in page pool Roger He
2017-11-21  9:52   ` Christian König
     [not found]   ` <1511256742-5601-2-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
2017-11-23 20:07     ` kbuild test robot
2017-11-23 21:49   ` kbuild test robot
2017-11-21  9:32 ` [PATCH 2/4] drm/ttm: use NUM_PAGES_TO_ALLOC always Roger He
     [not found]   ` <1511256742-5601-3-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
2017-11-21  9:41     ` Christian König
2017-11-21  9:32 ` [PATCH 3/4] drm/ttm: add page order support in ttm_pages_put Roger He
     [not found]   ` <1511256742-5601-4-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
2017-11-21  9:52     ` Christian König
     [not found] ` <1511256742-5601-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
2017-11-21  9:32   ` [PATCH 4/4] drm/ttm: free one in huge pool even shrink request less than one element Roger He
2017-11-22  5:36 [PATCH 1/4] drm/ttm: add page order in page pool Roger He
     [not found] ` <1511329016-552-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
2017-11-22  6:38   ` Chunming Zhou
2017-11-22  7:47   ` Christian König
     [not found]     ` <6c134a88-2322-b131-d79f-0e5e3b74cd17-5C7GfCeVMHo@public.gmane.org>
2017-11-22  8:10       ` He, Roger

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.