[PATCH v2 10/17] drm/i915/vm_bind: Abstract out common execbuf functions

Niranjana Vishwanathapura niranjana.vishwanathapura at intel.com
Mon Oct 3 21:06:18 UTC 2022


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);
>
>[...]


More information about the dri-devel mailing list