* [PATCH 1/4] drm/ttm: add page order in page pool
@ 2017-11-22 5:36 Roger He
2017-11-22 5:36 ` [PATCH 2/4] drm/ttm: add page order support in ttm_pages_put Roger He
[not found] ` <1511329016-552-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
0 siblings, 2 replies; 10+ 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] 10+ messages in thread* [PATCH 2/4] drm/ttm: add page order support in ttm_pages_put 2017-11-22 5:36 [PATCH 1/4] drm/ttm: add page order in page pool Roger He @ 2017-11-22 5:36 ` Roger He [not found] ` <1511329016-552-2-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org> [not found] ` <1511329016-552-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org> 1 sibling, 1 reply; 10+ messages in thread From: Roger He @ 2017-11-22 5:36 UTC (permalink / raw) To: amd-gfx, dri-devel; +Cc: Roger He, Christian.Koenig 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 0a0c653..de64209 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; + struct page *p; + 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 > 0) { + 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] 10+ messages in thread
[parent not found: <1511329016-552-2-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>]
* Re: [PATCH 2/4] drm/ttm: add page order support in ttm_pages_put [not found] ` <1511329016-552-2-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org> @ 2017-11-22 9:29 ` Christian König [not found] ` <b6c683f7-0fda-e6cd-f1d4-6037c889eca6-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> 0 siblings, 1 reply; 10+ messages in thread From: Christian König @ 2017-11-22 9:29 UTC (permalink / raw) To: Roger He, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW Cc: Christian.Koenig-5C7GfCeVMHo I would rather completely nuke ttm_pages_put() instead of coming up with more workarounds here. Going to provide a cleanup patch to show what I mean, just give me a minute. Regards, Christian. Am 22.11.2017 um 06:36 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 0a0c653..de64209 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; > + struct page *p; > + 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 > 0) { > + 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] 10+ messages in thread
[parent not found: <b6c683f7-0fda-e6cd-f1d4-6037c889eca6-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>]
* RE: [PATCH 2/4] drm/ttm: add page order support in ttm_pages_put [not found] ` <b6c683f7-0fda-e6cd-f1d4-6037c889eca6-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> @ 2017-11-22 9:48 ` He, Roger 0 siblings, 0 replies; 10+ messages in thread From: He, Roger @ 2017-11-22 9:48 UTC (permalink / raw) To: Koenig, Christian, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Hi Christian: This is old patch, I already send new patches. And it is clean and simple. Please check that. Thanks Roger(Hongbo.He) -----Original Message----- From: Christian König [mailto:ckoenig.leichtzumerken@gmail.com] Sent: Wednesday, November 22, 2017 5:29 PM To: He, Roger <Hongbo.He@amd.com>; amd-gfx@lists.freedesktop.org; dri-devel@lists.freedesktop.org Cc: Koenig, Christian <Christian.Koenig@amd.com> Subject: Re: [PATCH 2/4] drm/ttm: add page order support in ttm_pages_put I would rather completely nuke ttm_pages_put() instead of coming up with more workarounds here. Going to provide a cleanup patch to show what I mean, just give me a minute. Regards, Christian. Am 22.11.2017 um 06:36 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 0a0c653..de64209 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; > + struct page *p; > + 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 > 0) { > + 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] 10+ messages in thread
[parent not found: <1511329016-552-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>]
* [PATCH 3/4] drm/ttm: add static buffer for ttm_pages_put to support pool shrink [not found] ` <1511329016-552-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org> @ 2017-11-22 5:36 ` Roger He 2017-11-22 5:36 ` [PATCH 4/4] drm/ttm: free one in huge pool even shrink request less than one element Roger He ` (2 subsequent siblings) 3 siblings, 0 replies; 10+ 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 Change-Id: Ic20c016eb3043d7cfedc2e3648790a017168da6c Signed-off-by: Roger He <Hongbo.He@amd.com> --- drivers/gpu/drm/ttm/ttm_page_alloc.c | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c index de64209..37c2f2f 100644 --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c @@ -285,20 +285,27 @@ static struct ttm_page_pool *ttm_get_pool(int flags, bool huge, } /* set memory back to wb and free the pages. */ +#define STATIC_BUF_PUT_SIZE 512 static void ttm_pages_put(struct page *pages[], unsigned npages, - unsigned int order) + unsigned int order, bool use_static) { + static struct page *static_buf_put[STATIC_BUF_PUT_SIZE]; struct page **pages_to_free = NULL; struct page **pages_array; struct page *p; unsigned int i, j, pages_nr = (1 << order); + BUG_ON(use_static && pages_nr > STATIC_BUF_PUT_SIZE); 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; + if (use_static) + pages_to_free = static_buf_put; + else { + 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; + } } } @@ -317,7 +324,8 @@ static void ttm_pages_put(struct page *pages[], unsigned npages, __free_pages(pages[i], order); } - kfree(pages_to_free); + if (!use_static) + kfree(pages_to_free); } static void ttm_pool_update_free_locked(struct ttm_page_pool *pool, @@ -380,7 +388,8 @@ 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, pool->order); + ttm_pages_put(pages_to_free, freed_pages, pool->order, + use_static); if (likely(nr_free != FREE_ALL_PAGES)) nr_free -= freed_pages; @@ -415,7 +424,8 @@ 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, pool->order); + ttm_pages_put(pages_to_free, freed_pages, pool->order, + use_static); 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] 10+ messages in thread
* [PATCH 4/4] drm/ttm: free one in huge pool even shrink request less than one element [not found] ` <1511329016-552-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org> 2017-11-22 5:36 ` [PATCH 3/4] drm/ttm: add static buffer for ttm_pages_put to support pool shrink Roger He @ 2017-11-22 5:36 ` Roger He 2017-11-22 6:38 ` [PATCH 1/4] drm/ttm: add page order in page pool Chunming Zhou 2017-11-22 7:47 ` Christian König 3 siblings, 0 replies; 10+ 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 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 37c2f2f..f80fc5b 100644 --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c @@ -463,11 +463,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] 10+ 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 5:36 ` [PATCH 3/4] drm/ttm: add static buffer for ttm_pages_put to support pool shrink Roger He 2017-11-22 5:36 ` [PATCH 4/4] drm/ttm: free one in huge pool even shrink request less than one element Roger He @ 2017-11-22 6:38 ` Chunming Zhou 2017-11-22 7:47 ` Christian König 3 siblings, 0 replies; 10+ 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] 10+ 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> ` (2 preceding siblings ...) 2017-11-22 6:38 ` [PATCH 1/4] drm/ttm: add page order in page pool Chunming Zhou @ 2017-11-22 7:47 ` Christian König [not found] ` <6c134a88-2322-b131-d79f-0e5e3b74cd17-5C7GfCeVMHo@public.gmane.org> 3 siblings, 1 reply; 10+ 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] 10+ messages in thread
[parent not found: <6c134a88-2322-b131-d79f-0e5e3b74cd17-5C7GfCeVMHo@public.gmane.org>]
* 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; 10+ messages in thread From: He, Roger @ 2017-11-22 8:10 UTC (permalink / raw) To: Koenig, Christian, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org -----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] 10+ messages in thread
* [PATCH 0/4] *** fix memory leak for HUGE PAGE ***
@ 2017-11-21 9:32 Roger He
[not found] ` <1511256742-5601-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
0 siblings, 1 reply; 10+ 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] 10+ messages in thread[parent not found: <1511256742-5601-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>]
* [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; 10+ 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] 10+ messages in thread
end of thread, other threads:[~2017-11-22 9:48 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2017-11-22 5:36 [PATCH 1/4] drm/ttm: add page order in page pool Roger He
2017-11-22 5:36 ` [PATCH 2/4] drm/ttm: add page order support in ttm_pages_put Roger He
[not found] ` <1511329016-552-2-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
2017-11-22 9:29 ` Christian König
[not found] ` <b6c683f7-0fda-e6cd-f1d4-6037c889eca6-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-11-22 9:48 ` He, Roger
[not found] ` <1511329016-552-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
2017-11-22 5:36 ` [PATCH 3/4] drm/ttm: add static buffer for ttm_pages_put to support pool shrink Roger He
2017-11-22 5:36 ` [PATCH 4/4] drm/ttm: free one in huge pool even shrink request less than one element Roger He
2017-11-22 6:38 ` [PATCH 1/4] drm/ttm: add page order in page pool 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
-- strict thread matches above, loose matches on Subject: below --
2017-11-21 9:32 [PATCH 0/4] *** fix memory leak for HUGE PAGE *** Roger He
[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
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox