[PATCH 47/47] virtual

Chris Wilson chris at chris-wilson.co.uk
Sun Feb 24 19:06:59 UTC 2019


---
 drivers/gpu/drm/i915/intel_lrc.c | 11 ++++++++++-
 1 file changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 45d30d1a580f..b53862978087 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -171,6 +171,7 @@ struct virtual_engine {
 
 	struct intel_context context;
 	struct kref kref;
+	struct rcu_head rcu;
 
 	struct i915_request *request;
 	struct ve_node {
@@ -3100,6 +3101,13 @@ void intel_lr_context_resume(struct drm_i915_private *i915)
 	}
 }
 
+static void __virtual_engine_free(struct rcu_head *rcu)
+{
+	struct virtual_engine *ve = container_of(rcu, typeof(*ve), rcu);
+
+	kfree(ve);
+}
+
 static void virtual_engine_free(struct kref *kref)
 {
 	struct virtual_engine *ve = container_of(kref, typeof(*ve), kref);
@@ -3128,7 +3136,7 @@ static void virtual_engine_free(struct kref *kref)
 		__execlists_context_fini(&ve->context);
 
 	i915_timeline_fini(&ve->base.timeline);
-	kfree(ve);
+	call_rcu(&ve->rcu, __virtual_engine_free);
 }
 
 static void virtual_context_unpin(struct intel_context *ce)
@@ -3321,6 +3329,7 @@ intel_execlists_create_virtual(struct i915_gem_context *ctx,
 		return ERR_PTR(-ENOMEM);
 
 	kref_init(&ve->kref);
+	rcu_head_init(&ve->rcu);
 	ve->base.i915 = ctx->i915;
 	ve->base.id = -1;
 	ve->base.class = OTHER_CLASS;
-- 
2.20.1



More information about the Intel-gfx-trybot mailing list