Messages in this thread Patch in this message | | | From | songqiang <> | Subject | [PATCH] drivers/gpu/drm/ttm/ttm_page_allo.c: adjust ttm pages refcount fix the bug: Feb 6 17:13:13 aaa-PC kernel: [ 466.271034] BUG: Bad page state in process blur_image pfn:7aee2 Feb 6 17:13:13 aaa-PC kernel: [ 466.271037] page:980000025fca4170 cou | Date | Wed, 7 Apr 2021 09:27:46 +0800 |
| |
Signed-off-by: songqiang <songqiang@uniontech.com> --- drivers/gpu/drm/ttm/ttm_page_alloc.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c index 14660f723f71..f3698f0ad4d7 100644 --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c @@ -736,8 +736,16 @@ static void ttm_put_pages(struct page **pages, unsigned npages, int flags, if (++p != pages[i + j]) break; - if (j == HPAGE_PMD_NR) + if (j == HPAGE_PMD_NR) { order = HPAGE_PMD_ORDER; + for (j = 1; j < HPAGE_PMD_NR; ++j) + page_ref_dec(pages[i+j]); + } } #endif @@ -868,10 +876,12 @@ static int ttm_get_pages(struct page **pages, unsigned npages, int flags, p = alloc_pages(huge_flags, HPAGE_PMD_ORDER); if (!p) break; - - for (j = 0; j < HPAGE_PMD_NR; ++j) + for (j = 0; j < HPAGE_PMD_NR; ++j) { pages[i++] = p++; - + if (j > 0) + page_ref_inc(pages[i-1]); + } npages -= HPAGE_PMD_NR; } }
| |