[Intel-gfx] [PATCH v10] drm/i915: Extend LRC pinning to cover GPU context writeback

Nick Hoath nicholas.hoath at intel.com
Fri Jan 15 02:59:33 PST 2016


On 14/01/2016 12:37, Nick Hoath wrote:
> On 14/01/2016 12:31, Chris Wilson wrote:
>> On Thu, Jan 14, 2016 at 11:56:07AM +0000, Nick Hoath wrote:
>>> On 14/01/2016 11:36, Chris Wilson wrote:
>>>> On Wed, Jan 13, 2016 at 04:19:45PM +0000, Nick Hoath wrote:
>>>>> +	if (ctx->engine[ring->id].dirty) {
>>>>> +		struct drm_i915_gem_request *req = NULL;
>>>>> +
>>>>> +		/**
>>>>> +		 * If there is already a request pending on
>>>>> +		 * this ring, wait for that to complete,
>>>>> +		 * otherwise create a switch to idle request
>>>>> +		 */
>>>>> +		if (list_empty(&ring->request_list)) {
>>>>> +			int ret;
>>>>> +
>>>>> +			ret = i915_gem_request_alloc(
>>>>> +					ring,
>>>>> +					ring->default_context,
>>>>> +					&req);
>>>>> +			if (!ret)
>>>>> +				i915_add_request(req);
>>>>> +			else
>>>>> +				DRM_DEBUG("Failed to ensure context saved");
>>>>> +		} else {
>>>>> +			req = list_first_entry(
>>>>> +					&ring->request_list,
>>>>> +					typeof(*req), list);
>>>>> +		}
>>>>> +		if (req) {
>>>>> +			ret = i915_wait_request(req);
>>>>> +			if (ret != 0) {
>>>>> +				/**
>>>>> +				 * If we get here, there's probably been a ring
>>>>> +				 * reset, so we just clean up the dirty flag.&
>>>>> +				 * pin count.
>>>>> +				 */
>>>>> +				ctx->engine[ring->id].dirty = false;
>>>>> +				__intel_lr_context_unpin(
>>>>> +					ring,
>>>>> +					ctx);
>>>>> +			}
>>>>> +		}
>>>>
>>>> If you were to take a lr_context_pin on the last_context, and only
>>>> release that pin when you change to a new context, you do not need to
>>>
>>> That what this patch does.
>>>
>>>> introduce a blocking context-close, nor do you need to introduce the
>>>> usage of default_context.
>>>
>>> The use of default_context here is to stop a context hanging around
>>> after it is no longer needed.
>>
>> By blocking, which is not acceptable. Also we can eliminate the
>> default_context and so pinning that opposed to the last_context serves
>> no purpose other than by chance having a more preferrable position when
>> it comes to defragmentation. But you don't enable that anyway and we
>
> Enabling the shrinker on execlists is something I'm working on which is
> predicated on this patch. Also why is blocking on closing a context not
> acceptable?
>

As a clarification: Without rewriting the execlist code to not submit or 
cleanup from an interrupt handler, we can't use refcounting to allow non 
blocking closing.

>> have alternative strategies now that avoid the issue with fragmentation
>> of the mappable aperture.
>>
>>>> (lr_context_pin should take a reference on the ctx to prevent early
>>>> freeeing ofc).
>>>
>>> You can't clear the reference on the ctx in an interrupt context.
>>
>> The execlists submission should moved out of the interrupt context, for
>> the very simple reason that it is causing machine panics. userspace
>> submits a workload, machine lockups....
>
> Create a jira, and I'm sure we'll look at making that change.
>
>> -Chris
>>
>
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx
>



More information about the Intel-gfx mailing list