Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/ttm: Don't count pages in SG BOs against pages_limit

Pages in SG BOs were not allocated by TTM. So don't count them against
TTM's pages limit.

Signed-off-by: Felix Kuehling <Felix.Kuehling@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Christian König <christian.koenig@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210414064804.29356-9-Felix.Kuehling@amd.com

authored by

Felix Kuehling and committed by
Christian König
a4394b6d 8a9d24f2

+18 -9
+18 -9
drivers/gpu/drm/ttm/ttm_tt.c
··· 317 317 if (ttm_tt_is_populated(ttm)) 318 318 return 0; 319 319 320 - atomic_long_add(ttm->num_pages, &ttm_pages_allocated); 321 - if (bdev->pool.use_dma32) 322 - atomic_long_add(ttm->num_pages, &ttm_dma32_pages_allocated); 320 + if (!(ttm->page_flags & TTM_PAGE_FLAG_SG)) { 321 + atomic_long_add(ttm->num_pages, &ttm_pages_allocated); 322 + if (bdev->pool.use_dma32) 323 + atomic_long_add(ttm->num_pages, 324 + &ttm_dma32_pages_allocated); 325 + } 323 326 324 327 while (atomic_long_read(&ttm_pages_allocated) > ttm_pages_limit || 325 328 atomic_long_read(&ttm_dma32_pages_allocated) > ··· 353 350 return 0; 354 351 355 352 error: 356 - atomic_long_sub(ttm->num_pages, &ttm_pages_allocated); 357 - if (bdev->pool.use_dma32) 358 - atomic_long_sub(ttm->num_pages, &ttm_dma32_pages_allocated); 353 + if (!(ttm->page_flags & TTM_PAGE_FLAG_SG)) { 354 + atomic_long_sub(ttm->num_pages, &ttm_pages_allocated); 355 + if (bdev->pool.use_dma32) 356 + atomic_long_sub(ttm->num_pages, 357 + &ttm_dma32_pages_allocated); 358 + } 359 359 return ret; 360 360 } 361 361 EXPORT_SYMBOL(ttm_tt_populate); ··· 388 382 else 389 383 ttm_pool_free(&bdev->pool, ttm); 390 384 391 - atomic_long_sub(ttm->num_pages, &ttm_pages_allocated); 392 - if (bdev->pool.use_dma32) 393 - atomic_long_sub(ttm->num_pages, &ttm_dma32_pages_allocated); 385 + if (!(ttm->page_flags & TTM_PAGE_FLAG_SG)) { 386 + atomic_long_sub(ttm->num_pages, &ttm_pages_allocated); 387 + if (bdev->pool.use_dma32) 388 + atomic_long_sub(ttm->num_pages, 389 + &ttm_dma32_pages_allocated); 390 + } 394 391 395 392 ttm->page_flags &= ~TTM_PAGE_FLAG_PRIV_POPULATED; 396 393 }