From: Tvrtko Ursulin <tvrtko.ursu...@intel.com>

To enable accounting of indirect client memory usage (such as page tables)
in the following patch, lets start recording the creator of each PPGTT.

Signed-off-by: Tvrtko Ursulin <tvrtko.ursu...@intel.com>
Reviewed-by: Aravind Iddamsetty <aravind.iddamse...@intel.com>
---
 drivers/gpu/drm/i915/gem/i915_gem_context.c       | 11 ++++++++---
 drivers/gpu/drm/i915/gem/i915_gem_context_types.h |  3 +++
 drivers/gpu/drm/i915/gem/selftests/mock_context.c |  4 ++--
 drivers/gpu/drm/i915/gt/intel_gtt.h               |  1 +
 4 files changed, 14 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context.c 
b/drivers/gpu/drm/i915/gem/i915_gem_context.c
index 9a9ff84c90d7..35cf6608180e 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_context.c
@@ -279,7 +279,8 @@ static int proto_context_set_protected(struct 
drm_i915_private *i915,
 }
 
 static struct i915_gem_proto_context *
-proto_context_create(struct drm_i915_private *i915, unsigned int flags)
+proto_context_create(struct drm_i915_file_private *fpriv,
+                    struct drm_i915_private *i915, unsigned int flags)
 {
        struct i915_gem_proto_context *pc, *err;
 
@@ -287,6 +288,7 @@ proto_context_create(struct drm_i915_private *i915, 
unsigned int flags)
        if (!pc)
                return ERR_PTR(-ENOMEM);
 
+       pc->fpriv = fpriv;
        pc->num_user_engines = -1;
        pc->user_engines = NULL;
        pc->user_flags = BIT(UCONTEXT_BANNABLE) |
@@ -1621,6 +1623,7 @@ i915_gem_create_context(struct drm_i915_private *i915,
                        err = PTR_ERR(ppgtt);
                        goto err_ctx;
                }
+               ppgtt->vm.fpriv = pc->fpriv;
                vm = &ppgtt->vm;
        }
        if (vm)
@@ -1740,7 +1743,7 @@ int i915_gem_context_open(struct drm_i915_private *i915,
        /* 0 reserved for invalid/unassigned ppgtt */
        xa_init_flags(&file_priv->vm_xa, XA_FLAGS_ALLOC1);
 
-       pc = proto_context_create(i915, 0);
+       pc = proto_context_create(file_priv, i915, 0);
        if (IS_ERR(pc)) {
                err = PTR_ERR(pc);
                goto err;
@@ -1822,6 +1825,7 @@ int i915_gem_vm_create_ioctl(struct drm_device *dev, void 
*data,
 
        GEM_BUG_ON(id == 0); /* reserved for invalid/unassigned ppgtt */
        args->vm_id = id;
+       ppgtt->vm.fpriv = file_priv;
        return 0;
 
 err_put:
@@ -2284,7 +2288,8 @@ int i915_gem_context_create_ioctl(struct drm_device *dev, 
void *data,
                return -EIO;
        }
 
-       ext_data.pc = proto_context_create(i915, args->flags);
+       ext_data.pc = proto_context_create(file->driver_priv, i915,
+                                          args->flags);
        if (IS_ERR(ext_data.pc))
                return PTR_ERR(ext_data.pc);
 
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_context_types.h 
b/drivers/gpu/drm/i915/gem/i915_gem_context_types.h
index cb78214a7dcd..c573c067779f 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_context_types.h
+++ b/drivers/gpu/drm/i915/gem/i915_gem_context_types.h
@@ -188,6 +188,9 @@ struct i915_gem_proto_engine {
  * CONTEXT_CREATE_SET_PARAM during GEM_CONTEXT_CREATE.
  */
 struct i915_gem_proto_context {
+       /** @fpriv: Client which creates the context */
+       struct drm_i915_file_private *fpriv;
+
        /** @vm: See &i915_gem_context.vm */
        struct i915_address_space *vm;
 
diff --git a/drivers/gpu/drm/i915/gem/selftests/mock_context.c 
b/drivers/gpu/drm/i915/gem/selftests/mock_context.c
index 8ac6726ec16b..125584ada282 100644
--- a/drivers/gpu/drm/i915/gem/selftests/mock_context.c
+++ b/drivers/gpu/drm/i915/gem/selftests/mock_context.c
@@ -83,7 +83,7 @@ live_context(struct drm_i915_private *i915, struct file *file)
        int err;
        u32 id;
 
-       pc = proto_context_create(i915, 0);
+       pc = proto_context_create(fpriv, i915, 0);
        if (IS_ERR(pc))
                return ERR_CAST(pc);
 
@@ -152,7 +152,7 @@ kernel_context(struct drm_i915_private *i915,
        struct i915_gem_context *ctx;
        struct i915_gem_proto_context *pc;
 
-       pc = proto_context_create(i915, 0);
+       pc = proto_context_create(NULL, i915, 0);
        if (IS_ERR(pc))
                return ERR_CAST(pc);
 
diff --git a/drivers/gpu/drm/i915/gt/intel_gtt.h 
b/drivers/gpu/drm/i915/gt/intel_gtt.h
index 4d6296cdbcfd..7192a534a654 100644
--- a/drivers/gpu/drm/i915/gt/intel_gtt.h
+++ b/drivers/gpu/drm/i915/gt/intel_gtt.h
@@ -248,6 +248,7 @@ struct i915_address_space {
        struct drm_mm mm;
        struct intel_gt *gt;
        struct drm_i915_private *i915;
+       struct drm_i915_file_private *fpriv;
        struct device *dma;
        u64 total;              /* size addr space maps (ex. 2GB for ggtt) */
        u64 reserved;           /* size addr space reserved */
-- 
2.39.2

Reply via email to