Lines Matching defs:fence

26  * @CS_WAIT_STATUS_GONE: cs completed but fence is already gone
193 struct hl_fence *fence =
196 container_of(fence, struct hl_cs_compl, base_fence);
201 void hl_fence_put(struct hl_fence *fence)
203 if (IS_ERR_OR_NULL(fence))
205 kref_put(&fence->refcount, hl_fence_release);
208 void hl_fences_put(struct hl_fence **fence, int len)
212 for (i = 0; i < len; i++, fence++)
213 hl_fence_put(*fence);
216 void hl_fence_get(struct hl_fence *fence)
218 if (fence)
219 kref_get(&fence->refcount);
222 static void hl_fence_init(struct hl_fence *fence, u64 sequence)
224 kref_init(&fence->refcount);
225 fence->cs_sequence = sequence;
226 fence->error = 0;
227 fence->timestamp = ktime_set(0, 0);
228 fence->mcs_handling_done = false;
229 init_completion(&fence->completion);
590 struct hl_fence *fence = cs->fence;
613 (fence->stream_master_qid_map &
617 mcs_compl->timestamp = ktime_to_ns(fence->timestamp);
623 * at least one fence have mcs_handling_done set to
628 fence->mcs_handling_done = true;
634 fence->mcs_handling_done = true;
682 container_of(cs->fence, struct hl_cs_compl, base_fence);
699 * In case the wait for signal CS was submitted, the fence put
762 * the hl fence release flow is different. Mainly, we don't need
766 cs->fence->error = -ETIMEDOUT;
768 cs->fence->error = -EIO;
770 cs->fence->error = -EBUSY;
780 cs->fence->timestamp = cs->completion_timestamp;
782 cs->fence->timestamp, cs->fence->error);
787 complete_all(&cs->fence->completion);
792 hl_fence_put(cs->fence);
948 cs->fence = &cs_cmpl->base_fence;
1090 pend->fence.error = -EIO;
1091 complete_all(&pend->fence.completion);
1132 cs->fence->error = -EIO;
1133 complete_all(&cs->fence->completion);
1632 * fence object for multi-CS completion
1635 cs->fence->stream_master_qid_map = stream_master_qid_map;
2371 * Save the signal CS fence for later initialization right before
2642 static int hl_wait_for_fence(struct hl_ctx *ctx, u64 seq, struct hl_fence *fence,
2650 if (IS_ERR(fence)) {
2651 rc = PTR_ERR(fence);
2659 if (!fence) {
2673 completion_rc = completion_done(&fence->completion);
2681 &fence->completion, timeout);
2684 error = fence->error;
2685 timestamp_kt = fence->timestamp;
2714 * While iterating, the function sets the stream map of each fence in the fence
2738 * case the fence iteration is guaranteed to catch the CS completion.
2752 struct hl_fence *fence = *fence_ptr;
2757 * 1. for each fence set it's QID map in the multi-CS completion QID map. This way
2766 if (fence)
2767 mcs_compl->stream_master_qid_map |= fence->stream_master_qid_map;
2771 * poll the fence)
2773 rc = hl_wait_for_fence(mcs_data->ctx, seq_arr[i], fence, &status, 0, NULL);
2791 * note: when reaching this case fence is definitely not NULL
2794 if (fence && !fence->mcs_handling_done) {
2811 if (fence && mcs_data->update_ts &&
2812 (ktime_compare(fence->timestamp, first_cs_time) < 0))
2813 first_cs_time = fence->timestamp;
2827 dev_err(hdev->dev, "Invalid fence status\n");
2846 struct hl_fence *fence;
2854 fence = hl_ctx_get_fence(ctx, seq);
2856 rc = hl_wait_for_fence(ctx, seq, fence, status, timeout_us, timestamp);
2857 hl_fence_put(fence);
3333 hl_fence_init(&pend->fence, ULONG_MAX);
3354 pend->fence.timestamp = ktime_get();
3360 pend->fence.timestamp = ktime_get();
3391 completion_rc = wait_for_completion_interruptible_timeout(&pend->fence.completion,
3403 if (pend->fence.error == -EIO) {
3406 pend->fence.error);
3432 *timestamp = ktime_to_ns(pend->fence.timestamp);
3472 hl_fence_init(&pend->fence, ULONG_MAX);
3493 pend->fence.timestamp = ktime_get();
3503 completion_rc = wait_for_completion_interruptible_timeout(&pend->fence.completion,
3516 reinit_completion(&pend->fence.completion);
3528 } else if (pend->fence.error) {
3531 pend->fence.error);
3558 *timestamp = ktime_to_ns(pend->fence.timestamp);