Quoting Chris Wilson (2020-06-29 11:12:51) > @@ -108,7 +109,7 @@ void i915_gem_close_object(struct drm_gem_object *gem, struct drm_file *file) > struct i915_lut_handle *lut, *ln; > LIST_HEAD(close); > > - i915_gem_object_lock(obj); > + spin_lock(&obj->lut_lock); > list_for_each_entry_safe(lut, ln, &obj->lut_list, obj_link) { > struct i915_gem_context *ctx = lut->ctx; > > @@ -118,7 +119,7 @@ void i915_gem_close_object(struct drm_gem_object *gem, struct drm_file *file) > i915_gem_context_get(ctx); > list_move(&lut->obj_link, &close); > } > - i915_gem_object_unlock(obj); > + spin_unlock(&obj->lut_lock); This is only real worry, iterating under the spinlock. If we worry, we can do something like + struct i915_lut_handle bookmark = {}; LIST_HEAD(close); spin_lock(&obj->lut_lock); list_for_each_entry_safe(lut, ln, &obj->lut_list, obj_link) { struct i915_gem_context *ctx = lut->ctx; - if (ctx->file_priv != fpriv) - continue; + if (ctx && ctx->file_priv == fpriv) { + i915_gem_context_get(ctx); + list_move(&lut->obj_link, &close); + } - i915_gem_context_get(ctx); - list_move(&lut->obj_link, &close); + if (ln != &obj->lut_list) { + list_add(&bookmark->obj_link, &ln->obj_link); + if (cond_resched_lock(&obj->lut_lock)) + list_safe_reset_next(&bookmark, ln, obj_link); + list_del_entry(&bookmark->obj_link); + } } Might as well worry. -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx