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

drm/ttm: roundup the shrink request to prevent skip huge pool

e.g. shrink reqeust is less than 512, the logic will skip huge pool

Reviewed-by: Chunming Zhou <david1.zhou@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Roger He <Hongbo.He@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>

authored by

Roger He and committed by
Alex Deucher
1bfcbad1 444f8ef3

+7 -5
+7 -5
drivers/gpu/drm/ttm/ttm_page_alloc.c
··· 442 442 /* select start pool in round robin fashion */ 443 443 for (i = 0; i < NUM_POOLS; ++i) { 444 444 unsigned nr_free = shrink_pages; 445 + unsigned page_nr; 446 + 445 447 if (shrink_pages == 0) 446 448 break; 447 449 448 450 pool = &_manager->pools[(i + pool_offset)%NUM_POOLS]; 451 + page_nr = (1 << pool->order); 449 452 /* OK to use static buffer since global mutex is held. */ 450 - nr_free_pool = (nr_free >> pool->order); 451 - if (nr_free_pool == 0) 452 - continue; 453 - 453 + nr_free_pool = roundup(nr_free, page_nr) >> pool->order; 454 454 shrink_pages = ttm_page_pool_free(pool, nr_free_pool, true); 455 - freed += ((nr_free_pool - shrink_pages) << pool->order); 455 + freed += (nr_free_pool - shrink_pages) << pool->order; 456 + if (freed >= sc->nr_to_scan) 457 + break; 456 458 } 457 459 mutex_unlock(&lock); 458 460 return freed;