On 12/10/17 07:30 PM, Christian König wrote: > From: Christian König <christian.koenig at amd.com> > > We don't use compound pages at the moment. Take this into account when > freeing them. > > Signed-off-by: Christian König <christian.koenig at amd.comd> > --- > drivers/gpu/drm/ttm/ttm_page_alloc.c | 21 ++++++++++++++++----- > 1 file changed, 16 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c > index b6f16e7ffff3..c3be50f41461 100644 > --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c > +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c > @@ -731,22 +731,33 @@ static void ttm_put_pages(struct page **pages, unsigned npages, int flags, > /* No pool for this memory type so free the pages */ > i = 0; > while (i < npages) { > - unsigned order; > +#ifdef CONFIG_TRANSPARENT_HUGEPAGE > + struct page *p = pages[i]; > +#endif > + unsigned order = 0, j; > > if (!pages[i]) { > ++i; > continue; > } > > +#ifdef CONFIG_TRANSPARENT_HUGEPAGE > + for (j = 0; j < HPAGE_PMD_NR; ++j) > + if (p++ != pages[i + j]) > + break; > + > + if (j == HPAGE_PMD_NR) > + order = HPAGE_PMD_ORDER; > +#endif > + > if (page_count(pages[i]) != 1) > pr_err("Erroneous page count. Leaking pages.\n"); > - order = compound_order(pages[i]); > __free_pages(pages[i], order); > > - order = 1 << order; > - while (order) { > + j = 1 << order; > + while (j) { > pages[i++] = NULL; > - --order; > + --j; > } > } > return; > Maybe the shortlog could be a better summary of what the change does, but I don't have a good suggestion, so either way Reviewed-and-Tested-by: Michel Dänzer <michel.daenzer at amd.com> Thanks Christian. -- Earthling Michel Dänzer | http://www.amd.com Libre software enthusiast | Mesa and X developer