Re: [PATCH 1/6] drm/i915/gem: Move obj->lut_list under its own lock

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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



[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux