mirror of https://gitee.com/openkylin/linux.git
drm/i915/gem: Check for a closed context when looking up an engine
Beware that the context may already be closed as we try to lookup an engine. Closes: https://gitlab.freedesktop.org/drm/intel/issues/1389 Fixes:130a95e909
("drm/i915/gem: Consolidate ctx->engines[] release") Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Cc: Mika Kuoppala <mika.kuoppala@linux.intel.com> Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20200316161447.18410-1-chris@chris-wilson.co.uk (cherry picked from commita22f347834
) Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
parent
e50c951ea6
commit
16e5c2f0d3
|
@ -192,12 +192,16 @@ i915_gem_context_unlock_engines(struct i915_gem_context *ctx)
|
|||
static inline struct intel_context *
|
||||
i915_gem_context_get_engine(struct i915_gem_context *ctx, unsigned int idx)
|
||||
{
|
||||
struct intel_context *ce = ERR_PTR(-EINVAL);
|
||||
struct intel_context *ce;
|
||||
|
||||
rcu_read_lock(); {
|
||||
struct i915_gem_engines *e = rcu_dereference(ctx->engines);
|
||||
if (likely(idx < e->num_engines && e->engines[idx]))
|
||||
if (unlikely(!e)) /* context was closed! */
|
||||
ce = ERR_PTR(-ENOENT);
|
||||
else if (likely(idx < e->num_engines && e->engines[idx]))
|
||||
ce = intel_context_get(e->engines[idx]);
|
||||
else
|
||||
ce = ERR_PTR(-EINVAL);
|
||||
} rcu_read_unlock();
|
||||
|
||||
return ce;
|
||||
|
|
Loading…
Reference in New Issue