diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_request.c')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_request.c | 21 | 
1 files changed, 14 insertions, 7 deletions
diff --git a/drivers/gpu/drm/i915/i915_request.c b/drivers/gpu/drm/i915/i915_request.c index 78a5f5d3c070..f56b046a32de 100644 --- a/drivers/gpu/drm/i915/i915_request.c +++ b/drivers/gpu/drm/i915/i915_request.c @@ -595,6 +595,8 @@ static void __i915_request_ctor(void *arg)  	i915_sw_fence_init(&rq->submit, submit_notify);  	i915_sw_fence_init(&rq->semaphore, semaphore_notify); +	dma_fence_init(&rq->fence, &i915_fence_ops, &rq->lock, 0, 0); +  	rq->file_priv = NULL;  	rq->capture_list = NULL; @@ -653,25 +655,30 @@ __i915_request_create(struct intel_context *ce, gfp_t gfp)  		}  	} -	ret = intel_timeline_get_seqno(tl, rq, &seqno); -	if (ret) -		goto err_free; -  	rq->i915 = ce->engine->i915;  	rq->context = ce;  	rq->engine = ce->engine;  	rq->ring = ce->ring;  	rq->execution_mask = ce->engine->mask; +	kref_init(&rq->fence.refcount); +	rq->fence.flags = 0; +	rq->fence.error = 0; +	INIT_LIST_HEAD(&rq->fence.cb_list); + +	ret = intel_timeline_get_seqno(tl, rq, &seqno); +	if (ret) +		goto err_free; + +	rq->fence.context = tl->fence_context; +	rq->fence.seqno = seqno; +  	RCU_INIT_POINTER(rq->timeline, tl);  	RCU_INIT_POINTER(rq->hwsp_cacheline, tl->hwsp_cacheline);  	rq->hwsp_seqno = tl->hwsp_seqno;  	rq->rcustate = get_state_synchronize_rcu(); /* acts as smp_mb() */ -	dma_fence_init(&rq->fence, &i915_fence_ops, &rq->lock, -		       tl->fence_context, seqno); -  	/* We bump the ref for the fence chain */  	i915_sw_fence_reinit(&i915_request_get(rq)->submit);  	i915_sw_fence_reinit(&i915_request_get(rq)->semaphore);  | 
