[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