diff mbox series

[02/20] drm/i915/gt: Hook up intel_context_fini()

Message ID 20190718070024.21781-2-chris@chris-wilson.co.uk (mailing list archive)
State New, archived
Headers show
Series [01/20] drm/i915: Move aliasing_ppgtt underneath its i915_ggtt | expand

Commit Message

Chris Wilson July 18, 2019, 7 a.m. UTC
Prior to freeing the struct, call the fini function to cleanup the
common members. Currently this only calls the debug functions to mark
the structs as destroyed, but may be extended to real work in future.

Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
---
 drivers/gpu/drm/i915/gt/intel_context.c    | 6 ++++++
 drivers/gpu/drm/i915/gt/intel_context.h    | 1 +
 drivers/gpu/drm/i915/gt/intel_lrc.c        | 2 ++
 drivers/gpu/drm/i915/gt/intel_ringbuffer.c | 1 +
 drivers/gpu/drm/i915/gt/mock_engine.c      | 1 +
 5 files changed, 11 insertions(+)

Comments

Tvrtko Ursulin July 22, 2019, 12:22 p.m. UTC | #1
On 18/07/2019 08:00, Chris Wilson wrote:
> Prior to freeing the struct, call the fini function to cleanup the
> common members. Currently this only calls the debug functions to mark
> the structs as destroyed, but may be extended to real work in future.
> 
> Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
> ---
>   drivers/gpu/drm/i915/gt/intel_context.c    | 6 ++++++
>   drivers/gpu/drm/i915/gt/intel_context.h    | 1 +
>   drivers/gpu/drm/i915/gt/intel_lrc.c        | 2 ++
>   drivers/gpu/drm/i915/gt/intel_ringbuffer.c | 1 +
>   drivers/gpu/drm/i915/gt/mock_engine.c      | 1 +
>   5 files changed, 11 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/gt/intel_context.c b/drivers/gpu/drm/i915/gt/intel_context.c
> index b667e2b35804..9292b6ca5e9c 100644
> --- a/drivers/gpu/drm/i915/gt/intel_context.c
> +++ b/drivers/gpu/drm/i915/gt/intel_context.c
> @@ -204,6 +204,12 @@ intel_context_init(struct intel_context *ce,
>   			 __intel_context_active, __intel_context_retire);
>   }
>   
> +void intel_context_fini(struct intel_context *ce)
> +{
> +	mutex_destroy(&ce->pin_mutex);
> +	i915_active_fini(&ce->active);
> +}
> +
>   static void i915_global_context_shrink(void)
>   {
>   	kmem_cache_shrink(global.slab_ce);
> diff --git a/drivers/gpu/drm/i915/gt/intel_context.h b/drivers/gpu/drm/i915/gt/intel_context.h
> index b41c610c2ce6..23c7e4c0ce7c 100644
> --- a/drivers/gpu/drm/i915/gt/intel_context.h
> +++ b/drivers/gpu/drm/i915/gt/intel_context.h
> @@ -16,6 +16,7 @@
>   void intel_context_init(struct intel_context *ce,
>   			struct i915_gem_context *ctx,
>   			struct intel_engine_cs *engine);
> +void intel_context_fini(struct intel_context *ce);
>   
>   struct intel_context *
>   intel_context_create(struct i915_gem_context *ctx,
> diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c
> index d076d9148b6d..f95a042a92c6 100644
> --- a/drivers/gpu/drm/i915/gt/intel_lrc.c
> +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
> @@ -1553,6 +1553,7 @@ static void execlists_context_destroy(struct kref *kref)
>   	if (ce->state)
>   		__execlists_context_fini(ce);
>   
> +	intel_context_fini(ce);
>   	intel_context_free(ce);
>   }
>   
> @@ -3186,6 +3187,7 @@ static void virtual_context_destroy(struct kref *kref)
>   
>   	if (ve->context.state)
>   		__execlists_context_fini(&ve->context);
> +	intel_context_fini(&ve->context);
>   
>   	kfree(ve->bonds);
>   	kfree(ve);
> diff --git a/drivers/gpu/drm/i915/gt/intel_ringbuffer.c b/drivers/gpu/drm/i915/gt/intel_ringbuffer.c
> index 901ce1a94664..b056f25c66f2 100644
> --- a/drivers/gpu/drm/i915/gt/intel_ringbuffer.c
> +++ b/drivers/gpu/drm/i915/gt/intel_ringbuffer.c
> @@ -1388,6 +1388,7 @@ static void ring_context_destroy(struct kref *ref)
>   	if (ce->state)
>   		__ring_context_fini(ce);
>   
> +	intel_context_fini(ce);
>   	intel_context_free(ce);
>   }
>   
> diff --git a/drivers/gpu/drm/i915/gt/mock_engine.c b/drivers/gpu/drm/i915/gt/mock_engine.c
> index 490ebd121f4c..10cb312462e5 100644
> --- a/drivers/gpu/drm/i915/gt/mock_engine.c
> +++ b/drivers/gpu/drm/i915/gt/mock_engine.c
> @@ -142,6 +142,7 @@ static void mock_context_destroy(struct kref *ref)
>   	if (ce->ring)
>   		mock_ring_free(ce->ring);
>   
> +	intel_context_fini(ce);
>   	intel_context_free(ce);
>   }
>   
> 

The patch which builds upon this looks like a good direction.

Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>

Regards,

Tvrtko
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/gt/intel_context.c b/drivers/gpu/drm/i915/gt/intel_context.c
index b667e2b35804..9292b6ca5e9c 100644
--- a/drivers/gpu/drm/i915/gt/intel_context.c
+++ b/drivers/gpu/drm/i915/gt/intel_context.c
@@ -204,6 +204,12 @@  intel_context_init(struct intel_context *ce,
 			 __intel_context_active, __intel_context_retire);
 }
 
+void intel_context_fini(struct intel_context *ce)
+{
+	mutex_destroy(&ce->pin_mutex);
+	i915_active_fini(&ce->active);
+}
+
 static void i915_global_context_shrink(void)
 {
 	kmem_cache_shrink(global.slab_ce);
diff --git a/drivers/gpu/drm/i915/gt/intel_context.h b/drivers/gpu/drm/i915/gt/intel_context.h
index b41c610c2ce6..23c7e4c0ce7c 100644
--- a/drivers/gpu/drm/i915/gt/intel_context.h
+++ b/drivers/gpu/drm/i915/gt/intel_context.h
@@ -16,6 +16,7 @@ 
 void intel_context_init(struct intel_context *ce,
 			struct i915_gem_context *ctx,
 			struct intel_engine_cs *engine);
+void intel_context_fini(struct intel_context *ce);
 
 struct intel_context *
 intel_context_create(struct i915_gem_context *ctx,
diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c b/drivers/gpu/drm/i915/gt/intel_lrc.c
index d076d9148b6d..f95a042a92c6 100644
--- a/drivers/gpu/drm/i915/gt/intel_lrc.c
+++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
@@ -1553,6 +1553,7 @@  static void execlists_context_destroy(struct kref *kref)
 	if (ce->state)
 		__execlists_context_fini(ce);
 
+	intel_context_fini(ce);
 	intel_context_free(ce);
 }
 
@@ -3186,6 +3187,7 @@  static void virtual_context_destroy(struct kref *kref)
 
 	if (ve->context.state)
 		__execlists_context_fini(&ve->context);
+	intel_context_fini(&ve->context);
 
 	kfree(ve->bonds);
 	kfree(ve);
diff --git a/drivers/gpu/drm/i915/gt/intel_ringbuffer.c b/drivers/gpu/drm/i915/gt/intel_ringbuffer.c
index 901ce1a94664..b056f25c66f2 100644
--- a/drivers/gpu/drm/i915/gt/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/gt/intel_ringbuffer.c
@@ -1388,6 +1388,7 @@  static void ring_context_destroy(struct kref *ref)
 	if (ce->state)
 		__ring_context_fini(ce);
 
+	intel_context_fini(ce);
 	intel_context_free(ce);
 }
 
diff --git a/drivers/gpu/drm/i915/gt/mock_engine.c b/drivers/gpu/drm/i915/gt/mock_engine.c
index 490ebd121f4c..10cb312462e5 100644
--- a/drivers/gpu/drm/i915/gt/mock_engine.c
+++ b/drivers/gpu/drm/i915/gt/mock_engine.c
@@ -142,6 +142,7 @@  static void mock_context_destroy(struct kref *ref)
 	if (ce->ring)
 		mock_ring_free(ce->ring);
 
+	intel_context_fini(ce);
 	intel_context_free(ce);
 }