From: Maarten Lankhorst <[email protected]>

This adds support for memcg accounting to ttm object used by xe driver.

Signed-off-by: Maarten Lankhorst <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
---
 drivers/gpu/drm/xe/xe_bo.c  | 10 +++++++---
 drivers/gpu/drm/xe/xe_bo.h  |  1 +
 drivers/gpu/drm/xe/xe_lrc.c |  3 ++-
 drivers/gpu/drm/xe/xe_oa.c  |  3 ++-
 drivers/gpu/drm/xe/xe_pt.c  |  3 ++-
 5 files changed, 14 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/xe/xe_bo.c b/drivers/gpu/drm/xe/xe_bo.c
index fae2d738ecd2..44ad97b7e0c1 100644
--- a/drivers/gpu/drm/xe/xe_bo.c
+++ b/drivers/gpu/drm/xe/xe_bo.c
@@ -56,6 +56,7 @@ static const struct ttm_place sys_placement_flags = {
        .flags = 0,
 };
 
+/* TTM_PL_FLAG_MEMCG is not set, those placements are used for eviction */
 static struct ttm_placement sys_placement = {
        .num_placement = 1,
        .placement = &sys_placement_flags,
@@ -194,8 +195,8 @@ static void try_add_system(struct xe_device *xe, struct 
xe_bo *bo,
 
                bo->placements[*c] = (struct ttm_place) {
                        .mem_type = XE_PL_TT,
-                       .flags = (bo_flags & XE_BO_FLAG_VRAM_MASK) ?
-                       TTM_PL_FLAG_FALLBACK : 0,
+                       .flags = TTM_PL_FLAG_MEMCG | ((bo_flags & 
XE_BO_FLAG_VRAM_MASK) ?
+                       TTM_PL_FLAG_FALLBACK : 0),
                };
                *c += 1;
        }
@@ -2216,6 +2217,9 @@ struct xe_bo *xe_bo_init_locked(struct xe_device *xe, 
struct xe_bo *bo,
        placement = (type == ttm_bo_type_sg ||
                     bo->flags & XE_BO_FLAG_DEFER_BACKING) ? &sys_placement :
                &bo->placement;
+
+       if (bo->flags & XE_BO_FLAG_ACCOUNTED)
+               ttm_bo_set_cgroup(&bo->ttm, get_obj_cgroup_from_current());
        err = ttm_bo_init_reserved(&xe->ttm, &bo->ttm, type,
                                   placement, alignment,
                                   &ctx, NULL, resv, xe_ttm_bo_destroy);
@@ -3193,7 +3197,7 @@ int xe_gem_create_ioctl(struct drm_device *dev, void 
*data,
        if (XE_IOCTL_DBG(xe, args->size & ~PAGE_MASK))
                return -EINVAL;
 
-       bo_flags = 0;
+       bo_flags = XE_BO_FLAG_ACCOUNTED;
        if (args->flags & DRM_XE_GEM_CREATE_FLAG_DEFER_BACKING)
                bo_flags |= XE_BO_FLAG_DEFER_BACKING;
 
diff --git a/drivers/gpu/drm/xe/xe_bo.h b/drivers/gpu/drm/xe/xe_bo.h
index c914ab719f20..2c2a93d018fe 100644
--- a/drivers/gpu/drm/xe/xe_bo.h
+++ b/drivers/gpu/drm/xe/xe_bo.h
@@ -52,6 +52,7 @@
 #define XE_BO_FLAG_CPU_ADDR_MIRROR     BIT(24)
 #define XE_BO_FLAG_FORCE_USER_VRAM     BIT(25)
 #define XE_BO_FLAG_NO_COMPRESSION      BIT(26)
+#define XE_BO_FLAG_ACCOUNTED           BIT(27)
 
 /* this one is trigger internally only */
 #define XE_BO_FLAG_INTERNAL_TEST       BIT(30)
diff --git a/drivers/gpu/drm/xe/xe_lrc.c b/drivers/gpu/drm/xe/xe_lrc.c
index b0f037bc227f..e4f2d6db18b3 100644
--- a/drivers/gpu/drm/xe/xe_lrc.c
+++ b/drivers/gpu/drm/xe/xe_lrc.c
@@ -1466,7 +1466,8 @@ static int xe_lrc_init(struct xe_lrc *lrc, struct 
xe_hw_engine *hwe,
                   XE_BO_FLAG_GGTT_INVALIDATE;
 
        if ((vm && vm->xef) || init_flags & XE_LRC_CREATE_USER_CTX) /* 
userspace */
-               bo_flags |= XE_BO_FLAG_PINNED_LATE_RESTORE | 
XE_BO_FLAG_FORCE_USER_VRAM;
+               bo_flags |= XE_BO_FLAG_PINNED_LATE_RESTORE | 
XE_BO_FLAG_FORCE_USER_VRAM |
+                           XE_BO_FLAG_ACCOUNTED;
 
        lrc->bo = xe_bo_create_pin_map_novm(xe, tile,
                                            bo_size,
diff --git a/drivers/gpu/drm/xe/xe_oa.c b/drivers/gpu/drm/xe/xe_oa.c
index 4dd3f29933cf..2606395aafdd 100644
--- a/drivers/gpu/drm/xe/xe_oa.c
+++ b/drivers/gpu/drm/xe/xe_oa.c
@@ -887,7 +887,8 @@ static int xe_oa_alloc_oa_buffer(struct xe_oa_stream 
*stream, size_t size)
 
        bo = xe_bo_create_pin_map_novm(stream->oa->xe, stream->gt->tile,
                                       size, ttm_bo_type_kernel,
-                                      XE_BO_FLAG_SYSTEM | XE_BO_FLAG_GGTT, 
false);
+                                      XE_BO_FLAG_SYSTEM | XE_BO_FLAG_GGTT |
+                                      XE_BO_FLAG_ACCOUNTED, false);
        if (IS_ERR(bo))
                return PTR_ERR(bo);
 
diff --git a/drivers/gpu/drm/xe/xe_pt.c b/drivers/gpu/drm/xe/xe_pt.c
index 13b355fadd58..c1157dd56923 100644
--- a/drivers/gpu/drm/xe/xe_pt.c
+++ b/drivers/gpu/drm/xe/xe_pt.c
@@ -122,7 +122,8 @@ struct xe_pt *xe_pt_create(struct xe_vm *vm, struct xe_tile 
*tile,
                   XE_BO_FLAG_IGNORE_MIN_PAGE_SIZE |
                   XE_BO_FLAG_NO_RESV_EVICT | XE_BO_FLAG_PAGETABLE;
        if (vm->xef) /* userspace */
-               bo_flags |= XE_BO_FLAG_PINNED_LATE_RESTORE | 
XE_BO_FLAG_FORCE_USER_VRAM;
+               bo_flags |= XE_BO_FLAG_PINNED_LATE_RESTORE | 
XE_BO_FLAG_FORCE_USER_VRAM |
+                           XE_BO_FLAG_ACCOUNTED;
 
        pt->level = level;
 
-- 
2.52.0

Reply via email to