Lines Matching refs:cs
41 void hl_hw_queue_update_ci(struct hl_cs *cs) in hl_hw_queue_update_ci() argument
43 struct hl_device *hdev = cs->ctx->hdev; in hl_hw_queue_update_ci()
62 if (!cs_needs_completion(cs) || q->queue_type == QUEUE_TYPE_INT) in hl_hw_queue_update_ci()
63 atomic_add(cs->jobs_in_queue_cnt[i], &q->ci); in hl_hw_queue_update_ci()
270 struct hl_device *hdev = job->cs->ctx->hdev; in ext_queue_schedule_job()
291 if (!cs_needs_completion(job->cs)) in ext_queue_schedule_job()
335 struct hl_device *hdev = job->cs->ctx->hdev; in int_queue_schedule_job()
371 struct hl_device *hdev = job->cs->ctx->hdev; in hw_queue_schedule_job()
382 offset = job->cs->sequence & (hdev->asic_prop.max_pending_cs - 1); in hw_queue_schedule_job()
433 job->cs->sob_addr_offset = hw_sob->sob_addr; in init_signal_cs()
434 job->cs->initial_sob_count = prop->next_sob_val - 1; in init_signal_cs()
440 struct hl_cs *cs, struct hl_cs_job *job, in hl_hw_queue_encaps_sig_set_sob_info() argument
443 struct hl_cs_encaps_sig_handle *handle = cs->encaps_sig_hdl; in hl_hw_queue_encaps_sig_set_sob_info()
463 static int init_wait_cs(struct hl_device *hdev, struct hl_cs *cs, in init_wait_cs() argument
474 signal_cs_cmpl = container_of(cs->signal_fence, in init_wait_cs()
478 if (cs->encaps_signals) { in init_wait_cs()
483 hl_hw_queue_encaps_sig_set_sob_info(hdev, cs, job, cs_cmpl); in init_wait_cs()
486 cs->encaps_sig_hdl->q_idx, in init_wait_cs()
487 cs->encaps_sig_hdl->cs_seq, in init_wait_cs()
510 if (completion_done(&cs->signal_fence->completion)) { in init_wait_cs()
522 prop->base_mon_id, q_idx, cs->sequence); in init_wait_cs()
535 hl_fence_put(cs->signal_fence); in init_wait_cs()
536 cs->signal_fence = NULL; in init_wait_cs()
547 static int init_signal_wait_cs(struct hl_cs *cs) in init_signal_wait_cs() argument
549 struct hl_ctx *ctx = cs->ctx; in init_signal_wait_cs()
553 container_of(cs->fence, struct hl_cs_compl, base_fence); in init_signal_wait_cs()
557 job = list_first_entry(&cs->job_list, struct hl_cs_job, in init_signal_wait_cs()
560 if (cs->type & CS_TYPE_SIGNAL) in init_signal_wait_cs()
562 else if (cs->type & CS_TYPE_WAIT) in init_signal_wait_cs()
563 rc = init_wait_cs(hdev, cs, job, cs_cmpl); in init_signal_wait_cs()
569 (struct hl_device *hdev, struct hl_cs *cs) in encaps_sig_first_staged_cs_handler() argument
572 container_of(cs->fence, in encaps_sig_first_staged_cs_handler()
578 mgr = &cs->ctx->sig_mgr; in encaps_sig_first_staged_cs_handler()
581 encaps_sig_hdl = idr_find(&mgr->handles, cs->encaps_sig_hdl_id); in encaps_sig_first_staged_cs_handler()
587 encaps_sig_hdl->cs_seq = cs->sequence; in encaps_sig_first_staged_cs_handler()
604 cs->sequence, encaps_sig_hdl->id, in encaps_sig_first_staged_cs_handler()
612 cs->encaps_sig_hdl_id); in encaps_sig_first_staged_cs_handler()
625 int hl_hw_queue_schedule_cs(struct hl_cs *cs) in hl_hw_queue_schedule_cs() argument
629 struct hl_ctx *ctx = cs->ctx; in hl_hw_queue_schedule_cs()
654 if (cs->jobs_in_queue_cnt[i]) { in hl_hw_queue_schedule_cs()
658 cs->jobs_in_queue_cnt[i], in hl_hw_queue_schedule_cs()
659 cs_needs_completion(cs) ? in hl_hw_queue_schedule_cs()
664 cs->jobs_in_queue_cnt[i]); in hl_hw_queue_schedule_cs()
668 cs->jobs_in_queue_cnt[i]); in hl_hw_queue_schedule_cs()
689 if ((cs->type == CS_TYPE_SIGNAL) || (cs->type == CS_TYPE_WAIT)) { in hl_hw_queue_schedule_cs()
690 rc = init_signal_wait_cs(cs); in hl_hw_queue_schedule_cs()
693 } else if (cs->type == CS_TYPE_COLLECTIVE_WAIT) { in hl_hw_queue_schedule_cs()
694 rc = hdev->asic_funcs->collective_wait_init_cs(cs); in hl_hw_queue_schedule_cs()
699 rc = hdev->asic_funcs->pre_schedule_cs(cs); in hl_hw_queue_schedule_cs()
703 ctx->asid, cs->sequence); in hl_hw_queue_schedule_cs()
707 hdev->shadow_cs_queue[cs->sequence & in hl_hw_queue_schedule_cs()
708 (hdev->asic_prop.max_pending_cs - 1)] = cs; in hl_hw_queue_schedule_cs()
710 if (cs->encaps_signals && cs->staged_first) { in hl_hw_queue_schedule_cs()
711 rc = encaps_sig_first_staged_cs_handler(hdev, cs); in hl_hw_queue_schedule_cs()
719 if (cs->staged_cs && !cs->staged_first) { in hl_hw_queue_schedule_cs()
722 staged_cs = hl_staged_cs_find_first(hdev, cs->staged_sequence); in hl_hw_queue_schedule_cs()
726 cs->staged_sequence); in hl_hw_queue_schedule_cs()
734 cs->staged_sequence); in hl_hw_queue_schedule_cs()
739 list_add_tail(&cs->staged_cs_node, &staged_cs->staged_cs_node); in hl_hw_queue_schedule_cs()
744 cs->fence->stream_master_qid_map; in hl_hw_queue_schedule_cs()
747 list_add_tail(&cs->mirror_node, &hdev->cs_mirror_list); in hl_hw_queue_schedule_cs()
751 struct hl_cs, mirror_node) == cs; in hl_hw_queue_schedule_cs()
753 first_entry && cs_needs_timeout(cs)) { in hl_hw_queue_schedule_cs()
754 cs->tdr_active = true; in hl_hw_queue_schedule_cs()
755 schedule_delayed_work(&cs->work_tdr, cs->timeout_jiffies); in hl_hw_queue_schedule_cs()
761 list_for_each_entry_safe(job, tmp, &cs->job_list, cs_node) in hl_hw_queue_schedule_cs()
776 cs->submitted = true; in hl_hw_queue_schedule_cs()
786 (cs->jobs_in_queue_cnt[i])) { in hl_hw_queue_schedule_cs()
789 atomic_add(cs->jobs_in_queue_cnt[i], free_slots); in hl_hw_queue_schedule_cs()