[Intel-gfx] [PATCH 15/21] drm/i915: Reorder i915_add_request to separate the phases better
Mika Kuoppala
mika.kuoppala at linux.intel.com
Tue Sep 6 09:36:51 UTC 2016
Chris Wilson <chris at chris-wilson.co.uk> writes:
> Let's avoid mixing sealing the hardware commands for the request and
> adding the request to the software tracking.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
Reviewed-by: Mika Kuoppala <mika.kuoppala at intel.com>
> ---
> drivers/gpu/drm/i915/i915_gem_request.c | 28 ++++++++++++++--------------
> 1 file changed, 14 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c
> index c60a7b774cc6..34571e1eb328 100644
> --- a/drivers/gpu/drm/i915/i915_gem_request.c
> +++ b/drivers/gpu/drm/i915/i915_gem_request.c
> @@ -492,6 +492,8 @@ void __i915_add_request(struct drm_i915_gem_request *request, bool flush_caches)
> u32 reserved_tail;
> int ret;
>
> + trace_i915_gem_request_add(request);
> +
> /*
> * To ensure that this call will not fail, space for its emissions
> * should already have been reserved in the ring buffer. Let the ring
> @@ -515,20 +517,6 @@ void __i915_add_request(struct drm_i915_gem_request *request, bool flush_caches)
> WARN(ret, "engine->emit_flush() failed: %d!\n", ret);
> }
>
> - trace_i915_gem_request_add(request);
> -
> - /* Seal the request and mark it as pending execution. Note that
> - * we may inspect this state, without holding any locks, during
> - * hangcheck. Hence we apply the barrier to ensure that we do not
> - * see a more recent value in the hws than we are tracking.
> - */
> - request->emitted_jiffies = jiffies;
> - request->previous_seqno = engine->last_submitted_seqno;
> - engine->last_submitted_seqno = request->fence.seqno;
> - i915_gem_active_set(&engine->last_request, request);
> - list_add_tail(&request->link, &engine->request_list);
> - list_add_tail(&request->ring_link, &ring->request_list);
> -
> /* Record the position of the start of the breadcrumb so that
> * should we detect the updated seqno part-way through the
> * GPU processing the request, we never over-estimate the
> @@ -549,6 +537,18 @@ void __i915_add_request(struct drm_i915_gem_request *request, bool flush_caches)
> "for adding the request (%d bytes)\n",
> reserved_tail, ret);
>
> + /* Seal the request and mark it as pending execution. Note that
> + * we may inspect this state, without holding any locks, during
> + * hangcheck. Hence we apply the barrier to ensure that we do not
> + * see a more recent value in the hws than we are tracking.
> + */
> + request->emitted_jiffies = jiffies;
> + request->previous_seqno = engine->last_submitted_seqno;
> + engine->last_submitted_seqno = request->fence.seqno;
> + i915_gem_active_set(&engine->last_request, request);
> + list_add_tail(&request->link, &engine->request_list);
> + list_add_tail(&request->ring_link, &ring->request_list);
> +
> i915_gem_mark_busy(engine);
>
> local_bh_disable();
> --
> 2.9.3
More information about the Intel-gfx
mailing list