mirror of https://gitee.com/openkylin/linux.git
drm/i915/guc: Reorder __i915_guc_submit to reduce spinlock holdtime
A couple of operations, the flushes and the tracepoint, do not require serialisation by client->wq_lock, so move them before we take it. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Link: http://patchwork.freedesktop.org/patch/msgid/20170228112803.11646-3-chris@chris-wilson.co.uk Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
This commit is contained in:
parent
349ab9192c
commit
0c33518db7
|
@ -517,18 +517,18 @@ static void __i915_guc_submit(struct drm_i915_gem_request *rq)
|
|||
struct i915_guc_client *client = guc->execbuf_client;
|
||||
int b_ret;
|
||||
|
||||
/* We are always called with irqs disabled */
|
||||
GEM_BUG_ON(!irqs_disabled());
|
||||
|
||||
spin_lock(&client->wq_lock);
|
||||
guc_wq_item_append(client, rq);
|
||||
|
||||
/* WA to flush out the pending GMADR writes to ring buffer. */
|
||||
if (i915_vma_is_map_and_fenceable(rq->ring->vma))
|
||||
POSTING_READ_FW(GUC_STATUS);
|
||||
|
||||
trace_i915_gem_request_in(rq, 0);
|
||||
|
||||
/* We are always called with irqs disabled */
|
||||
GEM_BUG_ON(!irqs_disabled());
|
||||
|
||||
spin_lock(&client->wq_lock);
|
||||
|
||||
guc_wq_item_append(client, rq);
|
||||
b_ret = guc_ring_doorbell(client);
|
||||
|
||||
client->submissions[engine_id] += 1;
|
||||
|
@ -538,6 +538,7 @@ static void __i915_guc_submit(struct drm_i915_gem_request *rq)
|
|||
|
||||
guc->submissions[engine_id] += 1;
|
||||
guc->last_seqno[engine_id] = rq->global_seqno;
|
||||
|
||||
spin_unlock(&client->wq_lock);
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue