Lines Matching refs:rq

111 check_signal_order(struct intel_context *ce, struct i915_request *rq)
113 if (rq->context != ce)
116 if (!list_is_last(&rq->signal_link, &ce->signals) &&
117 i915_seqno_passed(rq->fence.seqno,
118 list_next_entry(rq, signal_link)->fence.seqno))
121 if (!list_is_first(&rq->signal_link, &ce->signals) &&
122 i915_seqno_passed(list_prev_entry(rq, signal_link)->fence.seqno,
123 rq->fence.seqno))
212 struct i915_request *rq;
214 list_for_each_entry_rcu(rq, &ce->signals, signal_link) {
217 if (!__i915_request_is_complete(rq))
221 &rq->fence.flags))
230 list_del_rcu(&rq->signal_link);
234 if (intel_timeline_is_last(ce->timeline, rq))
239 if (__dma_fence_signal(&rq->fence))
241 signal = slist_add(&rq->signal_node, signal);
243 i915_request_put(rq);
250 struct i915_request *rq =
251 llist_entry(signal, typeof(*rq), signal_node);
254 if (rq->engine->sched_engine->retire_inflight_request_prio)
255 rq->engine->sched_engine->retire_inflight_request_prio(rq);
257 spin_lock(&rq->lock);
258 list_replace(&rq->fence.cb_list, &cb_list);
259 __dma_fence_signal__timestamp(&rq->fence, timestamp);
260 __dma_fence_signal__notify(&rq->fence, &cb_list);
261 spin_unlock(&rq->lock);
263 i915_request_put(rq);
338 static void irq_signal_request(struct i915_request *rq,
341 if (!__dma_fence_signal(&rq->fence))
344 i915_request_get(rq);
345 if (llist_add(&rq->signal_node, &b->signaled_requests))
349 static void insert_breadcrumb(struct i915_request *rq)
351 struct intel_breadcrumbs *b = READ_ONCE(rq->engine)->breadcrumbs;
352 struct intel_context *ce = rq->context;
355 if (test_bit(I915_FENCE_FLAG_SIGNAL, &rq->fence.flags))
363 if (__i915_request_is_complete(rq)) {
364 irq_signal_request(rq, b);
391 if (i915_seqno_passed(rq->fence.seqno, it->fence.seqno))
396 i915_request_get(rq);
397 list_add_rcu(&rq->signal_link, pos);
398 GEM_BUG_ON(!check_signal_order(ce, rq));
399 GEM_BUG_ON(test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &rq->fence.flags));
400 set_bit(I915_FENCE_FLAG_SIGNAL, &rq->fence.flags);
407 if (!b->irq_armed || __i915_request_is_complete(rq))
411 bool i915_request_enable_breadcrumb(struct i915_request *rq)
413 struct intel_context *ce = rq->context;
415 /* Serialises with i915_request_retire() using rq->lock */
416 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &rq->fence.flags))
425 if (!test_bit(I915_FENCE_FLAG_ACTIVE, &rq->fence.flags))
429 if (test_bit(I915_FENCE_FLAG_ACTIVE, &rq->fence.flags))
430 insert_breadcrumb(rq);
436 void i915_request_cancel_breadcrumb(struct i915_request *rq)
438 struct intel_breadcrumbs *b = READ_ONCE(rq->engine)->breadcrumbs;
439 struct intel_context *ce = rq->context;
443 if (!test_and_clear_bit(I915_FENCE_FLAG_SIGNAL, &rq->fence.flags)) {
448 list_del_rcu(&rq->signal_link);
454 if (__i915_request_is_complete(rq))
455 irq_signal_request(rq, b);
457 i915_request_put(rq);
463 struct i915_request *rq, *rn;
472 list_for_each_entry_safe(rq, rn, &ce->signals, signal_link) {
473 GEM_BUG_ON(!__i915_request_is_complete(rq));
475 &rq->fence.flags))
478 list_del_rcu(&rq->signal_link);
479 irq_signal_request(rq, b);
480 i915_request_put(rq);
496 struct i915_request *rq;
502 list_for_each_entry_rcu(rq, &ce->signals, signal_link)
504 rq->fence.context, rq->fence.seqno,
505 __i915_request_is_complete(rq) ? "!" :
506 __i915_request_has_started(rq) ? "*" :
508 jiffies_to_msecs(jiffies - rq->emitted_jiffies));