drm/i915: Record which client owns a VM
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.ursulin@intel.com> Reviewed-by: Aravind Iddamsetty <aravind.iddamsetty@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20231107101806.608990-2-tvrtko.ursulin@linux.intel.com
This commit is contained in:
parent
e4ae85e364
commit
ca02a0119f
@ -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) |
|
||||
@ -1622,6 +1624,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)
|
||||
@ -1741,7 +1744,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;
|
||||
@ -1823,6 +1826,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:
|
||||
@ -2285,7 +2289,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);
|
||||
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -255,6 +255,7 @@ struct i915_address_space {
|
||||
} rsvd;
|
||||
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 */
|
||||
|
Loading…
x
Reference in New Issue
Block a user