On Mon, Oct 03, 2022 at 05:53:37PM +0200, Andi Shyti wrote:
Hi Niranjana,

[...]

+       for_each_child(ce, child) {
+               err = intel_context_pin_ww(child, ww);
+               GEM_BUG_ON(err);        /* perma-pinned should incr a counter */
+       }
+
+       for_each_child(ce, child) {
+               err = eb_pin_timeline(child, throttle, nonblock);
+               if (err)
+                       goto unwind;
+               ++i;
+       }

any reason for having two separate for_each_child here?


This part is ported as is from i915_gem_execbuffer.c.
Probably the author found it easy to unwind in case of error.

Regards,
Niranjana

Andi

+       err = eb_pin_timeline(ce, throttle, nonblock);
+       if (err)
+               goto unwind;
+
+       return 0;
+
+unwind:
+       for_each_child(ce, child) {
+               if (j++ < i) {
+                       mutex_lock(&child->timeline->mutex);
+                       intel_context_exit(child);
+                       mutex_unlock(&child->timeline->mutex);
+               }
+       }
+       for_each_child(ce, child)
+               intel_context_unpin(child);

[...]

Reply via email to