mirror of
https://github.com/torvalds/linux.git
synced 2026-05-01 04:52:32 -04:00
drm/xe: Add a shrinker for xe bos
Rather than relying on the TTM watermark accounting add a shrinker for xe_bos in TT or system memory. Leverage the newly added TTM per-page shrinking and shmem backup support. Although xe doesn't fully support WONTNEED (purgeable) bos yet, introduce and add shrinker support for purgeable ttm_tts. v2: - Cleanups bugfixes and a KUNIT shrinker test. - Add writeback support, and activate if kswapd. v3: - Move the try_shrink() helper to core TTM. - Minor cleanups. v4: - Add runtime pm for the shrinker. Shrinking may require an active device for CCS metadata copying. v5: - Separately purge ghost- and zombie objects in the shrinker. - Fix a format specifier - type inconsistency. (Kernel test robot). v7: - s/long/s64/ (Christian König) - s/sofar/progress/ (Matt Brost) v8: - Rebase on Xe KUNIT update. - Add content verifying to the shrinker kunit test. - Split out TTM changes to a separate patch. - Get rid of multiple bool arguments for clarity (Matt Brost) - Avoid an error pointer dereference (Matt Brost) - Avoid an integer overflow (Matt Auld) - Address misc review comments by Matt Brost. v9: - Fix a compliation error. - Rebase. v10: - Update to new LRU walk interface. - Rework ghost-, zombie and purged object shrinking. - Rebase. v11: - Use additional TTM helpers. - Honor __GFP_FS and __GFP_IO - Rebase. v13: - Use ttm_tt_setup_backup(). v14: - Don't set up backup on imported bos. v15: - Rebase on backup interface changes. Cc: Christian König <christian.koenig@amd.com> Cc: Somalapuram Amaranath <Amaranath.Somalapuram@amd.com> Cc: Matthew Brost <matthew.brost@intel.com> Cc: <dri-devel@lists.freedesktop.org> Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com> Reviewed-by: Matthew Brost <matthew.brost@intel.com> Acked-by: Christian König <christian.koenig@amd.com> Link: https://lore.kernel.org/intel-xe/20250305092220.123405-7-thomas.hellstrom@linux.intel.com
This commit is contained in:
@@ -514,8 +514,13 @@ static int shrink_test_run_device(struct xe_device *xe)
|
||||
* other way around, they may not be subject to swapping...
|
||||
*/
|
||||
if (alloced < purgeable) {
|
||||
xe_ttm_tt_account_subtract(&xe_tt->ttm);
|
||||
xe_tt->purgeable = true;
|
||||
xe_ttm_tt_account_add(&xe_tt->ttm);
|
||||
bo->ttm.priority = 0;
|
||||
spin_lock(&bo->ttm.bdev->lru_lock);
|
||||
ttm_bo_move_to_lru_tail(&bo->ttm);
|
||||
spin_unlock(&bo->ttm.bdev->lru_lock);
|
||||
} else {
|
||||
int ret = shrink_test_fill_random(bo, &prng, link);
|
||||
|
||||
@@ -570,7 +575,6 @@ static int shrink_test_run_device(struct xe_device *xe)
|
||||
if (ret == -EINTR)
|
||||
intr = true;
|
||||
} while (ret == -EINTR && !signal_pending(current));
|
||||
|
||||
if (!ret && !purgeable)
|
||||
failed = shrink_test_verify(test, bo, count, &prng, link);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user