Lines Matching refs:rq
105 check_signal_order(struct intel_context *ce, struct i915_request *rq) in check_signal_order() argument
107 if (rq->context != ce) in check_signal_order()
110 if (!list_is_last(&rq->signal_link, &ce->signals) && in check_signal_order()
111 i915_seqno_passed(rq->fence.seqno, in check_signal_order()
112 list_next_entry(rq, signal_link)->fence.seqno)) in check_signal_order()
115 if (!list_is_first(&rq->signal_link, &ce->signals) && in check_signal_order()
116 i915_seqno_passed(list_prev_entry(rq, signal_link)->fence.seqno, in check_signal_order()
117 rq->fence.seqno)) in check_signal_order()
206 struct i915_request *rq; in signal_irq_work() local
208 list_for_each_entry_rcu(rq, &ce->signals, signal_link) { in signal_irq_work()
211 if (!__i915_request_is_complete(rq)) in signal_irq_work()
215 &rq->fence.flags)) in signal_irq_work()
224 list_del_rcu(&rq->signal_link); in signal_irq_work()
228 if (intel_timeline_is_last(ce->timeline, rq)) in signal_irq_work()
233 if (__dma_fence_signal(&rq->fence)) in signal_irq_work()
235 signal = slist_add(&rq->signal_node, signal); in signal_irq_work()
237 i915_request_put(rq); in signal_irq_work()
244 struct i915_request *rq = in signal_irq_work() local
245 llist_entry(signal, typeof(*rq), signal_node); in signal_irq_work()
248 if (rq->engine->sched_engine->retire_inflight_request_prio) in signal_irq_work()
249 rq->engine->sched_engine->retire_inflight_request_prio(rq); in signal_irq_work()
251 spin_lock(&rq->lock); in signal_irq_work()
252 list_replace(&rq->fence.cb_list, &cb_list); in signal_irq_work()
253 __dma_fence_signal__timestamp(&rq->fence, timestamp); in signal_irq_work()
254 __dma_fence_signal__notify(&rq->fence, &cb_list); in signal_irq_work()
255 spin_unlock(&rq->lock); in signal_irq_work()
257 i915_request_put(rq); in signal_irq_work()
332 static void irq_signal_request(struct i915_request *rq, in irq_signal_request() argument
335 if (!__dma_fence_signal(&rq->fence)) in irq_signal_request()
338 i915_request_get(rq); in irq_signal_request()
339 if (llist_add(&rq->signal_node, &b->signaled_requests)) in irq_signal_request()
343 static void insert_breadcrumb(struct i915_request *rq) in insert_breadcrumb() argument
345 struct intel_breadcrumbs *b = READ_ONCE(rq->engine)->breadcrumbs; in insert_breadcrumb()
346 struct intel_context *ce = rq->context; in insert_breadcrumb()
349 if (test_bit(I915_FENCE_FLAG_SIGNAL, &rq->fence.flags)) in insert_breadcrumb()
357 if (__i915_request_is_complete(rq)) { in insert_breadcrumb()
358 irq_signal_request(rq, b); in insert_breadcrumb()
385 if (i915_seqno_passed(rq->fence.seqno, it->fence.seqno)) in insert_breadcrumb()
390 i915_request_get(rq); in insert_breadcrumb()
391 list_add_rcu(&rq->signal_link, pos); in insert_breadcrumb()
392 GEM_BUG_ON(!check_signal_order(ce, rq)); in insert_breadcrumb()
393 GEM_BUG_ON(test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &rq->fence.flags)); in insert_breadcrumb()
394 set_bit(I915_FENCE_FLAG_SIGNAL, &rq->fence.flags); in insert_breadcrumb()
404 bool i915_request_enable_breadcrumb(struct i915_request *rq) in i915_request_enable_breadcrumb() argument
406 struct intel_context *ce = rq->context; in i915_request_enable_breadcrumb()
409 if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &rq->fence.flags)) in i915_request_enable_breadcrumb()
418 if (!test_bit(I915_FENCE_FLAG_ACTIVE, &rq->fence.flags)) in i915_request_enable_breadcrumb()
422 if (test_bit(I915_FENCE_FLAG_ACTIVE, &rq->fence.flags)) in i915_request_enable_breadcrumb()
423 insert_breadcrumb(rq); in i915_request_enable_breadcrumb()
429 void i915_request_cancel_breadcrumb(struct i915_request *rq) in i915_request_cancel_breadcrumb() argument
431 struct intel_breadcrumbs *b = READ_ONCE(rq->engine)->breadcrumbs; in i915_request_cancel_breadcrumb()
432 struct intel_context *ce = rq->context; in i915_request_cancel_breadcrumb()
436 if (!test_and_clear_bit(I915_FENCE_FLAG_SIGNAL, &rq->fence.flags)) { in i915_request_cancel_breadcrumb()
441 list_del_rcu(&rq->signal_link); in i915_request_cancel_breadcrumb()
447 if (__i915_request_is_complete(rq)) in i915_request_cancel_breadcrumb()
448 irq_signal_request(rq, b); in i915_request_cancel_breadcrumb()
450 i915_request_put(rq); in i915_request_cancel_breadcrumb()
456 struct i915_request *rq, *rn; in intel_context_remove_breadcrumbs() local
465 list_for_each_entry_safe(rq, rn, &ce->signals, signal_link) { in intel_context_remove_breadcrumbs()
466 GEM_BUG_ON(!__i915_request_is_complete(rq)); in intel_context_remove_breadcrumbs()
468 &rq->fence.flags)) in intel_context_remove_breadcrumbs()
471 list_del_rcu(&rq->signal_link); in intel_context_remove_breadcrumbs()
472 irq_signal_request(rq, b); in intel_context_remove_breadcrumbs()
473 i915_request_put(rq); in intel_context_remove_breadcrumbs()
489 struct i915_request *rq; in print_signals() local
495 list_for_each_entry_rcu(rq, &ce->signals, signal_link) in print_signals()
497 rq->fence.context, rq->fence.seqno, in print_signals()
498 __i915_request_is_complete(rq) ? "!" : in print_signals()
499 __i915_request_has_started(rq) ? "*" : in print_signals()
501 jiffies_to_msecs(jiffies - rq->emitted_jiffies)); in print_signals()