[PATCH] drm/ttm: fix the fix for huge compound pages
Michel Dänzer
michel at daenzer.net
Fri Oct 13 13:31:43 UTC 2017
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
More information about the dri-devel
mailing list