• Home
  • Raw
  • Download

Lines Matching full:job

123 static bool is_cb_patched(struct hl_device *hdev, struct hl_cs_job *job)  in is_cb_patched()  argument
129 return (job->queue_type == QUEUE_TYPE_EXT || in is_cb_patched()
130 (job->queue_type == QUEUE_TYPE_HW && in is_cb_patched()
131 job->is_kernel_allocated_cb && in is_cb_patched()
139 * @job : pointer to the job that holds the command submission info
146 static int cs_parser(struct hl_fpriv *hpriv, struct hl_cs_job *job) in cs_parser() argument
152 parser.ctx_id = job->cs->ctx->asid; in cs_parser()
153 parser.cs_sequence = job->cs->sequence; in cs_parser()
154 parser.job_id = job->id; in cs_parser()
156 parser.hw_queue_id = job->hw_queue_id; in cs_parser()
157 parser.job_userptr_list = &job->userptr_list; in cs_parser()
159 parser.user_cb = job->user_cb; in cs_parser()
160 parser.user_cb_size = job->user_cb_size; in cs_parser()
161 parser.queue_type = job->queue_type; in cs_parser()
162 parser.is_kernel_allocated_cb = job->is_kernel_allocated_cb; in cs_parser()
163 job->patched_cb = NULL; in cs_parser()
167 if (is_cb_patched(hdev, job)) { in cs_parser()
169 job->patched_cb = parser.patched_cb; in cs_parser()
170 job->job_cb_size = parser.patched_cb_size; in cs_parser()
171 job->contains_dma_pkt = parser.contains_dma_pkt; in cs_parser()
173 spin_lock(&job->patched_cb->lock); in cs_parser()
174 job->patched_cb->cs_cnt++; in cs_parser()
175 spin_unlock(&job->patched_cb->lock); in cs_parser()
183 spin_lock(&job->user_cb->lock); in cs_parser()
184 job->user_cb->cs_cnt--; in cs_parser()
185 spin_unlock(&job->user_cb->lock); in cs_parser()
186 hl_cb_put(job->user_cb); in cs_parser()
187 job->user_cb = NULL; in cs_parser()
189 job->job_cb_size = job->user_cb_size; in cs_parser()
195 static void free_job(struct hl_device *hdev, struct hl_cs_job *job) in free_job() argument
197 struct hl_cs *cs = job->cs; in free_job()
199 if (is_cb_patched(hdev, job)) { in free_job()
200 hl_userptr_delete_list(hdev, &job->userptr_list); in free_job()
206 if (job->patched_cb) { in free_job()
207 spin_lock(&job->patched_cb->lock); in free_job()
208 job->patched_cb->cs_cnt--; in free_job()
209 spin_unlock(&job->patched_cb->lock); in free_job()
211 hl_cb_put(job->patched_cb); in free_job()
219 if (job->queue_type == QUEUE_TYPE_HW && in free_job()
220 job->is_kernel_allocated_cb && hdev->mmu_enable) { in free_job()
221 spin_lock(&job->user_cb->lock); in free_job()
222 job->user_cb->cs_cnt--; in free_job()
223 spin_unlock(&job->user_cb->lock); in free_job()
225 hl_cb_put(job->user_cb); in free_job()
233 list_del(&job->cs_node); in free_job()
236 hl_debugfs_remove_job(hdev, job); in free_job()
238 if (job->queue_type == QUEUE_TYPE_EXT || in free_job()
239 job->queue_type == QUEUE_TYPE_HW) in free_job()
242 kfree(job); in free_job()
264 struct hl_cs_job *job, *tmp; in cs_do_release() local
273 * potentially the CTX object) could be released, while the JOB in cs_do_release()
276 list_for_each_entry_safe(job, tmp, &cs->job_list, cs_node) in cs_do_release()
277 free_job(hdev, job); in cs_do_release()
480 struct hl_cs_job *job, *tmp; in cs_rollback() local
482 list_for_each_entry_safe(job, tmp, &cs->job_list, cs_node) in cs_rollback()
483 free_job(hdev, job); in cs_rollback()
509 struct hl_cs_job *job = container_of(work, struct hl_cs_job, in job_wq_completion() local
511 struct hl_cs *cs = job->cs; in job_wq_completion()
514 /* job is no longer needed */ in job_wq_completion()
515 free_job(hdev, job); in job_wq_completion()
590 struct hl_cs_job *job; in hl_cs_allocate_job() local
592 job = kzalloc(sizeof(*job), GFP_ATOMIC); in hl_cs_allocate_job()
593 if (!job) in hl_cs_allocate_job()
596 job->queue_type = queue_type; in hl_cs_allocate_job()
597 job->is_kernel_allocated_cb = is_kernel_allocated_cb; in hl_cs_allocate_job()
599 if (is_cb_patched(hdev, job)) in hl_cs_allocate_job()
600 INIT_LIST_HEAD(&job->userptr_list); in hl_cs_allocate_job()
602 if (job->queue_type == QUEUE_TYPE_EXT) in hl_cs_allocate_job()
603 INIT_WORK(&job->finish_work, job_wq_completion); in hl_cs_allocate_job()
605 return job; in hl_cs_allocate_job()
613 struct hl_cs_job *job; in cs_ioctl_default() local
684 job = hl_cs_allocate_job(hdev, queue_type, in cs_ioctl_default()
686 if (!job) { in cs_ioctl_default()
688 dev_err(hdev->dev, "Failed to allocate a new job\n"); in cs_ioctl_default()
696 job->id = i + 1; in cs_ioctl_default()
697 job->cs = cs; in cs_ioctl_default()
698 job->user_cb = cb; in cs_ioctl_default()
699 job->user_cb_size = chunk->cb_size; in cs_ioctl_default()
700 job->hw_queue_id = chunk->queue_index; in cs_ioctl_default()
702 cs->jobs_in_queue_cnt[job->hw_queue_id]++; in cs_ioctl_default()
704 list_add_tail(&job->cs_node, &cs->job_list); in cs_ioctl_default()
709 * Only increment for JOB on external or H/W queues, because in cs_ioctl_default()
712 if (job->queue_type == QUEUE_TYPE_EXT || in cs_ioctl_default()
713 job->queue_type == QUEUE_TYPE_HW) in cs_ioctl_default()
716 hl_debugfs_add_job(hdev, job); in cs_ioctl_default()
718 rc = cs_parser(hpriv, job); in cs_ioctl_default()
722 "Failed to parse JOB %d.%llu.%d, err %d, rejecting the CS\n", in cs_ioctl_default()
723 cs->ctx->asid, cs->sequence, job->id, rc); in cs_ioctl_default()
776 struct hl_cs_job *job; in cs_ioctl_signal_wait() local
920 job = hl_cs_allocate_job(hdev, q_type, true); in cs_ioctl_signal_wait()
921 if (!job) { in cs_ioctl_signal_wait()
923 dev_err(hdev->dev, "Failed to allocate a new job\n"); in cs_ioctl_signal_wait()
937 kfree(job); in cs_ioctl_signal_wait()
942 job->id = 0; in cs_ioctl_signal_wait()
943 job->cs = cs; in cs_ioctl_signal_wait()
944 job->user_cb = cb; in cs_ioctl_signal_wait()
945 job->user_cb->cs_cnt++; in cs_ioctl_signal_wait()
946 job->user_cb_size = cb_size; in cs_ioctl_signal_wait()
947 job->hw_queue_id = q_idx; in cs_ioctl_signal_wait()
955 job->patched_cb = job->user_cb; in cs_ioctl_signal_wait()
956 job->job_cb_size = job->user_cb_size; in cs_ioctl_signal_wait()
959 cs->jobs_in_queue_cnt[job->hw_queue_id]++; in cs_ioctl_signal_wait()
961 list_add_tail(&job->cs_node, &cs->job_list); in cs_ioctl_signal_wait()
966 hl_debugfs_add_job(hdev, job); in cs_ioctl_signal_wait()