]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/xe: Adjust page count tracepoints in shrinker
authorMatthew Brost <matthew.brost@intel.com>
Wed, 7 Jan 2026 20:57:32 +0000 (12:57 -0800)
committerThomas Hellström <thomas.hellstrom@linux.intel.com>
Sun, 18 Jan 2026 15:54:01 +0000 (16:54 +0100)
Page accounting can change via the shrinker without calling
xe_ttm_tt_unpopulate(), which normally updates page count tracepoints
through update_global_total_pages. Add a call to
update_global_total_pages when the shrinker successfully shrinks a BO.

v2:
 - Don't adjust global accounting when pinning (Stuart)

Cc: stable@vger.kernel.org
Fixes: ce3d39fae3d3 ("drm/xe/bo: add GPU memory trace points")
Signed-off-by: Matthew Brost <matthew.brost@intel.com>
Reviewed-by: Stuart Summers <stuart.summers@intel.com>
Link: https://patch.msgid.link/20260107205732.2267541-1-matthew.brost@intel.com
(cherry picked from commit cc54eabdfbf0c5b6638edc50002cfafac1f1e18b)
Signed-off-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
drivers/gpu/drm/xe/xe_bo.c

index bf4ee976b6805fd13990c87a33cce3c16569172d..71acd45aa33b00e6143b9ce9973359fee927b5ee 100644 (file)
@@ -1055,6 +1055,7 @@ static long xe_bo_shrink_purge(struct ttm_operation_ctx *ctx,
                               unsigned long *scanned)
 {
        struct xe_device *xe = ttm_to_xe_device(bo->bdev);
+       struct ttm_tt *tt = bo->ttm;
        long lret;
 
        /* Fake move to system, without copying data. */
@@ -1079,8 +1080,10 @@ static long xe_bo_shrink_purge(struct ttm_operation_ctx *ctx,
                              .writeback = false,
                              .allow_move = false});
 
-       if (lret > 0)
+       if (lret > 0) {
                xe_ttm_tt_account_subtract(xe, bo->ttm);
+               update_global_total_pages(bo->bdev, -(long)tt->num_pages);
+       }
 
        return lret;
 }
@@ -1166,8 +1169,10 @@ long xe_bo_shrink(struct ttm_operation_ctx *ctx, struct ttm_buffer_object *bo,
        if (needs_rpm)
                xe_pm_runtime_put(xe);
 
-       if (lret > 0)
+       if (lret > 0) {
                xe_ttm_tt_account_subtract(xe, tt);
+               update_global_total_pages(bo->bdev, -(long)tt->num_pages);
+       }
 
 out_unref:
        xe_bo_put(xe_bo);